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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Primary rating from NVD · only source for this CVE.
CVSS VectorNVD
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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Lifecycle Timeline
2Blast Radius
ecosystem impact- 12 pypi packages depend on django (12 direct, 0 indirect)
Ecosystem-wide dependent count for version 5.2.
DescriptionCVE.org
An issue was discovered in 6.0 before 6.0.5 and 5.2 before 5.2.14. Response headers do not vary on cookies if a session is not modified, but SESSION_SAVE_EVERY_REQUEST is True. A remote attacker can steal a user's session after that user visits a cached public page. 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 Cantina for reporting this issue.
AnalysisAI
Django 6.0 before 6.0.5 and 5.2 before 5.2.14 fail to vary response headers on session cookies when SESSION_SAVE_EVERY_REQUEST is enabled but the session is unmodified, allowing remote attackers with user interaction to steal session tokens from cached public pages. The vulnerability affects server configurations that cache responses aggressively while maintaining per-request session handling, exposing authenticated users to session hijacking after visiting pages served from cache.
Technical ContextAI
Django's session middleware is responsible for managing user authentication state via HTTP cookies and server-side session storage. When SESSION_SAVE_EVERY_REQUEST is set to True, Django updates the session record on every request even if the session data has not changed. However, the vulnerability stems from improper cache control headers - specifically the Vary header - which informs HTTP caches whether response variations depend on request headers (including cookies). When SESSION_SAVE_EVERY_REQUEST is True but the session is unmodified, Django fails to include the session cookie in the Vary header, causing HTTP caches (proxies, CDNs, browsers) to cache and serve the same response to multiple users regardless of their session cookie. This violates the caching contract and allows subsequent users accessing the cached public page to inherit the previous user's session cookie if the cache is poisoned or misconfigured. The root cause is classified under CWE-539 (Information Exposure Through Persistent Cookies), a cookie handling vulnerability.
RemediationAI
Upgrade to Django 6.0.5 or later for the 6.0 series, or Django 5.2.14 or later for the 5.2 series. Users on unsupported versions (5.0.x, 4.1.x, 3.2.x) should upgrade to a supported version. As a temporary workaround on unpatched systems, disable SESSION_SAVE_EVERY_REQUEST by setting it to False in Django settings (the default), which forces Django to emit proper Vary headers on session cookies and prevents cache poisoning. Alternatively, configure HTTP cache layers (reverse proxies, CDNs) to exclude pages with session cookies from caching, or use cache control directives (Cache-Control: no-cache) on authenticated responses. Organizations should verify that their caching layer respects Vary headers; misconfigured reverse proxies or CDNs that ignore Vary directives remain vulnerable even with the patch. See Django's official security advisory at https://www.djangoproject.com/weblog/2026/may/05/security-releases/ and https://docs.djangoproject.com/en/dev/releases/security/ for details.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
Cross-user flow execution in Langflow (< 1.9.1) lets any authenticated API-key holder run another user's flow by passing
Same technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-27347