Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify Django app behind shared HTTP cache
-
ExploitDiscover response with whitespace-padded Vary header value
-
ExecutionCraft request matching malformed cache key variant
-
ImpactRetrieve cached response belonging to another user context
Vulnerability Assessment
| Weakness |
CWE
|
| Exploitation Conditions | The CVSS 4.0 AT:P prerequisite requires that the target Django application emits HTTP responses where |
| Impact | The CVSS 4.0 base score of 2.3 accurately reflects the limited real-world risk. The vector AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:N/VA:N indicates the vulnerability is network-reachable and requires no authentication (PR:N), but is significantly bounded by two key factors: AT:P (Attack Prerequisites required - the application must produce Vary headers with leading or trailing whitespace, which is atypical and non-default) and UI:P (user interaction required). Confidentiality impact is low (VC:L), with zero integrity or availability impact. No EPSS score was provided in the input data, so exploitation probability cannot be quantified from that signal. The vulnerability is not listed in CISA KEV, and no POC is identified. This combination - non-default prerequisite, user interaction required, low confidentiality-only impact, no active exploitation signal - places this squarely in the low-priority tier: patch as part of routine maintenance rather than emergency response. Applications not using HTTP caching infrastructure, or not emitting whitespace-padded Vary headers, carry no exploitable exposure. |
| Exploit ScenarioDerived | An attacker identifies a Django application sitting behind a shared HTTP cache layer where certain responses include whitespace-padded |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jun 03, 2026
Cache-bypass information disclosure in Django's has_vary_header() utility allows remote attackers to read cached HTTP responses intended for other users by exploiting improper whitespace handling in Vary header comparisons. Affected versions are Django 5.2.x before 5.2.15 and 6.0.x before 6.0.6; earlier unsupported series (5.0.x, 4.1.x, 3.2.x) were not evaluated and may also be affected per the vendor. The CVSS 4.0 score of 2.3 reflects constrained real-world impact requiring both a non-default prerequisite condition and user interaction, with no public exploit or confirmed active exploitation identified at time of analysis.
RemediationAI
The primary fix is to upgrade to Django 5.2.15 (for 5.2.x deployments) or Django 6.0.6 (for 6.0.x deployments), as announced in the official security release at https://www.djangoproject.com/weblog/2026/jun/03/security-releases/. If an immediate upgrade is not operationally feasible, a targeted compensating control is to audit all middleware and upstream proxy configurations to ensure no Vary response header values are emitted with leading or trailing whitespace - eliminating the AT:P prerequisite entirely and rendering the vulnerability unexploitable without requiring a code change. As a broader mitigation, disabling HTTP response caching for sensitive or session-bearing endpoints would prevent cache-poisoning-style exploitation but may have performance trade-offs and should be evaluated against caching policy. Operators running unsupported Django versions (5.0.x, 4.1.x, 3.2.x) should treat this as an additional prompt to migrate to a supported release, as no backport fixes are available or expected from the Django project.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Django is a high-level Python web framework. The affected component is django.utils.cache.has_vary_header(), a utility function involved in cache validation logic that inspects the HTTP Vary response header. The Vary header instructs HTTP caches which request headers should be used to differentiate cached response variants (e.g., Vary: Cookie means separate cache entries per cookie value). CWE-1023 (Incomplete Comparison with Missing Factors) applies directly: the function performs comparisons of Vary header values without first normalizing them by stripping leading or trailing ASCII whitespace. As a result, a response emitting Vary: ' Cookie' (with a leading space) is treated as a distinct cache key from Vary: 'Cookie', creating a discrepancy that can be exploited to retrieve cached responses across user contexts. No CPE strings were included in the provided intelligence data; affected products are identified by Django version ranges from the vendor advisory.
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
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
Primary rating from Vendor (6a34fbeb-21d4-45e7-8e0a-62b95bc12c92) · only source for this CVE.
CVSS VectorVendor: 6a34fbeb-21d4-45e7-8e0a-62b95bc12c92
Lifecycle Timeline
1DescriptionCVE.org
An issue was discovered in Django 5.2 before 5.2.15 and 6.0 before 6.0.6. django.utils.cache.has_vary_header() in Django does not strip leading or trailing whitespace from Vary response header values before comparison, which allows remote attackers to read cached responses via requests to URLs whose responses contain whitespace-padded Vary header values. 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 Navid Rezazadeh for reporting this issue.
Blast Radius
ecosystem impact- 12 pypi packages depend on django (12 direct, 0 indirect)
Ecosystem-wide dependent count for version 5.2.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
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
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
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
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
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
An authentication/authorization bypass in the djust Python live-view framework (versions prior to 1.0.7) lets unauthenti
Unauthenticated arbitrary Python module import in djust before 1.0.7 lets any client that can reach the WebSocket or SSE
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
Cross-site scripting (XSS) vulnerability in the dismissChangeRelatedObjectPopup function in contrib/admin/static/admin/j
Forged content modification in django-page-cms through 2.0.13 lets unauthenticated remote attackers exploit five CSRF-ex
Cross-site request forgery in djust's Server-Sent-Events transport affects all versions prior to 1.0.7 and allows a cros
Unauthenticated remote attackers can read live Django view and session state and invoke server-side handlers through dju
EUVD-2026-34090
GHSA-923m-gv2p-w5qp
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB