CVE-2026-25673: Potential denial-of-service vulnerability in URLField via Unicode normalization on Windows
An issue was discovered in 6.0 before 6.0.3, 5.2 before 5.2.12, and 4.2 before 4.2.29.
`URLField.to_python()` in Django calls `urllib.parse.urlsplit()`, which performs NFKC normalization on Windows that is disproportionately slow for certain Unicode characters, allowing a remote attacker to cause denial of service via large URL inputs containing these characters.
Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected.
Django would like to thank Seokchan Yoon for reporting this issue.
Security readout for executives and security teams
Plain-English summary
A remote user may be able to make affected Django applications on Windows spend excessive CPU time processing specially formed large URL values. The impact is availability, not data theft or code execution. Patched Django releases are available for supported branches.
Executive priority
Treat this as a high-priority availability fix for Windows-hosted Django applications with public URL input. It is less urgent for non-Windows deployments, but teams should still verify versions and follow vendor guidance because unsupported branches were not evaluated.
Technical view
Django URLField.to_python() calls urllib.parse.urlsplit(). On Windows, urlsplit() performs NFKC normalization that is disproportionately slow for certain Unicode characters. Large URL inputs containing those characters can trigger denial of service in Django 6.0 before 6.0.3, 5.2 before 5.2.12, and 4.2 before 4.2.29.
Likely exposure
Exposure is most likely in Django applications running on Windows that accept untrusted URL input validated through URLField. Public forms, APIs, admin workflows, and integrations that process user-supplied URLs deserve review first. Unsupported Django series were not evaluated and may also be affected.
Exploitation context
The CVE is not listed as KEV in the supplied bundle, and the sources provided do not claim active exploitation. The attack is network-reachable, unauthenticated, low-complexity, and targets availability through expensive input handling rather than confidentiality or integrity.
Researcher notes
Evidence supports a Windows-specific denial-of-service path through URLField.to_python() and urllib.parse.urlsplit() Unicode normalization. Do not assume code execution, data exposure, or active exploitation from the supplied sources. Unsupported Django branches remain an evidence gap.
Mitigation direction
Upgrade Django 6.0.x to 6.0.3 or later.
Upgrade Django 5.2.x to 5.2.12 or later.
Upgrade Django 4.2.x to 4.2.29 or later.
Move unsupported Django series to a supported patched branch.
Check Django and OS vendor advisories for branch-specific guidance.
Validation and detection
Inventory deployed Django versions from dependency manifests and runtime environments.
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-400: 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.
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.
CWE links open Glexia weakness intelligence pages with official CWE context, developer remediation guidance, and related CVE mappings.
CWE-400 · source CWE mapping
Uncontrolled Resource Consumption
Uncontrolled Resource Consumption represents a recurring weakness pattern that can create exploitable paths when design, validation, or implementation controls are missing.
Allocation of Resources Without Limits or Throttling
Allocation of Resources Without Limits or Throttling represents a recurring weakness pattern that can create exploitable paths when design, validation, or implementation controls are missing.