Skip to main content

Django CVE-2026-6873

| EUVDEUVD-2026-34086 LOW
Improper Verification of Cryptographic Signature (CWE-347)
2026-06-03 6a34fbeb-21d4-45e7-8e0a-62b95bc12c92 GHSA-h7pc-vwp9-298g
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
    Obtain low-privilege signed cookie legitimately
  2. Delivery
    Identify colliding (name, salt) concatenation pair in target app
  3. Exploit
    Craft request presenting cookie to colliding context endpoint
  4. Execution
    Server validates HMAC signature successfully
  5. Impact
    Access context-mismatched cookie data

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Signature verification
Exploitation Conditions

Exploitation requires three concurrent conditions: (1) the target Django application must call django.http.HttpRequest.get_signed_cookie in at least two distinct code paths using (name, salt) pairs whose concatenations are identical - a non-default, application-specific coincidence; (2) the attacker must already possess a valid signed cookie issued by the application for one of those contexts, requiring at minimum low-privilege access (PR:L per CVSS vector); and (3) the attacker must be able to submit that cookie to the second context's endpoint. Exploitation is limited to reading data accessible via the misused cookie context (VC:L), not arbitrary code execution. Standard Django deployments using get_signed_cookie with unique, non-colliding (name, salt) pairs are not exploitable. The AT:P element of the CVSS vector explicitly flags that the attack requires the presence of a specific, exploitable target configuration.

Impact

The CVSS 4.0 base score of 2.3 accurately reflects the low real-world risk. The vector AV:N/AC:L/AT:P/PR:L/UI:N breaks down as: network-reachable (AV:N), low complexity once a collision pair is identified (AC:L), but critically requiring the presence of a vulnerable target configuration (AT:P) - specifically, an application must have two code paths each calling get_signed_cookie with (name, salt) pairs that collide under concatenation. This is a non-trivial prerequisite. Additionally, PR:L indicates the attacker must already possess a legitimately issued signed cookie from one context before attempting to replay it in the colliding context. Impact is limited to VC:L (low confidentiality breach on the vulnerable system), with no integrity or availability impact. No EPSS data was provided; given the low CVSS, narrow preconditions, and absence from CISA KEV, probabilistic exploitation at scale is unlikely. No public exploit identified at time of analysis. This is a real but low-priority issue unless an application is specifically identified to have colliding (name, salt) pairs in its cookie-signing logic.

Exploit ScenarioDerived

An attacker who holds a legitimately issued signed cookie from one application endpoint - for example, a low-privilege session token named 'user_pref' signed with salt 'sett' - identifies that another endpoint calls get_signed_cookie with name 'user' and salt 'prefs_ett', producing the same concatenated salt string 'user_prefs_ett' in both cases. The attacker presents their original cookie to the second endpoint, where it passes signature verification despite being issued for a different context, potentially exposing data or functionality intended only for that second context. No public exploit code has been identified at time of analysis.

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

Cookie context confusion in Django's signed cookie implementation allows a remote low-privileged attacker to substitute a cookie signed in one application context into a different context where a distinct (name, salt) pair produces the same concatenated string. Affected are Django 6.0 before 6.0.6 and Django 5.2 before 5.2.15; older unsupported series (5.0.x, 4.1.x, 3.2.x) were not evaluated but may also be affected. The real-world impact is limited to low-confidence data exposure (VC:L), with no public exploit identified at time of analysis, and the CVSS 4.0 score of 2.3 reflects a low-severity, contextually constrained flaw.

RemediationAI

Upgrade to Django 6.0.6 or Django 5.2.15, which contain the vendor-released patch addressing the non-injective salt derivation. The fix is expected to introduce a separator or structurally distinct encoding between the cookie name and salt to ensure injectivity. Upgrade guidance and release notes are available at https://www.djangoproject.com/weblog/2026/jun/03/security-releases/ and security announcements at https://groups.google.com/g/django-announce. For deployments that cannot immediately upgrade, a targeted workaround is to audit all usages of get_signed_cookie in the application codebase and ensure no two (name, salt) pairs share the same concatenated string - for example, by enforcing a fixed-length cookie name prefix or using a delimiter character (such as ':') in the salt argument that cannot appear in cookie names. Note that this manual audit approach is error-prone and does not address the underlying library flaw; upgrading remains the only reliable remediation. Unsupported Django series (5.0.x and older) should be migrated to a supported branch as a priority.

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.http.HttpRequest.get_signed_cookie, part of Django's cryptographic cookie-signing subsystem (CPE: cpe:2.3:a:djangoproject:django:*). Django signs cookies using HMAC with a salt to bind a signed value to a specific purpose or context. The bug is that salt derivation is performed by naively concatenating the cookie name and the caller-supplied salt string - a non-injective function. Because concatenation of two strings is not uniquely reversible (e.g., name='ab', salt='cdef' produces the same string as name='abc', salt='def'), two completely distinct (name, salt) pairs can produce an identical HMAC key input. The root cause is classified as CWE-347 (Improper Verification of Cryptographic Signature): the signature itself may be cryptographically valid, but it is accepted in an unintended context because the domain-separation mechanism is broken. This is conceptually similar to JWT algorithm confusion or salt-reuse attacks in token systems, which explains the 'Jwt Attack' tag applied by the reporter.

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:L/UI:N/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
Low
User Interaction
None
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 6.0 before 6.0.6 and 5.2 before 5.2.15. django.http.HttpRequest.get_signed_cookie in Django uses a non-injective salt derivation (concatenating the cookie name and salt argument), which allows a remote attacker to use a cookie in a context different from the one where it was signed, via distinct (name, salt) pairs that produce the same concatenation. 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 Peng Zhou 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 98% 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

Code Injection CRITICAL

Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.

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