CVE-2025-14550
High · 7.5CVSS
7.5
EPSS
1.1%
Published
Feb 3, 2026
CISA due date
—
Cloudanix analysis
A flaw in some Django web applications can let anyone on the internet knock the service offline by sending specially crafted web requests.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Web Framework
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The flaw is a remotely triggerable denial-of-service condition in Django's ASGI request handling. In affected Django versions, ASGIRequest can mishandle crafted requests containing many duplicate HTTP headers, causing excessive processing, memory pressure, worker exhaustion, or request-handling failure. The issue affects Django 6.0 before 6.0.2, 5.2 before 5.2.11, and 4.2 before 4.2.28; unsupported older branches such as 5.0.x, 4.1.x, and 3.2.x were not evaluated and should be treated as potentially affected if ASGI deployments are still in use. The impact is limited to availability; the vulnerability does not directly provide code execution, data disclosure, or privilege escalation.
Why it matters to the business
Public-facing Django applications running affected versions can be made slow or unavailable by unauthenticated remote traffic. For organizations that rely on Django-backed APIs, web portals, or internal services, exploitation could cause outages, failed transactions, degraded customer experience, alert fatigue, and increased infrastructure costs from autoscaling or worker restarts. The CVSS score is high for availability impact, but EPSS is currently low and there is no known CISA KEV listing or ransomware association, so remediation should be prioritized based on internet exposure and service criticality rather than evidence of active mass exploitation.
How an attack unfolds
An attacker identifies a Django application served through an ASGI stack, such as Uvicorn, Daphne, Hypercorn, or another ASGI-compatible deployment path. They then send specially crafted HTTP requests containing multiple duplicate headers. Because the vulnerable ASGIRequest processing path does not safely handle this header pattern, the application may consume excessive resources or fail while parsing or normalizing the request. By repeating the request at volume or targeting endpoints handled by the affected ASGI application, the attacker can exhaust application workers, increase latency, trigger errors, or cause service unavailability. Authentication is not required, and the attacker does not need user interaction or access to valid application data.
How to fix it
Upgrade Django to a fixed release: 6.0.2 or later for the 6.0 branch, 5.2.11 or later for the 5.2 branch, and 4.2.28 or later for the 4.2 LTS branch. If tracking Django directly from Git, include commit ba00558ddac694d92b05d12ecd2a5b7fcc1de025 or a later safe revision. For MinimOS traefik-3 packaging, upgrade to 3.6.2-r1 or later where applicable. Migrate unsupported Django branches, including 5.0.x, 4.1.x, and 3.2.x, to a supported fixed branch because they were not evaluated and may remain vulnerable. As compensating controls until patching is complete, enforce reasonable maximum header counts and header sizes at the reverse proxy, load balancer, WAF, or ASGI server; enable request rate limiting; restrict access to non-public services; and ensure worker process supervision automatically recovers unhealthy processes.
How to confirm the fix worked
Confirm application dependencies and runtime versions after deployment. Use package manifests, lockfiles, container image SBOMs, and runtime checks such as `python -m django --version`, `pip show Django`, or `python -c "import django; print(django.get_version())"` to verify that Django is at 6.0.2, 5.2.11, 4.2.28, or later. Confirm that unsupported branches are no longer deployed. Validate that production images and virtual environments were rebuilt rather than only source files updated. In a staging environment, send benign requests with duplicate headers through the same proxy and ASGI path and confirm the application responds normally or rejects the request at the edge without worker exhaustion. Review reverse proxy, WAF, and ASGI server configuration to ensure header count, header size, timeout, and rate-limit controls are active.
Typical attack path
- Scan for internet-facing Django applications or services likely using an ASGI deployment stack.
- Send test HTTP requests containing many duplicate header fields to determine whether the service slows down, errors, or resets connections.
- Increase request rate or header count to amplify CPU, memory, or worker exhaustion.
- Sustain the traffic against one or more endpoints until application workers become saturated or the service becomes unavailable.
- Optionally rotate source addresses or route through proxies to bypass simple IP-based rate limits.
How to detect it
Investigate historical exploitation by reviewing reverse proxy, load balancer, CDN, WAF, ASGI server, application, and infrastructure telemetry for signs of header-based denial-of-service activity. Useful sources include NGINX, Apache, Envoy, HAProxy, Traefik, CDN/WAF request logs, Uvicorn/Daphne/Hypercorn logs, Django application logs, container orchestration events, process supervisor logs, APM traces, and host metrics. Look for bursts of requests from one or many sources with unusually large numbers of headers, repeated header names, high request-header byte counts, HTTP 400 or 431 responses, upstream 499/502/503/504 errors, worker timeouts, process restarts, memory growth, CPU saturation, and sudden latency spikes affecting ASGI-served endpoints. Because the attack payload can use arbitrary duplicate header names, there is no single reliable malicious string; detections should focus on behavioral patterns such as repeated header keys, excessive header counts, and resource exhaustion temporally correlated with inbound requests. If packet captures, full-fidelity HTTP logs, or WAF samples are available, inspect requests immediately preceding outages for duplicate header fields appearing many times in the same request.
What your security team should do
- Inventory all Django applications, containers, and services, prioritizing internet-facing ASGI deployments.
- Upgrade affected Django versions to 6.0.2, 5.2.11, 4.2.28, or later, and rebuild/redeploy all dependent application images.
- Treat unsupported Django branches as potentially vulnerable and migrate them to a supported fixed branch rather than relying on compensating controls alone.
- Apply edge controls for maximum HTTP header count, maximum header size, request body/header timeouts, and per-source rate limits.
- Monitor for abnormal spikes in requests with duplicate headers, HTTP 400/431/500 responses, upstream timeouts, worker restarts, memory pressure, and latency increases.
- Add load balancer, reverse proxy, and WAF detections for requests containing unusually high numbers of repeated header names.
- Perform post-remediation validation using dependency scans, runtime version checks, and controlled duplicate-header testing in staging.
The record
An issue was discovered in 6.0 before 6.0.2, 5.2 before 5.2.11, and 4.2 before 4.2.28. `ASGIRequest` allows a remote attacker to cause a potential denial-of-service via a crafted request with multiple duplicate headers. 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 Jiyong Yang for reporting this issue.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| PyPI | django | 4.2a1 | 4.2.28 |
| PyPI | django | 5.2a1 | 5.2.11 |
| PyPI | django | 6.0a1 | 6.0.2 |
| Bitnami | django | 4.2.0 | 4.2.28 |
| Chainguard | authentik | 0 | 2025.12.1-r2 |
| Chainguard | authentik-fips | 0 | 2025.12.1-r2 |
| Chainguard | awx | 0 | 24.6.1-r27 |
| Chainguard | label-studio | 0 | 1.22.0-r3 |
| Mageia:9 | python-django | 0 | 4.1.13-1.10.mga9 |
| SUSE:Linux Enterprise Module for Package Hub 15 SP7 | python-Django | 0 | 4.2.11-150600.3.47.1 |
| openSUSE:Leap 15.6 | python-Django | 0 | 4.2.11-150600.3.47.1 |
| openSUSE:Leap 16.0 | python-Django | 0 | 5.2.4-bp160.5.1 |
| openSUSE:Tumbleweed | python-Django | 0 | 5.2.11-1.1 |
| openSUSE:Tumbleweed | python-Django4 | 0 | 4.2.28-1.1 |
| openSUSE:Tumbleweed | python-Django6 | 0 | 6.0.2-1.1 |
| openSUSE:Tumbleweed | python-asgiref | 0 | 3.11.1-1.1 |
Related vulnerabilities
- GHSA-33mw-q7rj-mjwj Django has Inefficient Algorithmic Complexity Same vulnerability
- GHSA-8p8v-wh79-9r56 Django vulnerable to Uncontrolled Resource Consumption Also affects django
- GHSA-mjgh-79qc-68w3 Django has a Race Condition vulnerability Also affects django
- CVE-2026-25673 An issue was discovered in 6.0 before 6.0.3, 5.2 before 5.2.12, and 4.2 before 4.2.29. Also affects django
- CVE-2026-25674 An issue was discovered in 6.0 before 6.0.3, 5.2 before 5.2.12, and 4.2 before 4.2.29. Also affects django
- GHSA-6426-9fv3-65x8 Django has an SQL Injection issue Also affects django
- GHSA-gvg8-93h5-g6qq Django has an SQL Injection issue Also affects django
- GHSA-2mcm-79hx-8fxw Django has Observable Timing Discrepancy Also affects django