CVE-2026-3902 json
ASGI header spoofing via underscore/hyphen conflation
published 2026-04-07 7 mo ago modified 2026-10-26 13 d ago also BIT-django-2026-3902 , EUVD-2026-19686 , GHSA-mvfq-ggxm-9mc5 , PYSEC-2026-51
- cvss
- 7.5
- version 3.1, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.4%
- EPSS 0.4% chance of exploitation in 30 days, percentile 38%
- public exploits
- 0
- none known
Summary
An issue was discovered in 6.0 before 6.0.4, 5.2 before 5.2.13, and 4.2 before 4.2.30. `ASGIRequest` allows a remote attacker to spoof headers by exploiting an ambiguous mapping of two header variants (with hyphens or with underscores) to a single version with underscores. 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 Tarek Nakkouch for reporting this issue.
Patch / fix
- pypi django 4.2.30, 5.2.13, 6.0.4
- bitnami django 4.2.30, 5.2.13, 6.0.4
- djangoproject Django 4.2.30, 5.2.13, 6.0.4
- python-django Debian 14 3:4.2.30-1
debian advisories DEBIAN-CVE-2026-3902
- python-django Ubuntu 22.04 LTS 2:3.2.12-2ubuntu1.26
- python-django Ubuntu 24.04 LTS 3:4.2.11-1ubuntu1.15
- python-django Ubuntu 25.10 3:5.2.4-1ubuntu2.4
ubuntu advisories UBUNTU-CVE-2026-3902
Ubuntu security data © Canonical Ltd., from https://github.com/canonical/ubuntu-security-notices via OSV; changed: normalised to fixed package versions per release. CC BY-SA 4.0
- python-Django5 openSUSE Tumbleweed 5.2.16-1.1
- python-Django openSUSE Tumbleweed 5.2.13-1.1
- python-Django openSUSE Leap 16.0 5.2.4-bp160.7.1
- python-Django4 openSUSE Tumbleweed 4.2.30-1.1
- python-Django6 openSUSE Tumbleweed 6.0.4-1.1
opensuse advisories openSUSE-SU-2026:11270-1openSUSE-SU-2026:10567-1openSUSE-SU-2026:20578-1openSUSE-SU-2026:10516-1openSUSE-SU-2026:10517-1
- py3-django Alpine 3.23 4.2.30-r0
- py3-django Alpine 3.24 5.2.13-r0
alpine advisories ALPINE-CVE-2026-3902
Alpine secdb © Alpine Linux, from https://secdb.alpinelinux.org via OSV; changed: normalised to fixed package versions per release. CC BY-SA 4.0
Vendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2026-3902 updated cvss 5.3
Django: Django: Header spoofing via ambiguous header mapping
-
Red Hat Ansible Automation Platform 2 automation-controller, redhat-user-workloads/es-team-tenant/automation-reports, ansible-automation-platform-24/lightspeed-rhel8-operator, ansible-automation-platform-26/lightspeed-rhel9-operator, redhat-user-workloads/ansible-tenant/ansible-automation-platform-26/hub-rhel9, redhat-user-workloads/ansible-tenant/ansible-automation-platform-26/gateway-rhel9, +3 more Red Hat Discovery 2 redhat-user-workloads/discovery-tenant/discovery/discovery-server Red Hat Satellite 6 redhat-user-workloads/insights-management-tenant/satellite-iop/iop-advisor-backend-sat-6-18affected: workaround, no fix available “Fix deferred”
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
CISA SSVC
- Exploitation
- none
- Automatable
- yes
- Technical impact
- partial
- Assessed
- 7 mo ago
Exploit prediction
0.44% chance of exploitation in the next 30 days, higher than 38% of all scored CVEs (FIRST EPSS, 2026-11-08).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CISA ADP | 3.1 | 7.5 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |
| GitHub | 3.1 | 7.5 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |
| CNA | 3.1 | 7.5 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |
| OSV | 3.1 | 7.5 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| pypi | django | >=6.0, <6.0.4 >=5.2, <5.2.13 >=4.2, <4.2.30 |
6.0.4 5.2.13 4.2.30 |
| bitnami | django | >=4.2.0, <4.2.30 >=5.2.0, <5.2.13 >=6.0.0, <6.0.4 |
4.2.30 5.2.13 6.0.4 |
Affected products
- djangoproject Django
Classification
- Weakness
-
- CWE-290 Authentication Bypass by Spoofing
- Technology feeds
References
-
docs.djangoproject.com
/en/dev/releases/security/
vendor-advisory, patch, advisory
-
djangoproject.com
/weblog/2026/apr/07/security-releases/
vendor-advisory, patch, advisory
-
groups.google.com
/g/django-announce
mailing-list, web, release-notes, article, advisory
-
nvd.nist.gov
/vuln/detail/CVE-2026-3902
advisory, web
-
docs.djangoproject.com
/en/dev/releases/security
web
-
github.com
/django/django
package
-
github.com
/pypa/advisory-database/tree/main/vulns/django/PYSEC-2026-51.yaml
web
-
djangoproject.com
/weblog/2026/apr/07/security-releases
web
-
github.com
/advisories/GHSA-mvfq-ggxm-9mc5
advisory
Sources
- CVE List CVE-2026-3902
- GitHub Advisory GHSA-mvfq-ggxm-9mc5
- NVD CVE-2026-3902
- OSV BIT-django-2026-3902
- OSV PYSEC-2026-51
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.