Cloudanix VulnDB

CVE-2024-11168

Low · 3.7

CVSS

3.7

EPSS

0.7%

Published

Nov 12, 2024

CISA due date

—

Cloudanix analysis

Monitor only SSVC: Track

A flaw in Python's URL parsing can let attackers make a server contact the wrong internal system when handling certain web addresses.

Chainable
Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
High
Impact
Data Exposure
Component
Library
Class
Improper Input Validation
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

The urllib.parse.urlsplit() and urlparse() functions accept bracketed hosts that are neither valid IPv6 nor IPvFuture addresses, violating RFC 3986 and producing inconsistent results when the same URL is later processed by a stricter parser.

Why it matters to the business

Applications that rely on these functions for URL handling may be tricked into issuing requests to unintended internal hosts, creating a pathway for unauthorized data access or internal network probing with minimal attacker effort.

How an attack unfolds

An attacker supplies a crafted URL containing an invalid bracketed host to an application endpoint that uses urlparse; if a second, stricter parser subsequently interprets the host differently, the request is redirected to an attacker-chosen internal target, enabling SSRF.

How to fix it

Upgrade python/cpython to the commit 29f348e232e82938ba2165843c448c2b291504c5 or a later equivalent release that enforces RFC 3986 host validation.

How to confirm the fix worked

Confirm the installed CPython commit or version contains 29f348e232e82938ba2165843c448c2b291504c5; test that urlparse and urlsplit now reject non-IPv6 bracketed hosts per RFC 3986.

Typical attack path

  1. Identify an application endpoint that accepts and parses URLs with Python's urlparse or urlsplit
  2. Craft a URL containing a non-RFC-conformant bracketed host
  3. Submit the URL to the target endpoint
  4. Trigger secondary parsing that resolves the host to an internal destination
  5. Observe or exfiltrate data from the resulting internal request

How to detect it

Review application logs for URLs containing bracketed host segments that are not valid IPv6 addresses; correlate with outbound connection attempts to internal IP ranges that do not match expected destinations.

What your security team should do

  • Apply the fixed CPython commit to all affected runtimes within the next maintenance window
  • Audit code paths that pass untrusted URLs through multiple parsers
  • Add input validation that rejects bracketed hosts not matching IPv6 or IPvFuture syntax
  • Monitor for any increase in EPSS or public exploit code

The record

The urllib.parse.urlsplit() and urlparse() functions improperly validated bracketed hosts (`[]`), allowing hosts that weren't IPv6 or IPvFuture. This behavior was not conformant to RFC 3986 and potentially enabled SSRF if a URL is processed by more than one URL parser.

Affected packages

Ecosystem Package Introduced Fixed
AlmaLinux:8 platform-python 0 3.6.8-69.el8_10.alma.1
AlmaLinux:8 platform-python-debug 0 3.6.8-69.el8_10.alma.1
AlmaLinux:8 platform-python-devel 0 3.6.8-69.el8_10.alma.1
AlmaLinux:8 python3-idle 0 3.6.8-69.el8_10.alma.1
AlmaLinux:8 python3-libs 0 3.6.8-69.el8_10.alma.1
AlmaLinux:8 python3-test 0 3.6.8-69.el8_10.alma.1
AlmaLinux:8 python3-tkinter 0 3.6.8-69.el8_10.alma.1
AlmaLinux:8 python39 0 3.9.25-2.module_el8.10.0+4083+53cad1fb
AlmaLinux:8 python39-Cython 0 0.29.21-5.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-Cython 0 0.29.21-5.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-PyMySQL 0 0.10.1-2.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-attrs 0 20.3.0-2.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-cffi 0 1.14.3-2.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-cffi 0 1.14.3-2.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-chardet 0 3.0.4-19.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-cryptography 0 3.3.1-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-debug 0 3.9.25-2.module_el8.10.0+4083+53cad1fb
AlmaLinux:8 python39-devel 0 3.9.25-2.module_el8.10.0+4083+53cad1fb
AlmaLinux:8 python39-idle 0 3.9.25-2.module_el8.10.0+4083+53cad1fb
AlmaLinux:8 python39-idna 0 2.10-4.module_el8.10.0+3849+a48d89aa
AlmaLinux:8 python39-iniconfig 0 1.1.1-2.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-libs 0 3.9.25-2.module_el8.10.0+4083+53cad1fb
AlmaLinux:8 python39-lxml 0 4.6.5-1.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-lxml 0 4.6.5-1.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-mod_wsgi 0 4.7.1-7.module_el8.10.0+3989+a618fe15.1
AlmaLinux:8 python39-more-itertools 0 8.5.0-2.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-numpy 0 1.19.4-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-numpy 0 1.19.4-3.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-numpy-doc 0 1.19.4-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-numpy-f2py 0 1.19.4-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-numpy-f2py 0 1.19.4-3.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-packaging 0 20.4-4.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pip 0 20.2.4-9.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-pip-wheel 0 20.2.4-9.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-pluggy 0 0.13.1-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-ply 0 3.11-10.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-psutil 0 5.8.0-4.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-psutil 0 5.8.0-4.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-psycopg2 0 2.8.6-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-psycopg2-doc 0 2.8.6-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-psycopg2-tests 0 2.8.6-3.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-py 0 1.10.0-1.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pybind11 0 2.7.1-1.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pybind11 0 2.7.1-1.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-pybind11-devel 0 2.7.1-1.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pybind11-devel 0 2.7.1-1.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-pycparser 0 2.20-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pyparsing 0 2.4.7-5.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pysocks 0 1.7.1-4.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pytest 0 6.0.2-2.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pyyaml 0 5.4.1-1.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-pyyaml 0 5.4.1-1.module_el8.6.0+3248+c431e88c
AlmaLinux:8 python39-requests 0 2.25.0-3.module_el8.9.0+3634+fb2a896c
AlmaLinux:8 python39-rpm-macros 0 3.9.25-2.module_el8.10.0+4083+53cad1fb
AlmaLinux:8 python39-scipy 0 1.5.4-5.module_el8.9.0+3634+fb2a896c
AlmaLinux:8 python39-setuptools 0 50.3.2-7.module_el8.10.0+4040+9207bbc0
AlmaLinux:8 python39-setuptools-wheel 0 50.3.2-7.module_el8.10.0+4040+9207bbc0
AlmaLinux:8 python39-six 0 1.15.0-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-test 0 3.9.25-2.module_el8.10.0+4083+53cad1fb
AlmaLinux:8 python39-tkinter 0 3.9.25-2.module_el8.10.0+4083+53cad1fb
AlmaLinux:8 python39-toml 0 0.10.1-5.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-urllib3 0 1.25.10-5.module_el8.10.0+3765+2f9a457d
AlmaLinux:8 python39-wcwidth 0 0.2.5-3.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-wheel 0 1:0.35.1-4.module_el8.6.0+2780+a40f65e1
AlmaLinux:8 python39-wheel-wheel 0 1:0.35.1-4.module_el8.6.0+2780+a40f65e1
AlmaLinux:9 python-unversioned-command 0 3.9.21-1.el9_5
AlmaLinux:9 python3 0 3.9.21-1.el9_5
AlmaLinux:9 python3-debug 0 3.9.21-1.el9_5
AlmaLinux:9 python3-devel 0 3.9.21-1.el9_5
AlmaLinux:9 python3-idle 0 3.9.21-1.el9_5
AlmaLinux:9 python3-libs 0 3.9.21-1.el9_5
AlmaLinux:9 python3-test 0 3.9.21-1.el9_5
AlmaLinux:9 python3-tkinter 0 3.9.21-1.el9_5
Bitnami libpython 0 3.9.21
Bitnami python 0 3.9.21
Bitnami python-min 0 3.9.21
Chainguard python-3.10 0 3.10.16-r0
Chainguard python-3.10-base 0 3.10.16-r0
Chainguard python-3.10-base-dev 0 3.10.16-r0
Chainguard python-3.10-dev 0 3.10.16-r0
Chainguard python-3.10-doc 0 3.10.16-r0
Chainguard python-3.9 0 3.9.21-r0
Chainguard python-3.9-base 0 3.9.21-r0
Chainguard python-3.9-base-dev 0 3.9.21-r0
Chainguard python-3.9-default 0 3.9.21-r0
Chainguard python-3.9-dev 0 3.9.21-r0
Chainguard python-3.9-doc 0 3.9.21-r0
Debian:11 pypy3 0 No fix
Debian:11 python3.9 0 No fix
Debian:11 python3.9 0 3.9.2-1+deb11u2
Debian:12 pypy3 0 No fix
Debian:12 python3.11 0 No fix
Debian:13 pypy3 0 7.3.18+dfsg-1
Debian:14 pypy3 0 7.3.18+dfsg-1
Red Hat:enterprise_linux:8::appstream platform-python 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::appstream platform-python-debug 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::appstream platform-python-devel 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::appstream python3 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::appstream python3-debuginfo 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::appstream python3-debugsource 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::appstream python3-idle 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::appstream python3-libs 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::appstream python3-test 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::appstream python3-tkinter 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::baseos platform-python 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::baseos platform-python-debug 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::baseos platform-python-devel 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::baseos python3 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::baseos python3-debuginfo 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::baseos python3-debugsource 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::baseos python3-idle 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::baseos python3-libs 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::baseos python3-test 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:8::baseos python3-tkinter 0 0:3.6.8-69.el8_10
Red Hat:enterprise_linux:9::appstream python-unversioned-command 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::appstream python3 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::appstream python3-debug 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::appstream python3-devel 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::appstream python3-idle 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::appstream python3-libs 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::appstream python3-test 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::appstream python3-tkinter 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::appstream python3.9 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::appstream python3.9-debuginfo 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::appstream python3.9-debugsource 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::baseos python-unversioned-command 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::baseos python3 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::baseos python3-debug 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::baseos python3-devel 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::baseos python3-idle 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::baseos python3-libs 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::baseos python3-test 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::baseos python3-tkinter 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::baseos python3.9 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::baseos python3.9-debuginfo 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::baseos python3.9-debugsource 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::crb python-unversioned-command 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::crb python3 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::crb python3-debug 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::crb python3-devel 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::crb python3-idle 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::crb python3-libs 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::crb python3-test 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::crb python3-tkinter 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::crb python3.9 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::crb python3.9-debuginfo 0 0:3.9.21-1.el9_5
Red Hat:enterprise_linux:9::crb python3.9-debugsource 0 0:3.9.21-1.el9_5
Rocky Linux:8 python3 0 0:3.6.8-69.el8_10.rocky.0
Rocky Linux:9 python3.9 0 0:3.9.21-1.el9_5
SUSE:Linux Enterprise Micro 5.1 python3 0 3.6.15-150000.3.167.1
SUSE:Linux Enterprise Micro 5.1 python3 0 3.6.15-150000.3.173.1
SUSE:Linux Enterprise Micro 5.1 python3-core 0 3.6.15-150000.3.167.1
SUSE:Linux Enterprise Micro 5.1 python3-core 0 3.6.15-150000.3.173.1
SUSE:Linux Enterprise Micro 5.2 python3 0 3.6.15-150300.10.78.1
SUSE:Linux Enterprise Micro 5.2 python3 0 3.6.15-150300.10.84.1
SUSE:Linux Enterprise Micro 5.2 python3-core 0 3.6.15-150300.10.78.1
SUSE:Linux Enterprise Micro 5.2 python3-core 0 3.6.15-150300.10.84.1
SUSE:Linux Enterprise Micro 5.3 python3 0 3.6.15-150300.10.78.1
SUSE:Linux Enterprise Micro 5.3 python3 0 3.6.15-150300.10.84.1
SUSE:Linux Enterprise Micro 5.3 python3-core 0 3.6.15-150300.10.78.1
SUSE:Linux Enterprise Micro 5.3 python3-core 0 3.6.15-150300.10.84.1
SUSE:Linux Enterprise Micro 5.4 python3 0 3.6.15-150300.10.78.1
SUSE:Linux Enterprise Micro 5.4 python3 0 3.6.15-150300.10.84.1
SUSE:Linux Enterprise Micro 5.4 python3-core 0 3.6.15-150300.10.78.1
SUSE:Linux Enterprise Micro 5.4 python3-core 0 3.6.15-150300.10.84.1
SUSE:Linux Enterprise Micro 5.5 python3 0 3.6.15-150300.10.78.1
SUSE:Linux Enterprise Micro 5.5 python3 0 3.6.15-150300.10.84.1
SUSE:Linux Enterprise Micro 5.5 python3-core 0 3.6.15-150300.10.78.1
SUSE:Linux Enterprise Micro 5.5 python3-core 0 3.6.15-150300.10.84.1
SUSE:Linux Enterprise Module for Basesystem 15 SP5 python3 0 3.6.15-150300.10.78.1
SUSE:Linux Enterprise Module for Basesystem 15 SP5 python3-core 0 3.6.15-150300.10.78.1
SUSE:Linux Enterprise Module for Basesystem 15 SP6 python3 0 3.6.15-150300.10.78.1
SUSE:Linux Enterprise Module for Basesystem 15 SP6 python3 0 3.6.15-150300.10.84.1
SUSE:Linux Enterprise Module for Basesystem 15 SP6 python3-core 0 3.6.15-150300.10.78.1
SUSE:Linux Enterprise Module for Basesystem 15 SP6 python3-core 0 3.6.15-150300.10.84.1
SUSE:Linux Enterprise Module for Development Tools 15 SP5 python3-core 0 3.6.15-150300.10.78.1
SUSE:Linux Enterprise Module for Development Tools 15 SP6 python3-core 0 3.6.15-150300.10.78.1
SUSE:Linux Enterprise Module for Development Tools 15 SP6 python3-core 0 3.6.15-150300.10.84.1
SUSE:Linux Enterprise Module for Legacy 15 SP5 python39 0 3.9.20-150300.4.58.1
SUSE:Linux Enterprise Module for Legacy 15 SP5 python39-core 0 3.9.20-150300.4.58.1
SUSE:Linux Enterprise Module for Package Hub 15 SP5 python 0 2.7.18-150000.68.1
SUSE:Linux Enterprise Module for Package Hub 15 SP5 python-base 0 2.7.18-150000.68.1
SUSE:Linux Enterprise Module for Package Hub 15 SP6 python 0 2.7.18-150000.68.1
SUSE:Linux Enterprise Module for Package Hub 15 SP6 python 0 2.7.18-150000.77.1
SUSE:Linux Enterprise Module for Package Hub 15 SP6 python-base 0 2.7.18-150000.68.1
SUSE:Linux Enterprise Module for Package Hub 15 SP6 python-base 0 2.7.18-150000.77.1
SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 python 0 2.7.18-33.38.1
SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 python 0 2.7.18-33.47.1
SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 python-base 0 2.7.18-33.38.1
SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 python-base 0 2.7.18-33.47.1
SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 python-doc 0 2.7.18-33.38.1
SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 python-doc 0 2.7.18-33.47.1
SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 python3 0 3.4.10-25.145.1
SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 python3 0 3.4.10-25.151.1
SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 python3-base 0 3.4.10-25.145.1
SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 python3-base 0 3.4.10-25.151.1
SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 python36 0 3.6.15-73.1
SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 python36 0 3.6.15-79.1
SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 python36-core 0 3.6.15-73.1
SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 python36-core 0 3.6.15-79.1

Related vulnerabilities