{"id":"CVE-2024-36105","aliases":["EUVD-2024-1719","GHSA-pmrx-695r-4349","PYSEC-2026-1292"],"status":"published","title":"dbt allows Binding to an Unrestricted IP Address via socketsocket","description":"dbt enables data analysts and engineers to transform their data using the same practices that software engineers use to build applications. Prior to versions 1.6.15, 1.7.15, and 1.8.1, Binding to `INADDR_ANY (0.0.0.0)` or `IN6ADDR_ANY (::)` exposes an application on all network interfaces, increasing the risk of unauthorized access. As stated in the Python docs, a special form for address is accepted instead of a host address: `''` represents `INADDR_ANY`, equivalent to `\"0.0.0.0\"`. On systems with IPv6, '' represents `IN6ADDR_ANY`, which is equivalent to `\"::\"`. A user who serves docs on an unsecured public network, may unknowingly be hosting an unsecured (http) web site for any remote user/system to access on the same network. The issue has has been mitigated in dbt-core v1.6.15, dbt-core v1.7.15, and dbt-core v1.8.1 by binding to localhost explicitly by default in `dbt docs serve`.","severity":{"version":"3.1","score":5.3,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-11","score":0.0071,"percentile":0.53962,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-1327"],"published":"2024-05-27T17:17:39Z","modified":"2026-10-28T02:30:49Z","fixes":[{"ecosystem":"PyPI","package":"dbt-core","fixed_in":["1.6.15","1.7.15","1.8.1"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"PyPI","package":"dbt-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.6.15"}]}]},{"source":"ghsa","ecosystem":"PyPI","package":"dbt-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.7.0"},{"fixed":"1.7.15"}]}]},{"source":"ghsa","ecosystem":"PyPI","package":"dbt-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.8.0"},{"last_affected":"1.8.0"},{"fixed":"1.8.1"}]}],"versions":["1.8.0"]},{"source":"osv","ecosystem":"PyPI","package":"dbt-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.6.15"}]}],"versions":["0.13.0","0.13.0a1","0.13.0a2","0.13.0rc1","0.13.1","0.13.1a1","0.13.1a2","0.14.0","0.14.0a1","0.14.0a2","0.14.0rc1","0.14.1","0.14.1a1","0.14.1rc1","0.14.1rc2","0.14.2","0.14.3","0.14.3rc1","0.14.4","0.15.0","0.15.0b1","0.15.0b2","0.15.0b3","0.15.0rc1","0.15.0rc2","0.15.1","0.15.1rc1","0.15.1rc2","0.15.2","0.15.3","0.15.3rc1","0.16.0","0.16.0b1","0.16.0b2","0.16.0b3","0.16.0rc1","0.16.0rc2","0.16.0rc3","0.16.0rc4","0.16.1","0.16.1rc1","0.17.0","0.17.0b1","0.17.0b2","0.17.0rc1","0.17.0rc2","0.17.0rc3","0.17.0rc4","0.17.1","0.17.1rc1","0.17.1rc2","0.17.1rc3","0.17.1rc4","0.17.2","0.17.2b1","0.17.2rc1","0.18.0","0.18.0b1","0.18.0b2","0.18.0rc1","0.18.0rc2","0.18.1","0.18.1b1","0.18.1b2","0.18.1b3","0.18.1rc1","0.18.2","0.18.2rc1","0.19.0","0.19.0b1","0.19.0rc1","0.19.0rc2","0.19.0rc3","0.19.1","0.19.1b2","0.19.1rc1","0.19.1rc2","0.19.2","0.19.2rc1","0.19.2rc2","0.20.0","0.20.0b1","0.20.0rc1","0.20.0rc2","0.20.1","0.20.1rc1","0.20.2","0.20.2rc1","0.20.2rc2","0.21.0","0.21.0b1","0.21.0b2","0.21.0rc1","0.21.0rc2","0.21.1","0.21.1rc1","0.21.1rc2","1.0.0","1.0.0b1","1.0.0b2","1.0.0rc1","1.0.0rc2","1.0.0rc3","1.0.1","1.0.1rc1","1.0.2","1.0.2rc1","1.0.3","1.0.4","1.0.5","1.0.5rc1","1.0.5rc2","1.0.5rc3","1.0.6","1.0.6rc1","1.0.7","1.0.8","1.0.9","1.1.0","1.1.0b1","1.1.0rc1","1.1.0rc2","1.1.0rc3","1.1.1","1.1.1rc1","1.1.1rc2","1.1.2","1.1.2rc1","1.1.3","1.1.4","1.1.5","1.1.6","1.2.0","1.2.0b1","1.2.0rc1","1.2.0rc2","1.2.1","1.2.1rc1","1.2.1rc2","1.2.2","1.2.3","1.2.4","1.2.5","1.2.6","1.2.7","1.3.0","1.3.0b1","1.3.0b2","1.3.0rc1","1.3.0rc2","1.3.1","1.3.2","1.3.2rc1","1.3.3","1.3.4","1.3.5","1.3.6","1.3.7","1.3.8","1.4.0","1.4.0b1","1.4.0rc1","1.4.0rc2","1.4.1","1.4.10","1.4.2","1.4.2rc1","1.4.2rc2","1.4.3","1.4.4","1.4.5","1.4.6","1.4.7","1.4.8","1.4.9","1.5.0","1.5.0b1","1.5.0b2","1.5.0b3","1.5.0b4","1.5.0b5","1.5.0rc1","1.5.0rc2","1.5.1","1.5.10","1.5.11","1.5.12","1.5.1rc1","1.5.1rc2","1.5.2","1.5.2rc1","1.5.2rc2","1.5.3","1.5.4","1.5.4rc1","1.5.5","1.5.6","1.5.7","1.5.8","1.5.9","1.6.0","1.6.0b1","1.6.0b2","1.6.0b3","1.6.0b4","1.6.0b5","1.6.0b6","1.6.0b7","1.6.0b8","1.6.0rc1","1.6.0rc2","1.6.1","1.6.10","1.6.11","1.6.12","1.6.13","1.6.14","1.6.1rc1","1.6.2","1.6.3","1.6.4","1.6.5","1.6.6","1.6.7","1.6.8","1.6.9"]},{"source":"osv","ecosystem":"PyPI","package":"dbt-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.7.0"},{"fixed":"1.7.15"}]}],"versions":["1.7.0","1.7.1","1.7.10","1.7.11","1.7.12","1.7.13","1.7.14","1.7.2","1.7.3","1.7.4","1.7.5","1.7.6","1.7.7","1.7.8","1.7.9"]},{"source":"osv","ecosystem":"PyPI","package":"dbt-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.8.0"},{"fixed":"1.8.1"}]}],"versions":["1.8.0"]},{"source":"osv","ecosystem":"PyPI","package":"dbt-core","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.6.15"},{"introduced":"1.7.0"},{"fixed":"1.7.15"},{"introduced":"1.8.0"},{"fixed":"1.8.1"}]}],"versions":["0.13.0","0.13.0a1","0.13.0a2","0.13.0rc1","0.13.1","0.13.1a1","0.13.1a2","0.14.0","0.14.0a1","0.14.0a2","0.14.0rc1","0.14.1","0.14.1a1","0.14.1rc1","0.14.1rc2","0.14.2","0.14.3","0.14.3rc1","0.14.4","0.15.0","0.15.0b1","0.15.0b2","0.15.0b3","0.15.0rc1","0.15.0rc2","0.15.1","0.15.1rc1","0.15.1rc2","0.15.2","0.15.3","0.15.3rc1","0.16.0","0.16.0b1","0.16.0b2","0.16.0b3","0.16.0rc1","0.16.0rc2","0.16.0rc3","0.16.0rc4","0.16.1","0.16.1rc1","0.17.0","0.17.0b1","0.17.0b2","0.17.0rc1","0.17.0rc2","0.17.0rc3","0.17.0rc4","0.17.1","0.17.1rc1","0.17.1rc2","0.17.1rc3","0.17.1rc4","0.17.2","0.17.2b1","0.17.2rc1","0.18.0","0.18.0b1","0.18.0b2","0.18.0rc1","0.18.0rc2","0.18.1","0.18.1b1","0.18.1b2","0.18.1b3","0.18.1rc1","0.18.2","0.18.2rc1","0.19.0","0.19.0b1","0.19.0rc1","0.19.0rc2","0.19.0rc3","0.19.1","0.19.1b2","0.19.1rc1","0.19.1rc2","0.19.2","0.19.2rc1","0.19.2rc2","0.20.0","0.20.0b1","0.20.0rc1","0.20.0rc2","0.20.1","0.20.1rc1","0.20.2","0.20.2rc1","0.20.2rc2","0.21.0","0.21.0b1","0.21.0b2","0.21.0rc1","0.21.0rc2","0.21.1","0.21.1rc1","0.21.1rc2","1.0.0","1.0.0b1","1.0.0b2","1.0.0rc1","1.0.0rc2","1.0.0rc3","1.0.1","1.0.1rc1","1.0.2","1.0.2rc1","1.0.3","1.0.4","1.0.5","1.0.5rc1","1.0.5rc2","1.0.5rc3","1.0.6","1.0.6rc1","1.0.7","1.0.8","1.0.9","1.1.0","1.1.0b1","1.1.0rc1","1.1.0rc2","1.1.0rc3","1.1.1","1.1.1rc1","1.1.1rc2","1.1.2","1.1.2rc1","1.1.3","1.1.4","1.1.5","1.2.0","1.2.0b1","1.2.0rc1","1.2.0rc2","1.2.1","1.2.1rc1","1.2.1rc2","1.2.2","1.2.3","1.2.4","1.2.5","1.2.6","1.3.0","1.3.0b1","1.3.0b2","1.3.0rc1","1.3.0rc2","1.3.1","1.3.2","1.3.2rc1","1.3.3","1.3.4","1.3.5","1.3.6","1.3.7","1.4.0","1.4.0b1","1.4.0rc1","1.4.0rc2","1.4.1","1.4.2","1.4.2rc1","1.4.2rc2","1.4.3","1.4.4","1.4.5","1.4.6","1.4.7","1.4.8","1.4.9","1.5.0","1.5.0b1","1.5.0b2","1.5.0b3","1.5.0b4","1.5.0b5","1.5.0rc1","1.5.0rc2","1.5.1","1.5.10","1.5.11","1.5.1rc1","1.5.1rc2","1.5.2","1.5.2rc1","1.5.2rc2","1.5.3","1.5.4","1.5.4rc1","1.5.5","1.5.6","1.5.7","1.5.8","1.5.9","1.6.0","1.6.0b1","1.6.0b2","1.6.0b3","1.6.0b4","1.6.0b5","1.6.0b6","1.6.0b7","1.6.0b8","1.6.0rc1","1.6.0rc2","1.6.1","1.6.10","1.6.11","1.6.12","1.6.13","1.6.14","1.6.1rc1","1.6.2","1.6.3","1.6.4","1.6.5","1.6.6","1.6.7","1.6.8","1.6.9","1.7.0","1.7.1","1.7.10","1.7.11","1.7.12","1.7.13","1.7.14","1.7.2","1.7.3","1.7.4","1.7.5","1.7.6","1.7.7","1.7.8","1.7.9","1.8.0"]}],"products":[{"vendor":"dbt-labs","product":"dbt-core"}],"references":[{"url":"https://github.com/dbt-labs/dbt-core/security/advisories/GHSA-pmrx-695r-4349","tags":["x_refsource_CONFIRM","x_transferred","advisory","web"]},{"url":"https://github.com/dbt-labs/dbt-core/issues/10209","tags":["x_refsource_MISC","x_transferred","report","web"]},{"url":"https://github.com/dbt-labs/dbt-core/pull/10208","tags":["x_refsource_MISC","x_transferred","fix","web"]},{"url":"https://github.com/dbt-labs/dbt-core/commit/0c08d7a19ad1740be3cb0b2e6d9d64f6537176f7","tags":["x_refsource_MISC","x_transferred","fix","web"]},{"url":"https://cwe.mitre.org/data/definitions/1327.html","tags":["x_refsource_MISC","x_transferred","web"]},{"url":"https://docs.python.org/3/library/socket.html#socket-families","tags":["x_refsource_MISC","x_transferred","web"]},{"url":"https://docs.securesauce.dev/rules/PY030","tags":["x_refsource_MISC","x_transferred","web"]},{"url":"https://github.com/dbt-labs/dbt-core/blob/main/core/dbt/task/docs/serve.py#L23C38-L23C39","tags":["x_refsource_MISC","x_transferred","web"]},{"url":"https://github.com/dbt-labs/dbt-core/releases/tag/v1.6.15","tags":["x_refsource_MISC","x_transferred","web"]},{"url":"https://github.com/dbt-labs/dbt-core/releases/tag/v1.7.15","tags":["x_refsource_MISC","x_transferred","web"]},{"url":"https://github.com/dbt-labs/dbt-core/releases/tag/v1.8.1","tags":["x_refsource_MISC","x_transferred","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2024-36105","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-pmrx-695r-4349","tags":["advisory"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2024/36xxx/CVE-2024-36105.json","tags":["advisory"]},{"url":"https://github.com/dbt-labs/dbt-core","tags":["package"]},{"url":"https://pypi.org/project/dbt-core","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2024-36105","title":"dbt allows Binding to an Unrestricted IP Address via socketsocket","description":"dbt enables data analysts and engineers to transform their data using the same practices that software engineers use to build applications. Prior to versions 1.6.15, 1.7.15, and 1.8.1, Binding to `INADDR_ANY (0.0.0.0)` or `IN6ADDR_ANY (::)` exposes an application on all network interfaces, increasing the risk of unauthorized access. As stated in the Python docs, a special form for address is accepted instead of a host address: `''` represents `INADDR_ANY`, equivalent to `\"0.0.0.0\"`. On systems with IPv6, '' represents `IN6ADDR_ANY`, which is equivalent to `\"::\"`. A user who serves docs on an unsecured public network, may unknowingly be hosting an unsecured (http) web site for any remote user/system to access on the same network. The issue has has been mitigated in dbt-core v1.6.15, dbt-core v1.7.15, and dbt-core v1.8.1 by binding to localhost explicitly by default in `dbt docs serve`.\n","status":"published","published":"2024-05-27T17:17:39.875Z","modified":"2024-08-21T14:20:58.463Z","cvss":[{"version":"3.1","score":5.3,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N","level":"medium","assessor":"cna"}],"cwes":["CWE-1327"],"updated_at":"2026-11-02T14:34:14.649724Z"}],"euvd":[{"id":"EUVD-2024-1719","description":"dbt enables data analysts and engineers to transform their data using the same practices that software engineers use to build applications. Prior to versions 1.6.15, 1.7.15, and 1.8.1, Binding to `INADDR_ANY (0.0.0.0)` or `IN6ADDR_ANY (::)` exposes an application on all network interfaces, increasing the risk of unauthorized access. As stated in the Python docs, a special form for address is accepted instead of a host address: `''` represents `INADDR_ANY`, equivalent to `\"0.0.0.0\"`. On systems with IPv6, '' represents `IN6ADDR_ANY`, which is equivalent to `\"::\"`. A user who serves docs on an unsecured public network, may unknowingly be hosting an unsecured (http) web site for any remote user/system to access on the same network. The issue has has been mitigated in dbt-core v1.6.15, dbt-core v1.7.15, and dbt-core v1.8.1 by binding to localhost explicitly by default in `dbt docs serve`.\n","status":"published","published":"2024-05-27T17:17:39Z","modified":"2024-08-21T14:20:58Z","cvss":[{"version":"3.1","score":5.3,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N","level":"medium"}],"updated_at":"2026-11-03T00:56:14.188111Z"}],"ghsa":[{"id":"GHSA-pmrx-695r-4349","title":"dbt allows Binding to an Unrestricted IP Address via socketsocket","description":"### Summary\n\nBinding to `INADDR_ANY (0.0.0.0)` or `IN6ADDR_ANY (::)` exposes an application on all network interfaces, increasing the risk of unauthorized access.\n\nWhile doing some static analysis and code inspection, I found the following code binding a socket to `INADDR_ANY` by passing `\"\"` as the address. This effectively binds to any network interface on the local system, not just localhost (127.0.0.1). \n\n### Details\n\nAs stated in the Python docs, a special form for address is accepted instead of a host address: `''` represents `INADDR_ANY`, equivalent to `\"0.0.0.0\"`. On systems with IPv6, '' represents `IN6ADDR_ANY`, which is equivalent to `\"::\"`. \n\nhttps://github.com/dbt-labs/dbt-core/blob/main/core/dbt/task/docs/serve.py#L23C38-L23C39\n\nThe text around this code also imply the intention is to host docs only on localhost.\n\n### PoC\n\nTo recreate, run the docs ServeTask.run() to stand up the HTTP server.  Then run `netstat` to see what addresses this process is bound.\n\n### Impact\n\nA user who serves docs on an unsecured public network, may unknowingly be hosting an unsecured (http) web site for any remote user/system to access on the same network.\n\nFurther references:\nhttps://docs.python.org/3/library/socket.html#socket-families\nhttps://docs.securesauce.dev/rules/PY030\nhttps://cwe.mitre.org/data/definitions/1327.html\n\n### Patches\nThe issue has has been mitigated in [dbt-core v1.6.15](https://github.com/dbt-labs/dbt-core/releases/tag/v1.6.15), [dbt-core v1.7.15](https://github.com/dbt-labs/dbt-core/releases/tag/v1.7.15), and [dbt-core v1.8.1](https://github.com/dbt-labs/dbt-core/releases/tag/v1.8.1) by binding to localhost explicitly by default in `dbt docs serve` (https://github.com/dbt-labs/dbt-core/issues/10209).\n","status":"published","published":"2024-05-28T21:19:14Z","modified":"2024-05-28T21:19:15Z","cvss":[{"version":"3.1","score":5.3,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N","level":"medium"}],"cwes":["CWE-1327"],"updated_at":"2026-11-02T14:37:52.2286Z"}],"nvd":[{"id":"CVE-2024-36105","description":"dbt enables data analysts and engineers to transform their data using the same practices that software engineers use to build applications. Prior to versions 1.6.15, 1.7.15, and 1.8.1, Binding to `INADDR_ANY (0.0.0.0)` or `IN6ADDR_ANY (::)` exposes an application on all network interfaces, increasing the risk of unauthorized access. As stated in the Python docs, a special form for address is accepted instead of a host address: `''` represents `INADDR_ANY`, equivalent to `\"0.0.0.0\"`. On systems with IPv6, '' represents `IN6ADDR_ANY`, which is equivalent to `\"::\"`. A user who serves docs on an unsecured public network, may unknowingly be hosting an unsecured (http) web site for any remote user/system to access on the same network. The issue has has been mitigated in dbt-core v1.6.15, dbt-core v1.7.15, and dbt-core v1.8.1 by binding to localhost explicitly by default in `dbt docs serve`.\n","status":"published","published":"2024-05-27T18:15:10.613Z","modified":"2026-06-17T07:36:06.907Z","cvss":[{"version":"3.1","score":5.3,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N","level":"medium","assessor":"secondary"}],"cwes":["CWE-1327"],"updated_at":"2026-11-02T14:10:02.520903Z"}],"osv":[{"id":"CVE-2024-36105","title":"dbt allows Binding to an Unrestricted IP Address via socketsocket","description":"dbt enables data analysts and engineers to transform their data using the same practices that software engineers use to build applications. Prior to versions 1.6.15, 1.7.15, and 1.8.1, Binding to `INADDR_ANY (0.0.0.0)` or `IN6ADDR_ANY (::)` exposes an application on all network interfaces, increasing the risk of unauthorized access. As stated in the Python docs, a special form for address is accepted instead of a host address: `''` represents `INADDR_ANY`, equivalent to `\"0.0.0.0\"`. On systems with IPv6, '' represents `IN6ADDR_ANY`, which is equivalent to `\"::\"`. A user who serves docs on an unsecured public network, may unknowingly be hosting an unsecured (http) web site for any remote user/system to access on the same network. The issue has has been mitigated in dbt-core v1.6.15, dbt-core v1.7.15, and dbt-core v1.8.1 by binding to localhost explicitly by default in `dbt docs serve`.\n","status":"published","published":"2024-05-27T17:17:39.875Z","modified":"2026-10-28T02:30:49.640081189Z","cvss":[{"version":"3.1","score":5.3,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N","level":"medium"}],"cwes":["CWE-1327"],"updated_at":"2026-11-02T15:44:40.704083Z"},{"id":"GHSA-pmrx-695r-4349","title":"dbt allows Binding to an Unrestricted IP Address via socketsocket","description":"### Summary\n\nBinding to `INADDR_ANY (0.0.0.0)` or `IN6ADDR_ANY (::)` exposes an application on all network interfaces, increasing the risk of unauthorized access.\n\nWhile doing some static analysis and code inspection, I found the following code binding a socket to `INADDR_ANY` by passing `\"\"` as the address. This effectively binds to any network interface on the local system, not just localhost (127.0.0.1). \n\n### Details\n\nAs stated in the Python docs, a special form for address is accepted instead of a host address: `''` represents `INADDR_ANY`, equivalent to `\"0.0.0.0\"`. On systems with IPv6, '' represents `IN6ADDR_ANY`, which is equivalent to `\"::\"`. \n\nhttps://github.com/dbt-labs/dbt-core/blob/main/core/dbt/task/docs/serve.py#L23C38-L23C39\n\nThe text around this code also imply the intention is to host docs only on localhost.\n\n### PoC\n\nTo recreate, run the docs ServeTask.run() to stand up the HTTP server.  Then run `netstat` to see what addresses this process is bound.\n\n### Impact\n\nA user who serves docs on an unsecured public network, may unknowingly be hosting an unsecured (http) web site for any remote user/system to access on the same network.\n\nFurther references:\nhttps://docs.python.org/3/library/socket.html#socket-families\nhttps://docs.securesauce.dev/rules/PY030\nhttps://cwe.mitre.org/data/definitions/1327.html\n\n### Patches\nThe issue has has been mitigated in [dbt-core v1.6.15](https://github.com/dbt-labs/dbt-core/releases/tag/v1.6.15), [dbt-core v1.7.15](https://github.com/dbt-labs/dbt-core/releases/tag/v1.7.15), and [dbt-core v1.8.1](https://github.com/dbt-labs/dbt-core/releases/tag/v1.8.1) by binding to localhost explicitly by default in `dbt docs serve` (https://github.com/dbt-labs/dbt-core/issues/10209).\n","status":"published","published":"2024-05-28T21:19:14Z","modified":"2026-09-10T03:49:18.769494383Z","cvss":[{"version":"3.1","score":5.3,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N","level":"medium"}],"cwes":["CWE-1327"],"updated_at":"2026-11-02T15:46:53.244788Z"},{"id":"PYSEC-2026-1292","title":"dbt allows Binding to an Unrestricted IP Address via socketsocket","description":"### Summary\n\nBinding to `INADDR_ANY (0.0.0.0)` or `IN6ADDR_ANY (::)` exposes an application on all network interfaces, increasing the risk of unauthorized access.\n\nWhile doing some static analysis and code inspection, I found the following code binding a socket to `INADDR_ANY` by passing `\"\"` as the address. This effectively binds to any network interface on the local system, not just localhost (127.0.0.1). \n\n### Details\n\nAs stated in the Python docs, a special form for address is accepted instead of a host address: `''` represents `INADDR_ANY`, equivalent to `\"0.0.0.0\"`. On systems with IPv6, '' represents `IN6ADDR_ANY`, which is equivalent to `\"::\"`. \n\nhttps://github.com/dbt-labs/dbt-core/blob/main/core/dbt/task/docs/serve.py#L23C38-L23C39\n\nThe text around this code also imply the intention is to host docs only on localhost.\n\n### PoC\n\nTo recreate, run the docs ServeTask.run() to stand up the HTTP server.  Then run `netstat` to see what addresses this process is bound.\n\n### Impact\n\nA user who serves docs on an unsecured public network, may unknowingly be hosting an unsecured (http) web site for any remote user/system to access on the same network.\n\nFurther references:\nhttps://docs.python.org/3/library/socket.html#socket-families\nhttps://docs.securesauce.dev/rules/PY030\nhttps://cwe.mitre.org/data/definitions/1327.html\n\n### Patches\nThe issue has has been mitigated in [dbt-core v1.6.15](https://github.com/dbt-labs/dbt-core/releases/tag/v1.6.15), [dbt-core v1.7.15](https://github.com/dbt-labs/dbt-core/releases/tag/v1.7.15), and [dbt-core v1.8.1](https://github.com/dbt-labs/dbt-core/releases/tag/v1.8.1) by binding to localhost explicitly by default in `dbt docs serve` (https://github.com/dbt-labs/dbt-core/issues/10209).\n","status":"published","published":"2026-07-07T11:45:43.451293Z","modified":"2026-07-07T17:46:33.764662534Z","cvss":[{"version":"3.1","score":5.3,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N","level":"medium"}],"updated_at":"2026-11-02T15:52:54.622769Z"}]}}
