🇰🇷 한글 설명
Python-Multipart 0.0.30 미만 버전에서 RFC 7578 표준을 위반하는 헤더 디코딩 방식의 취약점이 발견되었습니다. 공격자가 RFC 2231/5987 형식을 사용하여 필드 이름이나 파일명을 조작함으로써, WAF나 프록시와 같은 보안 장비를 우회하여 백엔드 서버로 데이터를 은닉하여 전달(Smuggling)할 수 있습니다.
💡 쉬운 설명
보안 검사 장비가 읽는 방식과 실제 서버가 읽는 방식의 차이를 이용해, 숨겨진 데이터를 몰래 전달하는 공격입니다. 특수한 형식의 파일 이름을 사용하여 보안 필터를 통과한 뒤 서버에 잘못된 정보를 전달할 수 있습니다.
🇺🇸 원문 (English)
Python-Multipart is a streaming multipart parser for Python. Prior to 0.0.30, parse_options_header parsed Content-Disposition (and Content-Type) headers with email.message.Message, which transparently applies RFC 2231/5987 decoding. The extended parameter syntax (filename*=charset'lang'value, name*=..., and the filename*0/filename*1 continuation form) is decoded and surfaced under the bare filename/name key, and overrides the plain parameter when both are present. RFC 7578 §4.2 explicitly forbids the filename* form in multipart/form-data. Components that follow RFC 7578, or that do not implement RFC 2231/5987 decoding for multipart/form-data (WAFs, proxies, gateways), may interpret such a header differently. An attacker can exploit that difference to smuggle a different field name or filename past an upstream inspector to the backend. This vulnerability is fixed in 0.0.30.
📍 영향받는 시스템
Python-Multipart 버전 0.0.30 미만
⚔️ 공격 벡터
RFC 7578에서 금지된 filename* 형식을 사용하여 보안 장비와 백엔드 간의 해석 차이를 유도하는 HTTP 요청 전송
🛡️ 대응 방법
Python-Multipart 라이브러리를 0.0.30 버전 이상으로 업데이트
🔧 검증 코드
출력된 버전이 0.0.30 미만이면 취약한 상태이며, 0.0.30 이상이면 안전합니다.
pip show python-multipart | grep Version