Skip to main content

Django CVE-2026-35193

| EUVDEUVD-2026-34089 LOW
Use of Cache Containing Sensitive Information (CWE-524)
2026-06-03 6a34fbeb-21d4-45e7-8e0a-62b95bc12c92 GHSA-qpc8-7fxc-cm4p
2.3
CVSS 4.0 · Vendor: 6a34fbeb-21d4-45e7-8e0a-62b95bc12c92
View

Attack ChainAIDerived

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

  1. Access
    Identify target Django app with UpdateCacheMiddleware active
  2. Delivery
    Authenticated victim requests protected URL through shared cache
  3. Exploit
    Django omits Authorization from Vary header
  4. Execution
    Cache stores authenticated response keyed on URL only
  5. Persist
    Attacker sends unauthenticated GET to same URL
  6. Impact
    Cache returns victim's private response to attacker

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V3 - Web Frontend Security Cache-Control for sensitive pages
Exploitation Conditions

Exploitation requires three concurrent conditions: (1) django.middleware.cache.UpdateCacheMiddleware must be present and active in the Django application's middleware configuration; (2) a shared caching intermediary - reverse proxy, CDN, or similar - must exist between end users and the Django application and must cache responses based on URL without independently enforcing Vary: Authorization; and (3) a legitimate authenticated user must have made a request to the target URL within the cache TTL window, warming the cache entry, before the unauthenticated attacker's request arrives. The authenticated request must not carry an explicit Cache-Control: public header, which is the normal case for authenticated endpoints. The CVSS AT:P and UI:P flags directly encode these prerequisites. Exploitation is not possible against applications that do not use UpdateCacheMiddleware, serve only public content at affected URLs, apply Cache-Control: no-store or private on authenticated responses, or lack a shared caching layer between the application and clients.

Impact

The CVSS 4.0 score of 2.3 (Low) accurately reflects a real but narrowly scoped threat. Decomposing the vector: AV:N confirms network exploitability with no proximity requirement; AC:L indicates the attack mechanics themselves are straightforward; AT:P (Attack Requirements: Present) is the key limiting factor - a specific caching topology must exist; PR:N confirms no attacker privileges are needed; UI:P (User Interaction: Passive) means a legitimate authenticated user must first warm the cache entry. Impact is bounded at VC:L with no integrity or availability exposure. EPSS data was not provided in available intelligence, preventing probability-of-exploitation quantification. This CVE is not listed in the CISA KEV catalog and no public proof-of-concept exploit code has been identified, consistent with the low severity rating. The practical risk is meaningful specifically for deployments combining Django's cache middleware with shared reverse proxy or CDN infrastructure that respects Vary headers imperfectly or not at all - a common production pattern. Organizations not using UpdateCacheMiddleware, or those applying Cache-Control: no-store or private on authenticated endpoints, face no exposure. The low CVSS score is justified and not in conflict with the description; this is not a case of understated severity.

Exploit ScenarioDerived

An authenticated user requests /api/account/settings/ through a production deployment using Django's UpdateCacheMiddleware behind a shared Nginx or CDN cache. Because Django omits Authorization from the Vary header, the cache stores the authenticated response keyed only on the URL. An unauthenticated attacker subsequently requests the same URL and receives the cached authenticated response containing the victim's private account data. No public exploit code has been identified; successfully executing this attack requires the attacker to know or guess a URL where an authenticated response has been recently cached.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.0% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Jun 03, 2026

Cache information disclosure in Django 5.2.x and 6.0.x allows remote unauthenticated attackers to read private authenticated responses served from shared caching layers. The UpdateCacheMiddleware component omits Authorization from the Vary response header when authenticated requests lack an explicit Cache-Control: public directive, causing caches to serve authenticated users' responses to subsequent unauthenticated requestors at the same URL. No public exploit has been identified at time of analysis, and the CVSS 4.0 score of 2.3 reflects meaningful - but constrained - real-world impact gated behind specific deployment prerequisites.

RemediationAI

Upgrade to Django 5.2.15 or Django 6.0.6, the patched releases identified in the vendor security advisory at https://www.djangoproject.com/weblog/2026/jun/03/security-releases/ and indexed at https://docs.djangoproject.com/en/dev/releases/security/. Where immediate upgrade is not feasible, remove django.middleware.cache.UpdateCacheMiddleware (and its companion FetchFromCacheMiddleware) from the middleware stack entirely; this eliminates the vulnerability at the cost of Django-level response caching, which may increase backend load and must be evaluated for production impact. A more targeted compensating control is to add Cache-Control: no-store or Cache-Control: private to all responses serving authenticated content - this prevents caching of those responses by intermediary layers without disabling caching globally, though it requires careful auditing to ensure all sensitive endpoints are covered. Organizations relying on unsupported Django versions (5.0.x, 4.1.x, 3.2.x) should treat those branches as potentially affected and prioritize migration to a supported release.

Affected VersionsENISA

Django 5.2 <5.2.15
Django 6.0 <6.0.6

Affected Packages

pypi django fix: 5.2.15, 6.0.6

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

The vulnerability resides in django.middleware.cache.UpdateCacheMiddleware, part of Django's built-in caching framework. The HTTP Vary response header instructs shared caches - reverse proxies, CDNs, Varnish, nginx caching - to maintain distinct cache entries for requests that differ in the specified request headers. For resources served conditionally based on authentication, including Authorization in Vary ensures cache keys differentiate between authenticated and unauthenticated requests. CWE-524 (Use of Cache Containing Sensitive Information) precisely characterizes this class of flaw: sensitive data is committed to a shared cache without adequate key differentiation, enabling cross-user data leakage. The defect is specifically triggered when a request carries an Authorization header but does not include Cache-Control: public; in that path, Django's middleware omits Authorization from the outgoing Vary header. Affected CPE-identified products are Django 5.2.0 through 5.2.14 and 6.0.0 through 6.0.5. Earlier series including 5.0.x, 4.1.x, and 3.2.x were not evaluated by the Django project and may also carry this defect.

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 (6a34fbeb-21d4-45e7-8e0a-62b95bc12c92) PRIMARY 2.3 LOW
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

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

Lifecycle Timeline

1
Patch available
Jun 03, 2026 - 16:01 EUVD

DescriptionCVE.org

An issue was discovered in Django 5.2 before 5.2.15 and 6.0 before 6.0.6. django.middleware.cache.UpdateCacheMiddleware in Django does not add Authorization to the Vary response header for requests bearing that header without Cache-Control: public, which allows remote attackers to read private cached responses via unauthenticated requests to the same URL. 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 Shai Berger for reporting this issue.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 12 pypi packages depend on django (12 direct, 0 indirect)

Ecosystem-wide dependent count for version 5.2.

Threat Intelligence Overview

EPSS Score
0.0%
Top 89% exploitable
Data Quality
6 sources
Confidence: High

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 LOW
CISA KEV No
Public POC No
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.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
Defer
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Low
Technical Impact
Partial

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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

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