In accordance with our security release policy,the Django team is issuing releases forDjango 6.1.3, Django6.0.10, and Django5.2.19.These releases address the security issues detailed below. We encourage allusers of Django to upgrade as soon as possible.CVE-2026-108147: Potential memory exhaustion in MultiPartParser via base64-encoded file uploadWhen using django.http.multipartparser.MultiPartParser, multipart uploadswith Content-Transfer-Encoding: base64 could be buffered entirely in memory,regardless of FILE_UPLOAD_MAX_MEMORY_SIZE, before being passed to uploadhandlers, 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 valuesdjango.contrib.gis.forms.GeometryField and its widgets logged invalidsubmitted values directly, allowing control characters (e.g. newlines or ANSIescape sequences) to be written unescaped into logs. This could enable loginjection or forgery, letting attackers manipulate log appearance orstructure, especially in logs processed by external systems or viewed interminals.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 geometriesEarlier versions of the GeoJSON spec allowed specifying a coordinate reference system (CRS) by URL. Since GDAL still resolves theseURLs, any validation, save, or query path where a geometry is instantiated fromuser input allowed an attacker to submit a malicious CRS that would make anetwork 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 andLayerMapping 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 headersUpdateCacheMiddleware and cache_page() generated the same cache keyfor a request that omitted a header listed in the response's Vary headerand a request that sent that header with an empty value. As a result, aresponse cached for one of these requests could be served to the other, whichcould lead to the exposure of private data.Cache keys now distinguish between absent and empty header values, as requiredby RFC 9111#section-4.1.Responses previously cached for requests that omitted a header listed inVary will no longer be matched, and will be cached again on the nextrequest.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 modelsAdmin users with the view (but not change) permission to a user model weredisplayed the entire password hash when the model was not AUTH_USER_MODEL,or when AUTH_USER_MODEL inherited its password field from a concreteparent 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 inputSpatialReference passed string input to GDAL,which by default resolves URLs and reads files. This behavior was notdocumented by Django. Other affected methods includedGEOSGeometry.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 orread a file as the Django process user. The attack vectors could be combined toreveal local file contents by observing outbound requests.SpatialReference now disables network and file access when parsing stringinput on GDAL 3.9 and later. As a consequence, file paths and URLs are nolonger accepted as SpatialReference inputs. Dictionary references using theDICT: prefix, including those prefixed with ESRI::, are rejected on allGDAL versions.Full protection requires GDAL 3.9 or later. Integer SRIDs are looked updirectly 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. Thenew gis.W001 system check warns when the installed version of GDAL is notat least 3.9.This issue has severity "low" according to the Django security policy.Thanks to Adraca for the report.Affected supported versionsDjango mainDjango 6.1Django 6.0Django 5.2ResolutionPatches to resolve the issue have been applied to Django'smain, 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 uploadOn the main branchOn the 6.1 branchOn the 6.0 branchOn the 5.2 branchCVE-2026-111211: Potential log injection via unescaped geometry form valuesOn the main branchOn the 6.1 branchOn the 6.0 branchOn the 5.2 branchCVE-2026-111362: Server-side request forgery via crs member of GeoJSON geometriesOn the main branchOn the 6.1 branchOn the 6.0 branchOn the 5.2 branchCVE-2026-113593: Potential exposure of private data via empty and missing Vary headersOn the main branchOn the 6.1 branchOn the 6.0 branchOn the 5.2 branchCVE-2026-113733: Password hash disclosure to "view only" admin users with custom user modelsOn the main branchOn the 6.1 branchOn the 6.0 branchCVE-2026-114582: Server-side request forgery via SpatialReference string inputOn the main branchOn the 6.1 branchOn the 6.0 branchOn the 5.2 branchThe following releases have been issuedDjango 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: 131403F4D16D8DC7General notes regarding security reportingAs always, we ask that potential security issues be reported via private emailto security@djangoproject.com, and not via Django's Trac instance, nor viathe Django Forum. Please seeour security policies for furtherinformation.