Skip to main content

Django CVE-2026-111211

| EUVDEUVD-2026-116019 MEDIUM
Improper Output Neutralization for Logs (CWE-117)
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 geometry value to GeometryField form
  2. Exploit
    Value fails GEOS/WKT deserialization
  3. Execution
    Control characters written unescaped to error log
  4. Impact
    Forge or inject fake log entries

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A09:2025 - Security Logging & Alerting Failures
ASVS 5.0
V16 - Security Logging and Error Handling Log output neutralization
Exploitation Conditions

Exploitation requires that the target application use django.contrib.gis.forms.GeometryField or a BaseGeometryWidget subclass (i.e. GeoDjango/contrib.gis forms) and accept attacker-controlled geometry input, and that invalid submissions be logged via the django.contrib.gis error logger. The attacker-controlled value must contain control characters (newlines, ANSI escape sequences, etc.) to achieve log forgery. No authentication is required (PR:N) and no special configuration beyond using the GIS form field, but impact is limited to log integrity and is most meaningful when logs are viewed in terminals or ingested by external systems; applications that do not use contrib.gis geometry form fields are not affected.

Impact

This is a genuinely low-priority issue despite a moderate CVSS 4.0 base score of 6.9. The vector CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N shows network reach with no authentication or user interaction, but the ONLY impact is a low-level integrity effect (VI:L) on logs - no confidentiality, no availability, no code execution. Django itself rates this 'low' under its security policy, and the vuln.today decision label is 'this_month' rather than act_now/emergency, which is consistent with a log-integrity defect. No EPSS score was provided, there is no CISA KEV listing (no confirmed active exploitation), and no proof-of-concept or exploit reference appears in the input - only vendor patch commits and advisories. The CWE is CWE-117 (improper output neutralization for logs / log injection), NOT code execution, so the 'Code Injection' tag overstates the mechanism. Net: the network-reachable, unauthenticated characteristics make the score look alarming, but real-world risk is contained to log forgery/tampering and only in applications that use the optional GeoDjango GeometryField, so this should be scheduled as routine patching rather than treated as an emergency.

Exploit ScenarioDerived

An application that exposes a django.contrib.gis.forms.GeometryField (GeoDjango) accepts user-submitted geometry data. A remote attacker submits an invalid geometry value containing control characters such as newlines or ANSI escape sequences; because deserialize() logged the raw value unescaped, the attacker forges additional fake log lines or manipulates how logs render in terminals or downstream log processors. No public exploit code is identified in the provided sources.

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

Log injection in Django's GeoDjango form layer lets remote attackers forge or corrupt application log entries by submitting a crafted geometry value to a form built on django.contrib.gis.forms.GeometryField, because BaseGeometryWidget.deserialize() wrote the rejected input into the django.contrib.gis error log without escaping control characters. Affected releases are Django 6.1 before 6.1.3, 6.0 before 6.0.10 and 5.2 before 5.2.19; older unsupported series (5.1.x, 5.0.x, 4.2.x) were not evaluated by the vendor and may also be affected. The CVSS 4.0 base score is 6.9, but the Django security team classifies the issue as low severity and the practical impact is confined to log integrity - newline or ANSI escape sequences can fake log lines or manipulate terminal output when such logs are viewed or ingested elsewhere. No public exploit code was identified at time of analysis.

RemediationAI

Upgrade to Django 6.1.3, 6.0.10 or 5.2.19, the releases that contain the fix; patch commits are public at https://github.com/django/django/commit/af4319f7217e33ad5db747226765f09b49ec07ba, https://github.com/django/django/commit/b336d9a4e8a919d2e5f979b663de2b27e245b793, https://github.com/django/django/commit/1b747694d6a68a6b5d48cbe81c71053092a5d374 and https://github.com/django/django/commit/b83bf870ee0006ab0dd84a01d1f3b0391320a51a and can be backported if an unsupported branch must be maintained. Because Django's advisory treats the release as the fix, the reliable mitigation is applying the patched version; applications that do not expose django.contrib.gis.forms.GeometryField or BaseGeometryWidget-based forms are not affected and need no change. Where an immediate upgrade is not possible, the exposure is bounded by removing GeoDjango geometry form endpoints from untrusted input or by preventing django.contrib.gis error records from reaching terminal viewers or log-ingestion pipelines that interpret escape sequences, at the cost of losing those diagnostics. Track the vendor security page at https://docs.djangoproject.com/en/dev/releases/security/ for updated release guidance.

Affected VersionsENISA

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

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

CWE-117 (Improper Output Neutralization for Logs): in django/contrib/gis/forms/widgets.py, BaseGeometryWidget.deserialize() called logger.error("Error creating geometry from value '%s' (%s)", value, err) with the raw submitted string whenever the value could not be parsed as WKT, EWKT or HEXEWKB. Any control characters in that string - newlines, ANSI escape sequences, unicode line separators - were therefore written to the django.contrib.gis logger verbatim, allowing an attacker to fabricate additional log records or alter how existing records render in a terminal or downstream log pipeline. The fix routes the message through django.utils.log.log_message() so the interpolated value is escaped, and through django.utils.text.trim_value() to cap the value at 4096 characters with a '<trimmed N chars out of M>' suffix kept outside the escaped argument, which also avoids unbounded log records from very large submissions. The accompanying tests assert that 'line\nbreak', an emoji, and an ANSI colour sequence are logged in escaped form (\n, \U0001f5fa\ufe0f, \x1b[31m) and that a 5000-character value is trimmed. The vulnerable code path is reached only through GeoDjango geometry form fields and widgets, i.e. deployments using the GIS contrib app with attacker-reachable geometry input.

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:N/VI:L/VA:N/SC:N/SI:N/SA:N
vuln.today AI 5.3 MEDIUM

Remote unauthenticated submission of a form value (AV:N/AC:L/PR:N/UI:N); only log integrity is affected, so I:L and C:N/A:N, scope unchanged.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/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
None
Vulnerable system: Integrity
Low
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:41 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.forms.widgets.BaseGeometryWidget.deserialize(), used by django.contrib.gis.forms.GeometryField, does not escape invalid submitted values before logging them, which allows remote attackers to inject or forge log entries via a crafted geometry value. 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 Aaron chen for reporting this issue.

Threat Intelligence Overview

Prevalence
High
widely-deployed Python web framework; vulnerable path needs optional GeoDjango GIS forms
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

Code Injection CRITICAL

Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.

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