mtrudel bandit의 제한 없는 리소스 할당 또는 조절 취약점으로 인해 WebSocket permessage-deflate 압축이 활성화된 경우 메모리 고갈을 통해 인증되지 않은 원격 서비스 거부가 허용됩니다. lib/bandit/websocket/permessage_deflate.ex의 'Elixir.Bandit.WebSocket.PerMessageDeflate':inflate/2는 출력 크기 제한 없이 :zlib.inflate/2를 호출한 다음 IO.iodata_to_binary/1을 통해 압축 해제된 전체 페이로드를 단일 바이너리로 구체화합니다. websocket_options.max_frame_size 옵션
mtrudel bandit의 제한 없는 리소스 할당 또는 조절 취약점으로 인해 WebSocket permessage-deflate 압축이 활성화된 경우 메모리 고갈을 통해 인증되지 않은 원격 서비스 거부가 허용됩니다.
lib/bandit/websocket/permessage_deflate.ex의 'Elixir.Bandit.WebSocket.PerMessageDeflate':inflate/2는 출력 크기 제한 없이 :zlib.inflate/2를 호출한 다음 IO.iodata_to_binary/1을 통해 압축 해제된 전체 페이로드를 단일 바이너리로 구체화합니다. websocket_options.max_frame_size 옵션은 압축 해제된 출력이 아닌 실시간(압축) 프레임 크기만 제한합니다. 높은 비율로 압축된 프레임(예: ~1024:1 비율의 균일한 데이터)은 애플리케이션 코드가 실행되기 전에 연결 프로세스에서 GiB 규모의 힙 할당을 강제하는 동시에 모든 와이어 크기 제한 아래에서 잘 유지될 수 있습니다.
WebSocket 연결을 열 수 있는 인증되지 않은 공격자는 이러한 단일 프레임을 보내 BEAM 노드의 메모리를 소진하고 OOM 종료를 트리거할 수 있습니다.
이 취약점을 사용하려면 Bandit의 서버 수준 websocket_options.compress와 WebSockAdapter.upgrade/4에 전달된 업그레이드별 압축: true 옵션이 모두 활성화되어야 합니다. Stock Phoenix 및 LiveView 애플리케이션은 기본적으로 압축: false이므로 영향을 받지 않습니다.
이 문제는 bandit(0.5.9부터 1.11.0까지)에 영향을 미칩니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 82.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 82.00 |
VPI 공식 vpi-v1 기준