CVE-2025-0938: URL parser allowed square brackets in domain names
The Python standard library functions `urllib.parse.urlsplit` and `urlparse` accepted domain names that included square brackets which isn't valid according to RFC 3986. Square brackets are only meant to be used as delimiters for specifying IPv6 and IPvFuture hosts in URLs. This could result in differential parsing across the Python URL parser and other specification-compliant URL parsers.
Security readout for executives and security teams
Plain-English summary
Python’s built-in URL parser accepted domain names containing square brackets, which standards reserve for IPv6-style hosts. If an application uses Python parsing to make trust decisions, another compliant parser may interpret the same URL differently. This can create security logic bypasses in URL validation, redirects, or filtering.
Executive priority
Treat as a moderate-priority patch and code-review item. It is not documented as actively exploited, but it can affect trust boundaries in URL-heavy applications. Prioritize externally reachable services and products that validate third-party URLs.
Technical view
CVE-2025-0938 affects CPython urllib.parse.urlsplit and urlparse. The parser accepted invalid bracketed domain names, creating differential parsing versus RFC 3986-compliant parsers. The CVE is CWE-20 with CVSS 4.0 score 6.3. Impact is limited integrity impact, network reachable, high complexity, and requires specific attack conditions.
Likely exposure
Exposure is most likely in Python applications that parse user-supplied URLs for allowlists, blocklists, redirects, SSRF controls, webhook validation, or domain trust checks. Systems using only patched Python runtimes or not using urllib.parse for security decisions are less exposed.
Exploitation context
The source bundle does not show CISA KEV listing or cited active exploitation. Practical exploitation depends on an application making security decisions from Python’s parsed hostname while another component interprets the URL differently.
Researcher notes
The main security issue is parser differential behavior, not memory corruption or remote code execution. Evidence includes Python issue tracking, a pull request, multiple patch commits, and a Python security announcement. Fixed version details should be taken from vendor or distribution advisories.
Mitigation direction
Apply CPython security updates or vendor backports that include the linked urllib.parse patches.
Check Python Software Foundation, OS distribution, and appliance vendor advisories for fixed package versions.
Prioritize internet-facing services that process untrusted URLs or enforce domain-based access rules.
Review code that relies on urlsplit or urlparse for security-sensitive hostname decisions.
Validation and detection
Inventory CPython versions across servers, containers, developer images, and appliances.
Identify applications using urllib.parse.urlsplit or urlparse on untrusted input.
Confirm installed Python packages include vendor patches or distribution backports for CVE-2025-0938.
Test URL validation logic for consistent rejection of invalid bracketed domain names.
Review downstream advisories, including Debian and NetApp, where applicable.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cwe · low confidence lookup
CWE-20: Exact CWE lookup
Use the exact CWE identifier as the starting point before reviewing related ATT&CK behavior. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.