Skip to main content

Django CVE-2026-84429

| EUVDEUVD-2026-93417 MEDIUM
Inefficient Algorithmic Complexity (CWE-407)
2026-10-06 DSF GHSA-76g2-x83x-73r7
6.9
CVSS 4.0 · Vendor: DSF
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Send request with maliciously crafted Accept/Content-Type header
  2. Exploit
    Django content negotiation invokes parse_header_parameters()
  3. Execution
    Quadratic parsing of separators in quoted value consumes CPU
  4. Impact
    Worker exhaustion degrades service availability

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V2 - Validation and Business Logic Algorithmic complexity limits
Exploitation Conditions

Exploitation requires the Django application to invoke parse_header_parameters() on attacker-controlled input, which happens by default during content negotiation via HttpRequest.accepts() and when parsing Accept or Content-Type headers - no non-default configuration or feature toggle is needed. The attacker must craft a quoted parameter value containing many separator characters to trigger the quadratic parsing cost, and can use repeated headers to bypass the per-call length limit since it does not bound their combined size. Limiting factors: impact is partial availability only (A:L) with no data exposure; the application must actually reach this parsing path (content-negotiation or header-parameter handling), and the affected versions are Django 6.1<6.1.2, 6.0<6.0.9, and 5.2<5.2.18 (earlier unsupported series may also be affected but were not evaluated).

Impact

This is a moderate-severity, availability-only denial-of-service issue (CWE-407, inefficient algorithmic complexity). The provided CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L, base 5.3) indicates a network-reachable, low-complexity, unauthenticated attack with no user interaction - favorable conditions for an attacker - but the impact is limited to partial availability (A:L) with zero confidentiality or integrity effect, which caps real-world severity. Django itself rates this 'moderate' per its security policy, consistent with the quadratic (not exponential) parsing cost. No EPSS score was provided in the input, so exploitation probability cannot be quantified; there is no CISA KEV listing and no public exploit was identified at time of analysis, so there is no confirmed active exploitation. The one tension worth noting: the 'Information Disclosure' tag in the input conflicts with the actual vulnerability class - this is a pure availability DoS (C:N/I:N/A:L), not information disclosure, so that tag appears mislabeled. Net assessment: a legitimate patch-management priority for Django operators because it is unauthenticated and remotely reachable via standard headers, but it is not a drop-everything emergency given partial availability impact only and no evidence of exploitation.

Exploit ScenarioDerived

An unauthenticated attacker sends an HTTP request to a Django application carrying a crafted Accept or Content-Type header (or repeated such headers) containing a quoted parameter value with a very large number of separator characters. When Django performs content negotiation via HttpRequest.accepts(), parse_header_parameters() parses this value with quadratic time complexity, consuming excessive CPU; because the per-call length limit does not bound the combined size of repeated headers, the attacker can amplify the cost and degrade or exhaust worker capacity. No public exploit code was identified at time of analysis.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 06, 2026

Quadratic-time parsing of quoted HTTP header parameters in Django 5.2 (before 5.2.18), 6.0 (before 6.0.9), and 6.1 (before 6.1.2) allows unauthenticated remote clients to consume disproportionate CPU by supplying a header value containing many separator characters inside a quoted parameter, potentially degrading or exhausting worker capacity. The vulnerable code path is reached by default through content negotiation such as HttpRequest.accepts() and Accept/Content-Type header handling, and the existing per-call length limit does not bound the combined size of repeated headers, so an attacker can amplify the cost across many headers in a single request. Impact is availability-only (CVSS 5.3, A:L, CWE-407); vendor patches are available in Django 6.1.2, 6.0.9, and 5.2.18, and no public exploit code was identified at time of analysis.

RemediationAI

Vendor-released patch: upgrade to Django 6.1.2, 6.0.9, or 5.2.18 (matching your branch), as documented at https://www.djangoproject.com/weblog/2026/oct/06/security-releases/ and https://docs.djangoproject.com/en/dev/releases/security/; the upstream fixes are visible in the Django commits 7ff7fcc0508864a4bc39693128ace38b1e95a890, de56deeabd4c48dfb5193f0001469d80102fb367, 3d8f121695c21234aff3071de0d38b6bd38c3f52, and 6ecd66e09a383be004a78a3a738ea9727ff07b0e. Because the patch swaps the parser for Python's email.message.Message, Django notes that parsing of some malformed or unusual header values may change (for example, RFC 2231 values with a missing encoding are now decoded), so regression-test code that inspects Content-Type, Accept, or Content-Disposition parameters before and after upgrading. If you cannot upgrade immediately, add compensating controls at the reverse proxy or load balancer, since the framework-level per-call length limit does not bound repeated headers: enforce a strict total request-header size and header-count limit (for example, nginx large_client_header_buffers/client_header_buffer_size and a low max header count, or equivalent settings in HAProxy/Envoy) and reject requests exceeding them - the trade-off is that legitimately large cookies or long Accept chains may be rejected; additionally apply per-source rate limiting and request timeouts to a single request path that performs content negotiation, which slows but does not eliminate the amplification. Deployments on unsupported 5.1.x, 5.0.x, or 4.2.x branches should plan migration to a supported, patched series because no fix is published for those branches.

Affected VersionsENISA

Django 5.2 <5.2.18
Django 6.1 <6.1.2
Django 6.0 <6.0.9

Affected Packages

euvd django fix: 5.2.18, 6.0.9, 6.1.2

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

CVE-2026-84429 is a CWE-407 (inefficient algorithmic complexity) flaw in django.utils.http.parse_header_parameters(), an undocumented helper in Django's django/utils/http.py module. The pre-fix implementation built its own parameter parser: a generator (_parseparam) repeatedly re-scanned the input string with s.find(';') and s.count('"', 0, end) / s.count('\\"', 0, end) to determine whether a semicolon fell inside an unterminated quoted string. For a value containing many separator characters inside a quoted parameter, that repeated rescans-from-the-front behavior yields quadratic growth of the work performed relative to input length, and the value is additionally processed for RFC 2231 encoding (filename*=UTF-8''...) and backslash/quote unescaping. Django's per-call MAX_HEADER_LENGTH limit is applied to each invocation, but the framework does not constrain the combined size of multiple repeated headers (for example, repeated Content-Type or Accept headers), so an attacker can multiply the parsing cost within a single request. The parser is reachable without authentication on any code path that inspects these headers, most notably Django's content-negotiation helper HttpRequest.accepts(). The fix replaces the hand-rolled parser with Python's stdlib email.message.Message.get_params() and collapse_rfc2231_value(), which avoids the quadratic scan and also explicitly validates RFC 2231 charset names rather than silently falling back to us-ascii. CPE data (cpe:2.3:a:djangoproject:django:*:*:*:*:*:*:*:*) confirms the affected component is the core Django framework package rather than a plugin or add-on.

Know when Django gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (DSF) PRIMARY 6.9 MEDIUM
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
vuln.today AI 5.3 MEDIUM

Unauthenticated remote request reaches default content-negotiation parsing (AV:N/PR:N/UI:N/AC:L); quadratic DoS causes only partial availability loss (A:L), no C/I impact.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
SUSE 5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Red Hat 5.3 MEDIUM

Primary rating from Vendor (DSF).

CVSS VectorVendor: DSF

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
CVSS changed
Oct 06, 2026 - 14:22 NVD
5.3 (MEDIUM) 6.9 (MEDIUM)
CVE Published
Oct 06, 2026 - 13:35 cve.org
MEDIUM 5.3

DescriptionCVE.org

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.

Threat Intelligence Overview

EPSS Score
0.4%
Top 70% exploitable
Prevalence
High
Django is a widely-deployed enterprise and web application framework
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment Vendor GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
High
Technical Impact
Partial

Priority Score

34
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

More in Django

View all
CVE-2021-23336 MEDIUM POC
5.9 Feb 15

The package python/cpython from 0 and before 3.6.13, from 3.7.0 and before 3.7.10, from 3.8.0 and before 3.8.8, from 3.9

CVE-2017-12794 MEDIUM POC
6.1 Sep 07

In Django 1.10.x before 1.10.8 and 1.11.x before 1.11.5, HTML autoescaping was disabled in a portion of the template for

CVE-2022-34265 CRITICAL POC
9.8 Jul 04

An issue was discovered in Django 3.2 before 3.2.14 and 4.0 before 4.0.6. Rated critical severity (CVSS 9.8), this vulne

CVE-2021-35042 CRITICAL POC
9.8 Jul 02

Django 3.1.x before 3.1.13 and 3.2.x before 3.2.5 allows QuerySet.order_by SQL injection if order_by is untrusted input

CVE-2019-19844 CRITICAL POC
9.8 Dec 18

Django before 1.11.27, 2.x before 2.2.9, and 3.x before 3.0.1 allows account takeover. Rated critical severity (CVSS 9.8

CVE-2026-61594 CRITICAL POC
9.1 Sep 16

An authentication/authorization bypass in the djust Python live-view framework (versions prior to 1.0.7) lets unauthenti

CVE-2026-61599 HIGH POC
8.8 Sep 16

Unauthenticated arbitrary Python module import in djust before 1.0.7 lets any client that can reach the WebSocket or SSE

CVE-2020-9402 HIGH POC
8.8 Mar 05

Django 1.11 before 1.11.29, 2.2 before 2.2.11, and 3.0 before 3.0.4 allows SQL Injection if untrusted data is used as a

CVE-2016-6186 MEDIUM POC
6.1 Aug 05

Cross-site scripting (XSS) vulnerability in the dismissChangeRelatedObjectPopup function in contrib/admin/static/admin/j

CVE-2026-93456 HIGH POC
8.4 Sep 18

Forged content modification in django-page-cms through 2.0.13 lets unauthenticated remote attackers exploit five CSRF-ex

CVE-2026-61593 HIGH POC
8.1 Sep 16

Cross-site request forgery in djust's Server-Sent-Events transport affects all versions prior to 1.0.7 and allows a cros

CVE-2026-61590 HIGH POC
7.4 Sep 16

Unauthenticated remote attackers can read live Django view and session state and invoke server-side handlers through dju

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Module for Package Hub 15 SP7 Affected
SUSE Linux Enterprise Module for Package Hub 15 SP6 Affected
openSUSE Leap 15.6 Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy