Skip to main content

Django CVE-2026-113733

| EUVDEUVD-2026-116022 LOW
Insufficiently Protected Credentials (CWE-522)
2026-11-03 DSF
2.1
CVSS 4.0 · Vendor: DSF
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as staff user with view-only permission
  2. Exploit
    Open read-only admin change form for affected user model
  3. Execution
    Read full unobfuscated password hash
  4. Impact
    Exfiltrate hash for offline cracking

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V6 - Authentication Credential protection in transit/storage
Exploitation Conditions

Exploitation requires an authenticated admin staff user holding only the 'view' permission on a user model that is EITHER not the configured AUTH_USER_MODEL, OR is an AUTH_USER_MODEL that inherits its password field from a concrete parent model through multi-table inheritance. Django's standard AUTH_USER_MODEL with its own password field is NOT affected, so this is a non-default custom-user-model deployment condition. Limiting factors: the attacker must already have valid staff credentials and admin access (PR:H), the admin site must expose the affected user model as read-only to that user, and the information gained is password hashes (not plaintext), which still require offline cracking to be useful.

Impact

This is a genuinely low-priority issue, and the signals are internally consistent rather than conflicting. The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:H/UI:N/VC:L with VI:N/VA:N) describes an information-disclosure flaw limited to low confidentiality impact with no integrity or availability effect, and crucially requires high privileges (PR:H) - an already-authenticated staff user. The vendor itself rates it 'low' under the Django security policy, and vuln.today assigns a 'monitor' decision label, the lowest urgency tier. No EPSS score and no CISA KEV entry were provided, and there is no public exploit reference in the input, so there is nothing to suggest active or widespread exploitation. The only material caveat is scope: exploitation does not apply to Django's default User model - it needs a non-standard custom user model configuration (see exploitation_conditions) - so even the modest base score overstates risk for the typical deployment. There is no high-CVSS/low-real-risk contradiction here; both the raw score and all contextual signals agree this is a minor, privilege-gated disclosure.

Exploit ScenarioDerived

An authenticated Django admin staff member who has been granted only the 'view' permission (not 'change') on a custom user model opens that user's read-only change form in the admin. Because display_for_field() failed to obfuscate the password field for non-AUTH_USER_MODEL user models (or an AUTH_USER_MODEL inheriting its password column from a concrete parent via multi-table inheritance), the form renders the full password hash instead of a masked placeholder, which the staff user can copy for offline cracking. No public exploit code is referenced; exploitation requires network access to the admin plus valid staff credentials (PR:H).

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available

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

Alert me

AnalysisAIv1 – Nov 03, 2026

Password-hash disclosure in the Django admin affects custom user-model deployments: staff users who hold only the 'view' permission on a user model can read the entire stored password hash from the read-only change form when that model is not the configured AUTH_USER_MODEL, or when AUTH_USER_MODEL inherits its password field from a concrete parent through multi-table inheritance. The flaw is in django.contrib.admin.utils.display_for_field(), which only masked the password field when the field's model was exactly get_user_model(); the fix broadens that check to any AbstractBaseUser subclass and to models that are ancestors of the configured user model. Supported branches 6.1 before 6.1.3 and 6.0 before 6.0.10 are affected, and Django rates the issue severity "low"; there is no CISA KEV listing and no public exploit identified at time of analysis, and the operator decision label is monitor. Exposure requires an attacker who already holds valid staff credentials and admin access (PR:H per the assessed vector), and what is disclosed is a hash rather than plaintext, so offline cracking is still needed to make the information useful.

RemediationAI

Vendor-released patch: upgrade to Django 6.1.3 (for the 6.1 branch) or 6.0.10 (for the 6.0 branch), which contain the corrected check in display_for_field(); the fix is also visible in upstream commits f5b039a619b3b5394ea5b966e17c7546fda6f937, 7d875c0a49d2a59335c65f6bf57970a5bac03be2 and 67cce9dcd23ddeec41ccf0abfe3431e3cd724365. Projects on the unsupported 5.1.x, 5.0.x or 4.2.x series were not evaluated by the vendor and should be moved onto a supported, patched branch rather than assumed clean. If an upgrade cannot be staged immediately, the practical interim control is to withhold the admin 'view' permission on the affected user models: exploitation depends on a staff user having view-but-not-change access to a custom user model (or to an AUTH_USER_MODEL that inherits password through multi-table inheritance) so that the change form is rendered read-only, and granting change permission instead removes the read-only display path but widens what that staff user can modify, so scope it deliberately or remove access to those models from the admin entirely until the patch is applied. Review existing staff group and user permissions for custom user models that are exposed in the admin to determine whether any hashes were already retrievable, and treat those hashes as potentially disclosed. Note that Django classifies this issue as low severity, and no public exploit was identified at time of analysis.

Affected VersionsENISA

Django 6.0 <6.0.10
Django 6.1 <6.1.3

Affected Packages

euvd django fix: 6.0.10, 6.1.3

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Django's admin application renders read-only model fields through display_for_field() in django/contrib/admin/utils.py, which substitutes a masked representation for sensitive values. For the password field it called render_password_as_hash() only when field.name "password" and field.model get_user_model(). Because field.model is the model on which the field was originally declared, that equality check missed two cases: a user model that is not the one designated by the AUTH_USER_MODEL setting, and an AUTH_USER_MODEL that inherits password from a concrete parent via multi-table inheritance, so field.model resolves to the parent rather than the swapped-in user model. The upstream fix replaces the equality test with issubclass(field.model, AbstractBaseUser) or issubclass(get_user_model(), field.model), covering both a non-default user model built on AbstractBaseUser and any ancestor model of the configured user model; the accompanying tests add a ParentUser/ChildUser multi-table inheritance pair and a MinimalPasswordUser to exercise both paths. The weakness maps to CWE-522 (Insufficiently Protected Credentials): the admin UI leaks a credential artifact (the password hash) to a principal that should only see a masked placeholder. Per the Django security policy this is a "low" severity issue; the assessed CVSS:3.1 vector is AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:N, reflecting limited confidentiality impact reachable only by an already-privileged admin user.

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 (DSF) PRIMARY 2.1 LOW
CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
vuln.today AI 2.7 LOW

Requires an authenticated staff admin (PR:H) reaching the web admin (AV:N), no user interaction; impact is limited disclosure of password hashes (C:L) with no integrity or availability effect.

3.1 AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:H/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (DSF).

CVSS VectorVendor: DSF

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
High
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

2
CVSS changed
Nov 03, 2026 - 16:22 NVD
2.2 (LOW) 2.1 (LOW)
CVE Published
Nov 03, 2026 - 15:42 cve.org
LOW 2.1

DescriptionCVE.org

An issue was discovered in Django 6.1 before 6.1.3 and 6.0 before 6.0.10. The django.contrib.admin.utils.display_for_field() function did not obfuscate the password field of user models other than AUTH_USER_MODEL, or of an AUTH_USER_MODEL inheriting its password field from a concrete parent model through multi-table inheritance, which allows authenticated staff users with only the view permission on such a model to obtain full password hashes via the read-only change form. Earlier, unsupported Django series (such as 5.1.x, 5.0.x, and 4.2.x) were not evaluated and may also be affected. Django would like to thank Aaron chen for reporting this issue.

Threat Intelligence Overview

Prevalence
High
Django is a very widely deployed Python web framework
Data Quality
3 sources
Confidence: Low

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 N/A
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
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
High

Priority Score

10
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +10
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