Skip to main content

Django EUVDEUVD-2026-34090

| CVE-2026-48587 LOW
Incomplete Comparison with Missing Factors (CWE-1023)
2026-06-03 6a34fbeb-21d4-45e7-8e0a-62b95bc12c92 GHSA-923m-gv2p-w5qp
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 Django app behind shared HTTP cache
  2. Exploit
    Discover response with whitespace-padded Vary header value
  3. Execution
    Craft request matching malformed cache key variant
  4. Impact
    Retrieve 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 Vary header values contain leading or trailing whitespace (e.g., Vary: ' Cookie' or Vary: 'Accept-Encoding '). This is not produced by Django itself under default configuration and would typically originate from custom middleware performing manual header manipulation, a misconfigured reverse proxy or CDN injecting or modifying Vary headers, or non-standard response construction in application code. Additionally, UI:P (user interaction) is required per the CVSS vector. Exploitation is bounded to low confidentiality impact only (VC:L) - no integrity or availability impact is possible. Applications that do not use HTTP caching, do not emit Vary headers, or whose Vary values are never whitespace-padded are not exploitable regardless of Django version.

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 Vary headers (e.g., Vary: Cookie with a leading space) due to custom middleware or a misconfigured upstream proxy. By issuing requests to URLs whose responses match the malformed cache key variant, the attacker can cause the cache to serve a previously stored response originally intended for a different user's context, exposing low-sensitivity cached content such as partial page fragments or API responses. No public exploit code is identified; exploitation requires the specific non-default condition of whitespace-padded Vary headers being present in live application responses.

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-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

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

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

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.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
† 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
Social Media
1
Sightings
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