In accordance with our security release policy, the Django team is issuing releases for Django 6.1.3, Django 6.0.10, and Django 5.2.19. These releases address the security issues detailed below. We encourage all users of Django to upgrade as soon as possible.
CVE-2026-108147: Potential memory exhaustion in MultiPartParser via base64-encoded file upload
When using django.http.multipartparser.MultiPartParser, multipart uploads with Content-Transfer-Encoding: base64 could be buffered entirely in memory, regardless of FILE_UPLOAD_MAX_MEMORY_SIZE, before being passed to upload handlers, potentially consuming excessive memory.
This issue has severity "low" according to the Django Security Policy.
Thanks to Ignacy Kujawa for the report.
CVE-2026-111211: Potential log injection via unescaped geometry form values
django.contrib.gis.forms.GeometryField and its widgets logged invalid submitted values directly, allowing control characters (e.g. newlines or ANSI escape sequences) to be written unescaped into logs. This could enable log injection or forgery, letting attackers manipulate log appearance or structure, especially in logs processed by external systems or viewed in terminals.
This issue has severity "low" according to the Django Security Policy.
Thanks to Aaron chen for the report.
CVE-2026-111362: Server-side request forgery via crs member of GeoJSON geometries
Earlier versions of the GeoJSON spec allowed specifying a coordinate reference system (CRS) by URL. Since GDAL still resolves these URLs, any validation, save, or query path where a geometry is instantiated from user input allowed an attacker to submit a malicious CRS that would make a network request as the Django process user, or read a file, or both.
Lookups against spatial fields, the GeometryField form field, and GEOSGeometry now reject GeoJSON geometries with CRS references to external resources. The DataSource and LayerMapping utilities for loading trusted data continue to accept these values.
This issue has severity "moderate" according to the Django Security Policy.
Thanks to Submersion Security Research Team for the report.
CVE-2026-113593: Potential exposure of private data via empty and missing Vary headers
UpdateCacheMiddleware and cache_page() generated the same cache key for a request that omitted a header listed in the response's Vary header and a request that sent that header with an empty value. As a result, a response cached for one of these requests could be served to the other, which could lead to the exposure of private data.
Cache keys now distinguish between absent and empty header values, as required by RFC 9111#section-4.1.
Responses previously cached for requests that omitted a header listed in Vary will no longer be matched, and will be cached again on the next request.
This issue has severity "low" according to the Django security policy.
Thanks to Andrew Gonzalez for the report.
CVE-2026-113733: Password hash disclosure to "view only" admin users with custom user models
Admin users with the view (but not change) permission to a user model were displayed the entire password hash when the model was not AUTH_USER_MODEL, or when AUTH_USER_MODEL inherited its password field from a concrete parent model through multi-table inheritance.
This issue has severity "low" according to the Django Security Policy.
Thanks to Aaron chen for the report.
CVE-2026-114582: Server-side request forgery via SpatialReference string input
SpatialReference passed string input to GDAL, which by default resolves URLs and reads files. This behavior was not documented by Django. Other affected methods included GEOSGeometry.transform(), OGRGeometry.transform(), GDALRaster.transform(), the srs setter of OGRGeometry, and the srs and srid setters of GDALRaster. A URL or file path reaching any of these would issue an outbound request or read a file as the Django process user. The attack vectors could be combined to reveal local file contents by observing outbound requests.
SpatialReference now disables network and file access when parsing string input on GDAL 3.9 and later. As a consequence, file paths and URLs are no longer accepted as SpatialReference inputs. Dictionary references using the DICT: prefix, including those prefixed with ESRI::, are rejected on all GDAL versions.
Full protection requires GDAL 3.9 or later. Integer SRIDs are looked up directly in the EPSG database, so prefer them when the input is untrusted. Or, if strings must be used on lower GDAL versions, compare to an allow list. The new gis.W001 system check warns when the installed version of GDAL is not at least 3.9.
This issue has severity "low" according to the Django security policy.
Thanks to Adraca for the report.
Affected supported versions
- Django main
- Django 6.1
- Django 6.0
- Django 5.2
Resolution
Patches to resolve the issue have been applied to Django's main, 6.1, 6.0, and 5.2 branches. The patches may be obtained from the following changesets.
CVE-2026-108147: Potential memory exhaustion in MultiPartParser via base64-encoded file upload
- On the main branch
- On the 6.1 branch
- On the 6.0 branch
- On the 5.2 branch
CVE-2026-111211: Potential log injection via unescaped geometry form values
- On the main branch
- On the 6.1 branch
- On the 6.0 branch
- On the 5.2 branch
CVE-2026-111362: Server-side request forgery via crs member of GeoJSON geometries
- On the main branch
- On the 6.1 branch
- On the 6.0 branch
- On the 5.2 branch
CVE-2026-113593: Potential exposure of private data via empty and missing Vary headers
- On the main branch
- On the 6.1 branch
- On the 6.0 branch
- On the 5.2 branch
CVE-2026-113733: Password hash disclosure to "view only" admin users with custom user models
- On the main branch
- On the 6.1 branch
- On the 6.0 branch
CVE-2026-114582: Server-side request forgery via SpatialReference string input
- On the main branch
- On the 6.1 branch
- On the 6.0 branch
- On the 5.2 branch
The following releases have been issued
- Django 6.1.3 (tarball | checksums)
- Django 6.0.10 (tarball | checksums)
- Django 5.2.19 (tarball | checksums)
The PGP key ID used for this release is Jacob Walls: 131403F4D16D8DC7
General notes regarding security reporting
As always, we ask that potential security issues be reported via private email to security@djangoproject.com, and not via Django's Trac instance, nor via the Django Forum. Please see our security policies for further information.




