단 20MB HTTP 패킷으로 Django 서버를 1분간 먹통 만드는 취약점이 공개되었습니다 (CVE-2026-33033)
Django의 `MultiPartParser`에서 특정 조건(Content-Transfer-Encoding: base64 파트 본문에 공백이 포함될 때) 발생 가능한 Pre-Auth CPU exhaustion 취약점(CVE-2026-33033)이 공개되었습니다. 이 취약점은 약 2.5MB의 요청만으로 정상 대비 2,100배 이상의 처리 시간을 유발하며, CSRF 미들웨어가 작동하는 환경에서 인증 없이도 서버 자원을 고갈시킬 수 있어 심각한 DoS 위험을 내포합니다.
**핵심 요약:**
* **무엇이 일어났는지:** Django의 `MultiPartParser`가 `Content-Transfer-Encoding: base64` 파트 본문에 공백이 포함될 경우, 요청 처리 과정에서 비효율적인 메모리 복사 및 반복 호출로 인해 CPU 고갈(Pre-Auth DoS)이 발생하는 취약점이 발견되었습니다.
* **왜 중요한지:** 단 2.5MB의 요청만으로 단일 워커(worker)를 약 1분간 점유할 수 있으며, 이는 일반적인 Gunicorn 설정 환경에서 동시 수십 개의 요청만으로도 서버가 사실상 마비될 수 있는 심각한 DoS 위험을 의미합니다.
* **주의할 점 또는 맥락:** 이 취약점은 `MultiPartParser`와 CSRF 미들웨어가 상호작용하는 복잡한 구조에서 발생했으며, Django 팀은 `read()` 호출 방식을 변경하여 메모리 복사 횟수를 대폭 줄이는 패치를 적용했습니다. 또한, Nginx나 Apache 설정만으로는 이러한 DoS 공격을 완전히 방어하기 어려우므로, 프레임워크 레벨의 보안 강화가 필수적입니다.
**핵심 요약:**
* **무엇이 일어났는지:** Django의 `MultiPartParser`가 `Content-Transfer-Encoding: base64` 파트 본문에 공백이 포함될 경우, 요청 처리 과정에서 비효율적인 메모리 복사 및 반복 호출로 인해 CPU 고갈(Pre-Auth DoS)이 발생하는 취약점이 발견되었습니다.
* **왜 중요한지:** 단 2.5MB의 요청만으로 단일 워커(worker)를 약 1분간 점유할 수 있으며, 이는 일반적인 Gunicorn 설정 환경에서 동시 수십 개의 요청만으로도 서버가 사실상 마비될 수 있는 심각한 DoS 위험을 의미합니다.
* **주의할 점 또는 맥락:** 이 취약점은 `MultiPartParser`와 CSRF 미들웨어가 상호작용하는 복잡한 구조에서 발생했으며, Django 팀은 `read()` 호출 방식을 변경하여 메모리 복사 횟수를 대폭 줄이는 패치를 적용했습니다. 또한, Nginx나 Apache 설정만으로는 이러한 DoS 공격을 완전히 방어하기 어려우므로, 프레임워크 레벨의 보안 강화가 필수적입니다.