Skip to main content

Django GeoDjango EUVDEUVD-2026-116020

| CVE-2026-111362 MEDIUM
Server-Side Request Forgery (SSRF) (CWE-918)
2026-11-03 DSF
6.9
CVSS 4.0 · Vendor: DSF
View

Attack ChainAIDerived

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

  1. Access
    Submit crafted GeoJSON to GIS endpoint
  2. Delivery
    Embed external 'crs' link/url member
  3. Exploit
    OGRGeometry forwards to GDAL
  4. Execution
    GDAL fetches attacker-selected destination
  5. Impact
    Server-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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available

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

Alert me

AnalysisAIv1 – 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

Django 6.1 <6.1.3
Django 6.0 <6.0.10
Django 5.2 <5.2.19

Affected Packages

euvd django fix: 5.2.19, 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

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

Vendor (DSF) PRIMARY 6.9 MEDIUM
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
vuln.today AI 5.8 MEDIUM

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.

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

Primary rating from Vendor (DSF).

CVSS VectorVendor: DSF

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
Low
Subsequent system: Availability
None

Lifecycle Timeline

2
CVSS changed
Nov 03, 2026 - 16:22 NVD
5.3 (MEDIUM) 6.9 (MEDIUM)
CVE Published
Nov 03, 2026 - 15:42 cve.org
MEDIUM 6.9

DescriptionCVE.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

Prevalence
High
widely-deployed Python web framework; GeoDjango/GIS subset narrows real exposure
Data Quality
4 sources
Confidence: Medium

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 MEDIUM
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
Yes
Human Impact· derived
High

Priority Score

34
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

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