🇰🇷 한글 설명
Waitress 2.1.0 및 이전 버전에서 발생하는 HTTP 요청 스머글링 취약점입니다. 프록시 서버와 Waitress 간의 HTTP 요청 해석 방식 차이로 인해, 공격자가 조작된 요청을 숨겨서 전달할 수 있습니다. 이는 Python의 정수 변환 방식 오류와 청크 확장(chunk extensions) 처리 미흡에서 기인합니다.
💡 쉬운 설명
웹 서버 앞의 전달자(프록시)와 실제 서버가 서로 다른 방식으로 데이터를 읽어 발생하는 문제입니다. 공격자가 정상적인 요청 사이에 몰래 다른 명령을 끼워 넣어 서버를 속일 수 있습니다.
🇺🇸 원문 (English)
Waitress is a Web Server Gateway Interface server for Python 2 and 3. When using Waitress versions 2.1.0 and prior behind a proxy that does not properly validate the incoming HTTP request matches the RFC7230 standard, Waitress and the frontend proxy may disagree on where one request starts and where it ends. This would allow requests to be smuggled via the front-end proxy to waitress and later behavior. There are two classes of vulnerability that may lead to request smuggling that are addressed by this advisory: The use of Python's `int()` to parse strings into integers, leading to `+10` to be parsed as `10`, or `0x01` to be parsed as `1`, where as the standard specifies that the string should contain only digits or hex digits; and Waitress does not support chunk extensions, however it was discarding them without validating that they did not contain illegal characters. This vulnerability has been patched in Waitress 2.1.1. A workaround is available. When deploying a proxy in front of waitress, turning on any and all functionality to make sure that the request matches the RFC7230 standard. Certain proxy servers may not have this functionality though and users are encouraged to upgrade to the latest version of waitress instead.
📍 영향받는 시스템
Waitress 2.1.0 및 그 이전 버전
⚔️ 공격 벡터
RFC7230 표준을 준수하지 않는 프록시 환경에서 조작된 HTTP 요청을 통한 HTTP Request Smuggling
🛡️ 대응 방법
Waitress를 2.1.1 이상의 최신 버전으로 업그레이드하거나, 프록시 서버에서 RFC7230 표준 검증 기능을 활성화합니다.
🔧 검증 코드
출력된 버전이 2.1.0 이하이면 취약한 상태이며, 2.1.1 이상이면 안전합니다.
pip show waitress | grep Version