Skip to content
vLLMGHSA-hcwq-8wjf-3gcr

vLLM: Unauthenticated audio decompression-bomb DoS in /v1/chat/completions

Medium6.5CVE-2026-57173 · Published Sep 16, 2026

### 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: ```python # .../s...

GitHub advisory

Affected versions

PackageAffectedFixed in
vllm
PyPI
< 0.24.00.24.0
Details and references

### 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: ```python # .../speech_to_text/base/serving.py:~170-174 load_audio(buf, sr=..., max_duration_s=self.max_audio_decode_duration_s) # self.max_audio_decode_duration_s = envs.VLLM_MAX_AUDIO_DECODE_DURATION_S (default 600) ``` The chat path never threads it: ```python # vllm/multimodal/media/audio.py:237-238 def load_bytes(self, data: bytes) -> tuple[npt.NDArray, float]: return load_audio(BytesIO(data), sr=None) # no max_duration_s -> every guard above is skipped ``` Unauthenticated 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

CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Severity from
GitHub (reviewed advisory)
Weakness
CWE-770
Also known as
CVE-2026-57173

More vLLM advisories

All vLLM
Advisory
vLLM: Request-selected PyNvVideoCodec GPU decode bypasses static VRAM reservation
Medium6.5Sep 17
vLLM: remote code execution
High7.8Sep 12
vLLM: server-side request forgery
Medium6.5Sep 8
vLLM: Cross-User Data Leak Vulnerability
Medium5.3Sep 8
vLLM: Incomplete CVE-2025-62164 remediation can be bypassed by concurrent prompt parts
MediumSep 4
vLLM: denial of service
Medium5.3Sep 4

Critical advisories by email

Wednesdays: the week’s critical and high advisories in the AI and data stack, with the fixed versions. Only in weeks that have some.

Double opt-in. Unsubscribe any time.