CVE-2025-13473
Django vulnerability analysis and mitigation

Overview

CVE-2025-13473 is a user enumeration vulnerability in Django's django.contrib.auth.handlers.modwsgi.check_password() function that allows remote attackers to enumerate valid usernames via a timing attack when authentication is handled through mod_wsgi. It affects Django versions 4.2 before 4.2.28, 5.2 before 5.2.11, and 6.0 before 6.0.2; earlier unsupported series (5.0.x, 4.1.x, 3.2.x) were not formally evaluated but may also be affected. The vulnerability was reported by Stackered and disclosed on February 3, 2026. It carries a CVSS v3.1 base score of 5.3 (Medium) and a CVSS v4.0 base score of 2.7 (Low) (GitHub Advisory, Django Security Releases).

Technical details

The root cause is classified as CWE-208 (Observable Timing Discrepancy): the check_password() function in django.contrib.auth.handlers.modwsgi takes measurably different amounts of time to process authentication requests depending on whether a given username exists in the database. An attacker can exploit this by sending repeated authentication requests with candidate usernames and statistically analyzing response times to determine which usernames are valid. The attack requires network access and low privileges (a valid credential attempt), but no user interaction, and the complexity is rated High due to the need for precise timing measurements. The fix was committed in changeset 3eb814e02a4c336866d4189fa0c24fd1875863ed (Django Changeset, GitHub Advisory).

Impact

Successful exploitation allows an unauthenticated or low-privileged remote attacker to enumerate valid usernames on Django applications using mod_wsgi-based authentication. This is a confidentiality-only impact — there is no integrity or availability effect. Enumerated usernames can be leveraged in follow-on attacks such as credential stuffing, brute-force login attempts, or targeted phishing, increasing the overall risk to affected deployments (GitHub Advisory, Red Hat Bugzilla).

Exploitability

No public proof-of-concept exploit code or in-the-wild exploitation has been reported for CVE-2025-13473. The EPSS score is approximately 0.029–0.038%, placing it in the 12th percentile for exploitation likelihood. The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. Exploitation requires the ability to send many timed authentication requests and perform statistical analysis, making it a moderate-effort attack limited to deployments using the mod_wsgi authentication handler (GitHub Advisory).

Exploitation steps

  1. Reconnaissance: Identify Django applications using mod_wsgi for authentication (e.g., via HTTP server headers, error pages, or application behavior).
  2. Baseline timing: Send authentication requests with a known non-existent username to establish a baseline response time for the check_password() function.
  3. Username enumeration: Send a large number of authentication requests with candidate usernames (e.g., from a wordlist), recording precise response times for each.
  4. Statistical analysis: Compare response times — usernames that trigger a longer processing time (due to password hash comparison) indicate valid accounts, while non-existent usernames return faster.
  5. Compile valid usernames: Aggregate results to build a list of confirmed valid usernames for use in follow-on attacks such as brute-force or credential stuffing (GitHub Advisory, Django Security Releases).

Indicators of compromise

  • Network: High volume of authentication requests to mod_wsgi-protected endpoints from a single IP or small IP range, especially with many different usernames and consistent password values.
  • Logs: Web server access logs showing repeated POST requests to authentication endpoints with varying usernames but identical or patterned passwords; unusually high request rates from a single source.
  • Application Logs: Django authentication logs showing a large number of failed login attempts across many different usernames in a short time window, consistent with enumeration rather than targeted brute-force.

Mitigation and workarounds

Django has released patched versions addressing this vulnerability: 4.2.28, 5.2.11, and 6.0.2. Administrators should upgrade to one of these versions as the primary remediation. As a workaround, sites not using mod_wsgi-based authentication (i.e., not using django.contrib.auth.handlers.modwsgi) are not affected and require no action. Organizations running unsupported Django series (5.0.x, 4.1.x, 3.2.x) should upgrade to a supported and patched release (Django Security Releases, GitHub Advisory).

Community reactions

The Django security team published a blog post on February 3, 2026 announcing the security releases and a follow-up post on February 4, 2026 discussing recent trends from the security team (Django Security Releases, Django Security Trends). Security news outlets including SecurityOnline, GBHackers, CyberSecurityNews, and CyberPress covered the Django February 2026 security patch batch, though coverage primarily focused on the more severe SQL injection and DoS vulnerabilities disclosed in the same release. Ubuntu (USN-8009-1), Debian (DLA-4484-1, DSA-6150-1), Fedora, SUSE, and Mageia all issued distribution-level advisories. IBM also flagged the vulnerability as affecting EDB Postgres AI Hybrid Management products (IBM Advisory).

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Fixed

bookworm

python-django: 3:3.2.25-0+deb12u2

Fixed

sid

python-django: 3:4.2.28-1

Fixed

trixie

python-django: 3:4.2.28-0+deb13u1

Fixed

Ubuntu

Fixed

bionic (esm-infra)

python-django: 1:1.11.11-1ubuntu1.21+esm14

Fixed

devel

python-django: 3:5.2.9-0ubuntu3

Fixed

focal (esm-infra)

python-django: 2:2.2.12-1ubuntu0.29+esm7

Fixed

jammy

python-django: 2:3.2.12-2ubuntu1.25

Fixed

noble

python-django: 3:4.2.11-1ubuntu1.14

Fixed

questing

python-django: 3:5.2.4-1ubuntu2.3

Fixed

resolute

python-django: 3:5.2.9-0ubuntu3

Fixed

trusty (esm-infra-legacy)

python-django: 1.6.11-0ubuntu1.3+esm10

Fixed

RHEL / CentOS

Unknown

Alpine

Fixed

edge

py3-django: 4.2.28-r0

Fixed

v3.23

py3-django: 4.2.28-r0

Fixed

SourceThis report was generated using AI

Related Django vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-15830MEDIUM6.9
  • Django logoDjango
  • py3-django
NoYesAug 04, 2026
CVE-2026-53877MEDIUM6.3
  • Django logoDjango
  • openstack-horizon-2026.1
NoYesJul 07, 2026
CVE-2026-53878MEDIUM5.3
  • Django logoDjango
  • python-django5
NoYesJul 07, 2026
CVE-2026-48588LOW2.3
  • Django logoDjango
  • authentik-2026.5
NoYesJul 07, 2026
CVE-2026-8404LOW2.3
  • Django logoDjango
  • python311-Django
NoYesJun 03, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management