CVE-2026-33034Django在处理ASGI请求时存在安全漏洞,攻击者可以通过发送缺失或低报`Content-Length`头部的请求,绕过`DATA_UPLOAD_MAX_MEMORY_SIZE`配置限制。这使得远程攻击者能够将不受限制的请求主体加载到服务器内存中,导致资源耗尽并引发拒绝服务。该问题影响了Django 6.0、5.2和4.2的特定早期版本。
该漏洞源于Django ASGI处理请求体时的逻辑缺陷。在ASGI规范下,Django通常依赖`Content-Length`请求头来预判请求体大小,以强制执行`DATA_UPLOAD_MAX_MEMORY_SIZE`的安全限制,防止内存耗尽攻击。然而,当攻击者发送精心构造的ASGI请求,故意省略`Content-Length`或将其设置为一个较小的值,但实际传输的数据流非常大时,Django在读取`HttpRequest.body`时未能正确校验实际接收的数据量。由于ASGI是异步流式处理,这种校验缺失导致数据持续读入内存,直到内存耗尽或连接断开。这直接绕过了内存保护机制,无需认证即可利用,严重影响系统可用性。