Skip to main content

Django GeoDjango CVE-2026-114582

| EUVDEUVD-2026-116023 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
    Reach endpoint accepting SRS string
  2. Delivery
    Submit reference embedding URL or file path
  3. Exploit
    GDAL resolves input without restriction
  4. Execution
    Server fetches URL or reads local file
  5. Impact
    Exfiltrate file contents or probe internal services

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 application pass attacker-influenced string input into django.contrib.gis.gdal.SpatialReference, GEOSGeometry.transform(), OGRGeometry.transform()/srs setter, GDALRaster.transform(), or the GDALRaster srs/srid setters - i.e. GeoDjango must be in use with a code path that forwards untrusted SRS strings to GDAL. Limiting factors: the vulnerable surface is confined to applications that expose these GIS APIs to external input (not a default Django site), so an app that never feeds user data to SpatialReference is unaffected. Even after patching, full file/network blocking is only enforced on GDAL 3.9 or higher; on older GDAL the fix blocks the 'dict:'/'esri::dict:' parser bypass but cannot otherwise restrict resolution, and Django only emits a system-check warning. Impact is read-oriented (SSRF to internal/attacker hosts and local file reads), with no integrity or availability effect.

Impact

This is a moderate, condition-dependent SSRF/local-file-read (CWE-918) in Django's GeoDjango stack, not a high-urgency mass-exploitation issue. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) with only low confidentiality impact (VC:L) and no integrity or availability impact yields 6.9 (Medium), and this matches the mechanism: attacker-supplied strings reach GDAL, which by default resolves URLs and reads files, so the payoff is SSRF and file-content disclosure rather than code execution. No EPSS score, KEV listing, or PoC/exploit reference was provided - the only references are the vendor advisory and four patch commits - so exploitation signals are absent, consistent with the vuln.today 'this_month' (not act_now/emergency) decision label. The network vector and PR:N would normally suggest easy remote reach, but real-world exploitability is gated by an application-design precondition absent from the raw vector: the app must actually pass untrusted input into SpatialReference/transform()/srs/srid. Treat this as a real but prioritizable patch item, not an emergency; EPSS and SSVC-automatable signals were not supplied and cannot be assessed.

Exploit ScenarioDerived

A web application accepts a user-controlled coordinate-system identifier and passes it to django.contrib.gis.gdal.SpatialReference (or a transform()/srs/srid setter). An attacker submits a crafted spatial reference string containing a URL or local file path; GDAL (below 3.9, or before the Django fix) resolves it, causing the server to issue an outbound request to an attacker or internal host, or to read a local file. No public exploit code is identified at time of analysis.

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

Server-side request forgery and local file disclosure in Django's GeoDjango module affect 5.2 before 5.2.19, 6.0 before 6.0.10, and 6.1 before 6.1.3, where SpatialReference, the transform() methods on GEOSGeometry/OGRGeometry/GDALRaster, and the OGRGeometry.srs and GDALRaster.srs/srid setters forward attacker-influenced strings to GDAL without restricting its file and network access, letting unauthenticated remote attackers on an affected code path trigger outbound requests or read local files. Exposure is conditional: only applications that pass untrusted spatial-reference strings into these GIS APIs are reachable, and even after patching the file/network blocking is only enforced on GDAL 3.9 or newer. No public exploit code or active exploitation was identified at time of analysis; Django has released fixes in 6.1.3, 6.0.10, and 5.2.19.

RemediationAI

Vendor-released patches are available: upgrade to Django 6.1.3, 6.0.10, or 5.2.19 as appropriate for your branch (advisory: https://www.djangoproject.com/weblog/2026/nov/03/security-releases/). Because the mitigation depends on GDAL, also upgrade GDAL to 3.9 or higher; on older GDAL the patch only blocks the 'dict:'/'esri::dict:' parser bypass and Django merely emits the gis.W001 system-check warning that malicious spatial references remain resolvable. Until both upgrades are in place, apply the vendor-documented workaround for the affected API surface: compare any user-supplied spatial-reference string against a strict allow list first, or accept only integer SRID/EPSG identifiers - the trade-off is that legitimate free-form WKT or PROJ input from users will be rejected. Run Django's system checks in CI or at deploy time to detect the gis.W001 condition on hosts still running GDAL below 3.9.

Affected VersionsENISA

Django 6.0 <6.0.10
Django 6.1 <6.1.3
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

The flaw is CWE-918 (server-side request forgery) rooted in GeoDjango's GDAL bindings. django.contrib.gis.gdal.srs passed user strings to GDAL's OSRSetFromUserInput, which by design resolves URLs and reads files when parsing a spatial reference (WKT, PROJ strings, EPSG codes, and similar). Django never documented that behavior or constrained it. The upstream fix adds a ctypes papsz option array containing ALLOW_FILE_ACCESS=NO and ALLOW_NETWORK_ACCESS=NO and routes input through OSRSetFromUserInputEx instead of OSRSetFromUserInput, but that extended entry point exists only in GDAL 3.9 and later; on older GDAL the code falls back to the original call. Because GDAL's dictionary parser bypasses those restrictions, the patch also rejects any input that, after whitespace stripping and removal of an 'esri::' prefix, begins with 'dict:', raising GDALException. A new system check, gis.W001 in the new 'gis' checks tag, warns when the installed GDAL is older than 3.9 and therefore cannot enforce blocking. The independent assessment scores this CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N - unauthenticated network reachability with confidentiality-only impact.

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:N/SA:N
vuln.today AI 5.3 MEDIUM

Network-reachable SSRF/file read with no authentication required by the flaw itself (PR:N) and low confidentiality-only impact; no integrity or availability effect, scope unchanged.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/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:N/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
None
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:43 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.SpatialReference (and related transform() methods and srs/srid setters) do not restrict GDAL’s file and network access when parsing string input, which allows attackers to trigger server-side requests or local file reads via crafted spatial reference strings. 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 Adraca for reporting this issue.

Threat Intelligence Overview

Prevalence
High
Django is a widely-deployed web framework; GeoDjango GIS module is a smaller subset
Data Quality
3 sources
Confidence: Low

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