Security
Headlines
HeadlinesLatestCVEs

Headline

GHSA-pmrx-695r-4349: dbt allows Binding to an Unrestricted IP Address via socketsocket

Summary

Binding to INADDR_ANY (0.0.0.0) or IN6ADDR_ANY (::) exposes an application on all network interfaces, increasing the risk of unauthorized access.

While 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).

Details

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 "::".

https://github.com/dbt-labs/dbt-core/blob/main/core/dbt/task/docs/serve.py#L23C38-L23C39

The text around this code also imply the intention is to host docs only on localhost.

PoC

To recreate, run the docs ServeTask.run() to stand up the HTTP server. Then run netstat to see what addresses this process is bound.

Impact

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.

Further references: https://docs.python.org/3/library/socket.html#socket-families https://docs.securesauce.dev/rules/PY030 https://cwe.mitre.org/data/definitions/1327.html

Patches

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 (https://github.com/dbt-labs/dbt-core/issues/10209).

ghsa
#vulnerability#web#git#auth

Skip to content

Navigation Menu

    • Actions

      Automate any workflow

    • Packages

      Host and manage packages

    • Security

      Find and fix vulnerabilities

    • Codespaces

      Instant dev environments

    • Copilot

      Write better code with AI

    • Code review

      Manage code changes

    • Issues

      Plan and track work

    • Discussions

      Collaborate outside of code

    • GitHub Sponsors

      Fund open source developers

*   The ReadME Project
    
    GitHub community articles
  • Pricing

Provide feedback

Saved searches****Use saved searches to filter your results more quickly

Sign up

  1. GitHub Advisory Database
  2. GitHub Reviewed
  3. CVE-2024-36105

dbt allows Binding to an Unrestricted IP Address via socketsocket

Moderate severity GitHub Reviewed Published May 27, 2024 in dbt-labs/dbt-core • Updated May 28, 2024

Package

pip dbt-core (pip)

Affected versions

< 1.6.15

>= 1.7.0, < 1.7.15

= 1.8.0

Patched versions

1.6.15

1.7.15

1.8.1

Description

Summary

Binding to INADDR_ANY (0.0.0.0) or IN6ADDR_ANY (::) exposes an application on all network interfaces, increasing the risk of unauthorized access.

While 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).

Details

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 "::".

https://github.com/dbt-labs/dbt-core/blob/main/core/dbt/task/docs/serve.py#L23C38-L23C39

The text around this code also imply the intention is to host docs only on localhost.

PoC

To recreate, run the docs ServeTask.run() to stand up the HTTP server. Then run netstat to see what addresses this process is bound.

Impact

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.

Further references:
https://docs.python.org/3/library/socket.html#socket-families
https://docs.securesauce.dev/rules/PY030
https://cwe.mitre.org/data/definitions/1327.html

Patches

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 (dbt-labs/dbt-core#10209).

References

  • GHSA-pmrx-695r-4349
  • https://nvd.nist.gov/vuln/detail/CVE-2024-36105
  • dbt-labs/dbt-core#10209
  • dbt-labs/dbt-core#10208
  • dbt-labs/dbt-core@0c08d7a
  • https://cwe.mitre.org/data/definitions/1327.html
  • https://docs.python.org/3/library/socket.html#socket-families
  • https://docs.securesauce.dev/rules/PY030
  • https://github.com/dbt-labs/dbt-core/blob/main/core/dbt/task/docs/serve.py#L23C38-L23C39
  • https://github.com/dbt-labs/dbt-core/releases/tag/v1.6.15
  • https://github.com/dbt-labs/dbt-core/releases/tag/v1.7.15
  • https://github.com/dbt-labs/dbt-core/releases/tag/v1.8.1

Published to the GitHub Advisory Database

May 28, 2024

Last updated

May 28, 2024

ghsa: Latest News

GHSA-c9p4-xwr9-rfhx: Zot IdP group membership revocation ignored