{"title":"Django 4.2.30 release notes","version":"dev","locale":"en","docname":"releases/4.2.30","url":"/en/dev/releases/4.2.30/","canonical":"https://djangodocs.dev/en/dev/releases/4.2.30/","summary":"Django 4.2.30 fixes one security issue with severity “moderate” and four security issues with severity “low” in 4.2.29.","html":"<h1>Django 4.2.30 release notes<a class=\"heading-anchor\" href=\"#django-4-2-30-release-notes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p><em>April 7, 2026</em></p>\n<p>Django 4.2.30 fixes one security issue with severity “moderate” and four\nsecurity issues with severity “low” in 4.2.29.</p>\n<section id=\"cve-2026-3902-asgi-header-spoofing-via-underscore-hyphen-conflation\">\n<h2>CVE-2026-3902: ASGI header spoofing via underscore/hyphen conflation<a class=\"heading-anchor\" href=\"#cve-2026-3902-asgi-header-spoofing-via-underscore-hyphen-conflation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><code class=\"docutils literal notranslate\">ASGIRequest</code> normalizes header names following WSGI conventions, mapping\nhyphens to underscores. As a result, even in configurations where reverse\nproxies carefully strip security-sensitive headers named with hyphens, such a\nheader could be spoofed by supplying a header named with underscores.</p>\n<p>Under WSGI, it is the responsibility of the server or proxy to avoid ambiguous\nmappings. (Django’s <a class=\"reference internal\" href=\"/en/dev/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\">runserver</code></a> was patched in <span class=\"target\" id=\"index-0\"></span><a class=\"cve reference external\" href=\"https://www.cve.org/CVERecord?id=CVE-2015-0219\"><strong>CVE 2015-0219</strong></a>.) But\nunder ASGI, there is not the same uniform expectation, even if many proxies\nprotect against this under default configuration (including <code class=\"docutils literal notranslate\">nginx</code> via\n<code class=\"docutils literal notranslate\">underscores_in_headers off;</code>).</p>\n<p>Headers containing underscores are now ignored by <code class=\"docutils literal notranslate\">ASGIRequest</code>, matching the\nbehavior of <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/daphne/\">Daphne</a>, the reference server for ASGI.</p>\n<p>This issue has severity “low” according to the <a class=\"reference internal\" href=\"/en/dev/internals/security/#severity-levels\"><span class=\"std std-ref\">Django security policy</span></a>.</p>\n</section>\n<section id=\"cve-2026-4277-privilege-abuse-in-genericinlinemodeladmin\">\n<h2>CVE-2026-4277: Privilege abuse in <code class=\"docutils literal notranslate\">GenericInlineModelAdmin</code><a class=\"heading-anchor\" href=\"#cve-2026-4277-privilege-abuse-in-genericinlinemodeladmin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Add permissions on inline model instances were not validated on submission of\nforged <code class=\"docutils literal notranslate\">POST</code> data in\n<a class=\"reference internal\" href=\"/en/dev/ref/contrib/contenttypes/#django.contrib.contenttypes.admin.GenericInlineModelAdmin\" title=\"django.contrib.contenttypes.admin.GenericInlineModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">GenericInlineModelAdmin</code></a>.</p>\n<p>This issue has severity “low” according to the <a class=\"reference internal\" href=\"/en/dev/internals/security/#severity-levels\"><span class=\"std std-ref\">Django security policy</span></a>.</p>\n</section>\n<section id=\"cve-2026-4292-privilege-abuse-in-modeladmin-list-editable\">\n<h2>CVE-2026-4292: Privilege abuse in <code class=\"docutils literal notranslate\">ModelAdmin.list_editable</code><a class=\"heading-anchor\" href=\"#cve-2026-4292-privilege-abuse-in-modeladmin-list-editable\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Admin changelist forms using\n<a class=\"reference internal\" href=\"/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_editable\" title=\"django.contrib.admin.ModelAdmin.list_editable\"><code class=\"xref py py-attr docutils literal notranslate\">list_editable</code></a> incorrectly allowed new\ninstances to be created via forged <code class=\"docutils literal notranslate\">POST</code> data.</p>\n<p>This issue has severity “low” according to the <a class=\"reference internal\" href=\"/en/dev/internals/security/#severity-levels\"><span class=\"std std-ref\">Django security policy</span></a>.</p>\n</section>\n<section id=\"cve-2026-33033-potential-denial-of-service-vulnerability-in-multipartparser-via-base64-encoded-file-upload\">\n<h2>CVE-2026-33033: Potential denial-of-service vulnerability in <code class=\"docutils literal notranslate\">MultiPartParser</code> via base64-encoded file upload<a class=\"heading-anchor\" href=\"#cve-2026-33033-potential-denial-of-service-vulnerability-in-multipartparser-via-base64-encoded-file-upload\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>When using <code class=\"docutils literal notranslate\">django.http.multipartparser.MultiPartParser</code>, multipart uploads\nwith <code class=\"docutils literal notranslate\">Content-Transfer-Encoding: base64</code> that include excessive whitespace\nmay trigger repeated memory copying, potentially degrading performance.</p>\n<p>This issue has severity “moderate” according to the <a class=\"reference internal\" href=\"/en/dev/internals/security/#severity-levels\"><span class=\"std std-ref\">Django security\npolicy</span></a>.</p>\n</section>\n<section id=\"cve-2026-33034-potential-denial-of-service-vulnerability-in-asgi-requests-via-memory-upload-limit-bypass\">\n<h2>CVE-2026-33034: Potential denial-of-service vulnerability in ASGI requests via memory upload limit bypass<a class=\"heading-anchor\" href=\"#cve-2026-33034-potential-denial-of-service-vulnerability-in-asgi-requests-via-memory-upload-limit-bypass\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>ASGI requests with a missing or understated <code class=\"docutils literal notranslate\">Content-Length</code> header could\nbypass the <a class=\"reference internal\" href=\"/en/dev/ref/settings/#std-setting-DATA_UPLOAD_MAX_MEMORY_SIZE\"><code class=\"xref std std-setting docutils literal notranslate\">DATA_UPLOAD_MAX_MEMORY_SIZE</code></a> limit when reading\n<code class=\"docutils literal notranslate\">HttpRequest.body</code>, potentially loading an unbounded request body into\nmemory and causing service degradation.</p>\n<p>This issue has severity “low” according to the <a class=\"reference internal\" href=\"/en/dev/internals/security/#severity-levels\"><span class=\"std std-ref\">Django security policy</span></a>.</p>\n</section>","rootId":"django-4-2-30-release-notes","toc":[{"title":"CVE-2026-3902: ASGI header spoofing via underscore/hyphen conflation","anchor":"cve-2026-3902-asgi-header-spoofing-via-underscore-hyphen-conflation","children":[]},{"title":"CVE-2026-4277: Privilege abuse in GenericInlineModelAdmin","anchor":"cve-2026-4277-privilege-abuse-in-genericinlinemodeladmin","children":[]},{"title":"CVE-2026-4292: Privilege abuse in ModelAdmin.list_editable","anchor":"cve-2026-4292-privilege-abuse-in-modeladmin-list-editable","children":[]},{"title":"CVE-2026-33033: Potential denial-of-service vulnerability in MultiPartParser via base64-encoded file upload","anchor":"cve-2026-33033-potential-denial-of-service-vulnerability-in-multipartparser-via-base64-encoded-file-upload","children":[]},{"title":"CVE-2026-33034: Potential denial-of-service vulnerability in ASGI requests via memory upload limit bypass","anchor":"cve-2026-33034-potential-denial-of-service-vulnerability-in-asgi-requests-via-memory-upload-limit-bypass","children":[]}],"breadcrumbs":[{"docname":"releases/index","title":"Release notes","url":"/en/dev/releases/"}],"prev":{"docname":"releases/5.0","title":"Django 5.0 release notes","url":"/en/dev/releases/5.0/"},"next":{"docname":"releases/4.2.29","title":"Django 4.2.29 release notes","url":"/en/dev/releases/4.2.29/"},"formats":{"html":"/en/dev/releases/4.2.30/","markdown":"/en/dev/releases/4.2.30.md","json":"/en/dev/releases/4.2.30.json"},"source":"https://github.com/django/django/blob/main/docs/releases/4.2.30.txt","official":"https://docs.djangoproject.com/en/dev/releases/4.2.30/","inVersions":["dev","6.1","6.0","5.2","4.2"],"inLocales":["en"]}