Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSubmit crafted GeoJSON to GIS endpoint
-
DeliveryEmbed external 'crs' link/url member
-
ExploitOGRGeometry forwards to GDAL
-
ExecutionGDAL fetches attacker-selected destination
-
ImpactServer-side request forged to internal/chosen host
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Credential Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the target application uses GeoDjango (django.contrib.gis) with the GDAL backend AND passes attacker-controlled GeoJSON into django.contrib.gis.gdal.OGRGeometry - for example via a gis forms GeometryField/widget deserialize path. The concrete trigger, per the fix, is a GeoJSON 'crs' member whose type begins with 'link' or 'url', or a CRS 'name' that is not an allowlisted AUTHORITY:CODE (e.g. EPSG:4326), OGC CRS URN, or bare shorthand (CRS84/CRS27/CRS83/WGS84); such external references make GDAL perform I/O to the specified destination. Limiting factors: the vulnerable code path is only present when the GIS/GDAL feature set is installed and the application accepts GeoJSON geometry input, which excludes the large majority of Django deployments that do not use GeoDjango. No authentication or user interaction is required by the CVSS vector where the endpoint is exposed. |
| Impact | This is a medium-severity SSRF (CWE-918) with a nuanced real-world risk profile. The only severity signal in the input is the vendor CVSS 4.0 vector (CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:L/SA:N, score 6.9), which describes a network-reachable, low-complexity, unauthenticated flaw with low confidentiality impact on the vulnerable system and low subsequent-system integrity impact - consistent with an attacker coercing the server into outbound requests. No EPSS score, no CISA KEV entry, and no PoC/exploit reference are present in the input, so there is no public exploit identified at time of analysis and no signal of active or widespread exploitation. The vuln.today decision label is 'this_month' (not act_now/emergency), aligning with a patch-this-cycle priority rather than a drop-everything emergency. The critical mitigating factor the raw CVSS does not capture is scope: the flaw lives in django.contrib.gis.gdal (GeoDjango) and triggers only when an application processes attacker-controlled GeoJSON through OGRGeometry - a feature used by a small minority of Django deployments. So while CVSS marks it network/unauthenticated, real exposure is gated by whether the GIS stack is in use; verify that your application accepts GeoJSON geometry input before treating this as reachable. |
| Exploit ScenarioDerived | A remote attacker submits a crafted GeoJSON geometry (for example to a GeoDjango GeometryField form or any endpoint that feeds user input into OGRGeometry) containing a 'crs' member of type 'link'/'url' or a CRS name that resolves to an external location. When Django hands this to GDAL's OGRSpatialReference, GDAL fetches the attacker-selected destination, producing a server-side request to internal or attacker-chosen hosts. No public exploit is identified in the provided data, but the fix commits reveal the trigger precisely: URL-based or non-allowlisted CRS definitions. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 03, 2026
Medium-severity server-side request forgery in Django's GeoDjango component allows unauthenticated remote attackers to make a vulnerable server send requests to attacker-selected destinations when crafted GeoJSON containing an external coordinate reference system (CRS) is passed to django.contrib.gis.gdal.OGRGeometry. Django 6.1 before 6.1.3, 6.0 before 6.0.10, and 5.2 before 5.2.19 are affected, while unsupported older series such as 5.1.x, 5.0.x, and 4.2.x were not evaluated and may also be affected. Vendor patches are available, and no public exploit was identified at time of analysis; practical exposure is limited to deployments that use GeoDjango with the GDAL backend and accept untrusted GeoJSON geometry input.
RemediationAI
Upgrade to Django 6.1.3, 6.0.10, or 5.2.19, which contain the vendor fix; related upstream patch commits include https://github.com/django/django/commit/ecb2b77b49890d6b2120f73fb3d7eb7ac7650143, https://github.com/django/django/commit/649fb7985f67d5936dfb8caae6a54c0870dc8eec, https://github.com/django/django/commit/e938f676fcca72f41247b0e96d4f0805e1722913, and https://github.com/django/django/commit/31bef742da017bc71fdce9298c30984aad844102. The fix adds an allowlist-based ExternalCRSBlocker that rejects external CRS definitions before GDAL parsing. No separate vendor workaround is specified; if immediate upgrade is not possible, reduce exposure by preventing untrusted GeoJSON from reaching django.contrib.gis.gdal.OGRGeometry and by rejecting 'crs' members whose type begins with 'link' or 'url' or whose name is not an allowlisted EPSG/OGC-style authority code or shorthand, recognizing that this can break legitimate custom or external CRS support. Confirm patch details in the vendor advisory at https://docs.djangoproject.com/en/dev/releases/security/.
Affected VersionsENISA
Affected Packages
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
GeoDjango is Django's geographic framework, and when the GDAL/OGR bindings are installed, OGRGeometry parses geometry input and can resolve a GeoJSON 'crs' member through GDAL/OGRSpatialReference. The flaw is CWE-918: the parser did not restrict external CRS definitions, so a crs object with a type beginning 'link' or 'url', or a properties.name that is not an allowlisted AUTHORITY:CODE such as EPSG:4326, an OGC CRS URN, or a bare shorthand such as CRS84/CRS27/CRS83/WGS84, could cause GDAL to perform I/O to the specified destination. The upstream fix adds django/contrib/gis/gdal/geojson.py with an ExternalCRSBlocker that is called from OGRGeometry.__init__ and from_bbox, and the GIS form field widget now raises SuspiciousOperation on URL-based CRS values. The assessed CVSS:3.1 vector is AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N, so impact centers on limited confidentiality exposure through SSRF rather than integrity or availability; the vulnerable path requires the GIS/GDAL feature set and an application endpoint that accepts attacker-controlled GeoJSON, which excludes most Django deployments that do not use GeoDjango.
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
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:L/SA:N
Network-reachable, low-complexity, unauthenticated GeoJSON input; SSRF reaches other systems so S:C, with low confidentiality from response/behavior leakage and no direct integrity/availability loss.
Primary rating from Vendor (DSF).
CVSS VectorVendor: DSF
Lifecycle Timeline
2DescriptionCVE.org
An issue was discovered in Django 6.1 before 6.1.3, 6.0 before 6.0.10, and 5.2 before 5.2.19. django.contrib.gis.gdal.OGRGeometry does not restrict external coordinate reference system definitions in GeoJSON input, which allows remote attackers to cause server-side requests to attacker-selected destinations via crafted crs members. 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 Submersion Security Research Team for reporting this issue.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
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
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
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
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
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
An authentication/authorization bypass in the djust Python live-view framework (versions prior to 1.0.7) lets unauthenti
Unauthenticated arbitrary Python module import in djust before 1.0.7 lets any client that can reach the WebSocket or SSE
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
Cross-site scripting (XSS) vulnerability in the dismissChangeRelatedObjectPopup function in contrib/admin/static/admin/j
Forged content modification in django-page-cms through 2.0.13 lets unauthenticated remote attackers exploit five CSRF-ex
Cross-site request forgery in djust's Server-Sent-Events transport affects all versions prior to 1.0.7 and allows a cros
Unauthenticated remote attackers can read live Django view and session state and invoke server-side handlers through dju
EUVD-2026-116020
NVD
CVE.org
GitHub
Exploit-DB