Django CVE-2026-77050, CVE-2026-84429, CVE-2026-87890, and CVE-2026-87975
Django issued security releases for CVE-2026-77050, CVE-2026-84429, CVE-2026-87890, and CVE-2026-87975.
Unauthenticated DoS in Django via quadratic header parsing in parse_header_parameters()
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.
| Product | Affected |
|---|---|
| Django Software Foundation Django | 6.1 before 6.1.2 |
| Django Software Foundation Django | 6.0 before 6.0.9 |
| Django Software Foundation Django | 5.2 before 5.2.18 |
| Django Software Foundation Django | 5.1.x, 5.0.x, 4.2.x (unsupported, not evaluated — may also be affected) |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
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.
Django issued security releases for CVE-2026-77050, CVE-2026-84429, CVE-2026-87890, and CVE-2026-87975.
Today 1.1K readers · 1.5K views · 474 reads · all time 184K views