vLLM: Unauthenticated audio decompression-bomb DoS in /v1/chat/completions
위협 신호 · CVSS · EPSS · KEV
이론적 심각도 점수
예측 데이터 없음
실측 악용 기록 없음
계획된 패치 주기 내 조치(60일 이내)
CVSS 벡터 · 메트릭
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H상세 설명
Summary
The audio decode-duration guard (max_duration_s, env VLLM_MAX_AUDIO_DECODE_DURATION_S, default 600s) that protects against audio decompression-bomb DoS is wired into only the speech-to-text path (/v1/audio/transcriptions). The chat audio path (/v1/chat/completions, input_audio content parts) calls the same decoder with no limit, so an unauthenticated client can submit a few-KB compressed audio file that expands to multiple GB of float32 PCM at decode time, OOM-killing the worker. This is a distinct sibling of CVE-2026-5497 (video frame-count bomb, VideoMediaIO.load_base64) and GHSA-pq5c-rjhq-qp7p (image) in the same media subsystem.
Verified against main at HEAD d78650c (2026-06-16); applicable to the latest release v0.23.0.
Details
The guard rejects long audio during decode (before allocation), implemented in vllm/multimodal/media/audio.py:
load_audio_pyav— metadata reject (~82-98) and live sample-count reject (~129-136)load_audio_soundfile— frames reject (~165-174)
All are gated on if max_duration_s is not None.
It is passed in exactly one place — the transcription serving layer:
1# .../speech_to_text/base/serving.py:~170-174 2load_audio(buf, sr=..., max_duration_s=self.max_audio_decode_duration_s) 3# self.max_audio_decode_duration_s = envs.VLLM_MAX_AUDIO_DECODE_DURATION_S (default 600)The chat path never threads it:
1# vllm/multimodal/media/audio.py:237-238 2def load_bytes(self, data: bytes) -> tuple[npt.NDArray, float]: 3 return load_audio(BytesIO(data), sr=None) # no max_duration_s -> every guard above is skippedUnauthenticated reachability chain (chat):
parse_input_audio (chat_utils.py) -> parse_audio -> connector.fetch_audio -> AudioMediaIO._load_data_url -> load_base64 -> load_bytes -> load_audio(..., sr=None). The connector never passes max_duration_s, and inline data: URLs need no HTTP fetch (so VLLM_AUDIO_FETCH_TIMEOUT does not bound them). The OpenAI-compatible server has no auth by default (auth only when --api-key / VLLM_API_KEY is set).
Impact
Unauthenticated remote denial of service (availability) via memory amplification on a default-no-auth endpoint, on any deployment serving an audio-capable model. Same class and impact as the sibling CVE-2026-5497 (video). CWE-770 / CWE-409.
Fix
A fix was introduced in this MR: https://github.com/vllm-project/vllm/pull/45908
AI 심층 분석
공격 시나리오 · 재현 가능한 PoC 페이로드 · 즉시 적용 가능한 차단 패치를 한 번에 받아 보세요. 보안 운영팀이 그대로 점검·티켓팅에 쓸 수 있는 형태로 정리해 드립니다.
참고 자료 6
링크 내용 불러오는 중…