🇰🇷 한글 설명
Autobahn Python은 Twisted와 asyncio를 지원하는 WebSocket 및 WAMP 구현체입니다. 26.7.1부터 26.10.1 이전 버전에서는 permessage-brotli 기능의 압축 해제 시 출력 크기 제한이 없고, 전체 프레임을 해제한 후에야 maxMessagePayloadSize를 검사하여 메모리 고갈형 서비스 거부(DoS) 공격에 취약합니다. 이 문제는 26.10.1 버전에서 수정되었습니다.
💡 쉬운 설명
인증되지 않은 공격자가 작은 크기의 고압축 WebSocket 메시지를 보내면 서버가 수백 MB의 메모리를 할당해 서비스가 중단될 수 있습니다. compress 옵션으로 permessage-brotli 기능을 켠 서버만 영향을 받습니다.
🇺🇸 원문 (English)
Autobahn Python is a WebSocket and WAMP implementation for Python that supports Twisted and asyncio. From 26.7.1 until 26.10.1, PerMessageBrotli.decompress_message_data in compress_brotli.py calls the Brotli decompressor without an output limit and checks maxMessagePayloadSize only after a complete frame has been inflated. An unauthenticated WebSocket client can send a small, highly compressed frame that allocates hundreds of MiB before rejection, causing memory-exhaustion denial of service on servers that enable the opt-in permessage-brotli feature through the compress extra. Deflate and bzip2 already enforce the remaining output budget and are outside this residual vulnerability. This issue is fixed in version 26.10.1.
📍 영향받는 시스템
Autobahn Python 26.7.1 이상 26.10.1 미만 버전이며, compress extra로 permessage-brotli를 활성화한 서버
⚔️ 공격 벡터
인증 없이 WebSocket 클라이언트가 작고 고압축된 Brotli 프레임을 전송해 서버의 압축 해제 시 메모리를 과도하게 소모하도록 유도
🛡️ 대응 방법
Autobahn Python을 26.10.1 이상으로 업그레이드하거나, 필요하지 않다면 permessage-brotli 기능을 비활성화
🔧 검증 코드
출력된 버전이 26.7.1 이상 26.10.1 미만이면 취약하며, 26.10.1 이상이면 수정된 버전입니다. 명령 결과가 없으면 autobahn이 설치되지 않은 것입니다.
pip show autobahn 2>/dev/null | grep -i '^version'