Skip to content
NewA calmer, faster ZeroHour
Vulnerability10 · 5 reads

CVE-2026-84429

Unauthenticated DoS in Django via quadratic header parsing in parse_header_parameters()

CVSS 4.0
6.9 medium
EPSS
—
Published
·
Modified
Analyze CVE-2026-84429 with Vani AIImpact, affected versions, exploitation status, mitigations and detection

Django contains an inefficient-algorithmic-complexity flaw (CWE-407) in django.utils.http.parse_header_parameters(), which takes quadratic time to parse a value containing many separators inside a quoted parameter. An unauthenticated attacker can trigger this through ordinary request headers such as Accept or Content-Type, for example via the content negotiation performed by HttpRequest.accepts(), and Django's per-call length limit does not bound the combined size of repeated headers. Successful exploitation lets a remote attacker with no credentials exhaust CPU on the server, causing denial of service; there is no impact on confidentiality or integrity. Affected deployments are those running Django 6.1 before 6.1.2, 6.0 before 6.0.9, or 5.2 before 5.2.18, and earlier unsupported series (5.1.x, 5.0.x, 4.2.x) were not evaluated and may also be affected. No public proof of concept is known and the issue is not listed in CISA's KEV catalog.

What to do: Upgrade promptly to Django 6.1.2, 6.0.9, or 5.2.18 depending on your series; if you are on an unsupported branch (5.1.x, 5.0.x, 4.2.x), move to a supported release since those versions were not evaluated and may still be vulnerable. As interim hardening, enforce strict limits on header size and the number of repeated headers (e.g., via nginx large_client_header_buffers or equivalent reverse-proxy/WAF settings) and consider filtering Accept/Content-Type headers containing abnormally long quoted parameters. Check whether your application calls HttpRequest.accepts() or otherwise exercises header parsing on unauthenticated endpoints.

ProductAffected
Django Software Foundation Django6.1 before 6.1.2
Django Software Foundation Django6.0 before 6.0.9
Django Software Foundation Django5.2 before 5.2.18
Django Software Foundation Django5.1.x, 5.0.x, 4.2.x (unsupported, not evaluated — may also be affected)
Estimated exposure
masshundreds of thousands to millions of internet-facing Django sites — Django is one of the most widely deployed Python web frameworks, and public technology-usage surveys (W3Techs/BuiltWith) attribute on the order of hundreds of thousands of live websites to it, with 5.2/6.0/6.1 being the currently supported…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description · NVD

An issue was discovered in Django 6.1 before 6.1.2, 6.0 before 6.0.9, and 5.2 before 5.2.18. `django.utils.http.parse_header_parameters()` was subject to a potential denial-of-service attack due to quadratic time complexity when parsing a value with many separators inside a quoted parameter. An unauthenticated request could reach this parsing through headers such as `Accept` or `Content-Type`, for instance via the content negotiation performed by `HttpRequest.accepts()`. The per-call length limit does not bound the combined size of repeated headers. Earlier, unsupported Django series (such as 5.1.x, 5.0.x, and 4.2.x) were not evaluated and may also be affected. Django would like to thank Jisung Chae for reporting this issue.

Weakness
CWE-407
Vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

In the news

1 story