CVE-2026-57173: vLLM: Unauthenticated audio decompression-bomb DoS in /v1/chat/completions
vLLM 0.23.0 and earlier has no audio length limit on the chat path. A client can post a few-KB compressed audio file to `/v1/chat/completions` that expands to gigabytes of PCM data at decode time and kills the worker with an out-of-memory error. Upgrade to vLLM 0.24.0.
Published Sep 16, 2026 · Analysis Oct 23, 2026
What an attacker can do
vLLM has a decode guard, max_duration_s, set from VLLM_MAX_AUDIO_DECODE_DURATION_S with a default of 600 seconds. It rejects long audio during decode, before memory is allocated. The code passes it in only one place: the speech-to-text serving layer for /v1/audio/transcriptions.
The chat path never passes it. An input_audio content part goes through parse_input_audio, connector.fetch_audio, AudioMediaIO._load_data_url, load_base64 and load_bytes, which calls load_audio(BytesIO(data), sr=None). With no limit set, every length check in load_audio_pyav and load_audio_soundfile is skipped. Inline data: URLs need no HTTP fetch, so VLLM_AUDIO_FETCH_TIMEOUT does not help either.
The attacker sends one small, highly compressed audio file as a base64 input_audio part. It decodes into float32 samples that take several GB, and the worker is OOM-killed. The OpenAI-compatible server has no authentication unless --api-key or VLLM_API_KEY is set, so the advisory calls it unauthenticated. The CVSS vector lists low privileges. Any deployment serving an audio-capable model is affected. The advisory names two sibling bugs in the same media code, for video frames and for images.
Who is affected
Affected: vllm 0.23.0 and earlier, on servers that run an audio-capable model behind /v1/chat/completions. Servers without such a model do not decode audio. Check the version:
pip show vllmThe speech-to-text endpoint already had the guard.
vllm
- Ecosystem
- PyPI
- Affected
- <= 0.23.0
- Fixed in
- 0.24.0
- Check
pip show vllm
How to fix it
Upgrade to vLLM 0.24.0.
pip install --upgrade "vllm>=0.24.0"The fix is pull request 45908. The sources list no workaround. Until you upgrade, set an API key with --api-key or VLLM_API_KEY and keep the server off untrusted networks, or limit request body size in a proxy in front of it.
How to tell if you were hit
Look for worker or engine processes killed by the out-of-memory killer, or for container restarts, right after a chat completion request that contained an input_audio part. In request logs, look for small bodies with base64 audio from a single client that precede memory spikes. A body of a few KB with a memory jump of GBs points to the attack.
Original advisory
From the GitHub Advisory Database (CC BY 4.0).
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:
# .../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:
# 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 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
Credited to koonnamchok, DarkLight1337, jperezdealgaba.
Questions
- Does the 600-second audio limit protect the chat endpoint?
No.
VLLM_MAX_AUDIO_DECODE_DURATION_Sis applied only on the transcription path. The chat path calls the decoder with no limit in 0.23.0 and earlier.- Do I need an API key to exploit CVE-2026-57173?
Not on a default server. Authentication applies only when
--api-keyorVLLM_API_KEYis set. With a key set, the attacker needs a valid key, which fits the low-privilege CVSS rating.- Is it exploited in the wild?
No source reports exploitation and it is not in CISA's KEV catalog.
References
How this page is made: the data panel comes from the GitHub Advisory Database, CISA’s KEV catalog, the NVD and FIRST EPSS, and updates twice a day. The analysis is written by an AI model from the sources listed above and checked by automated rules before it is published. Check versions against the vendor's advisory before you act. Methodology
More vLLM vulnerabilities
All vLLM entriesCVE-2026-114050
vLLM: Forged multimodal UUID + P0/P1 processor-cache eviction drift: unauthenticated remote crash of the whole vLLM engine
medium6.5Oct 23, 2026CVE-2026-114055
vLLM : DoS via unvalidated mm_processor_kwargs in multimodal image processors (Isaac, InternVL, H2OVL, etc.)
high7.5Oct 23, 2026CVE-2026-105752
vLLM: Harmony tool continuations drop `cache_salt` — restoring a cross-tenant prefix-cache membership oracle
low3.1Oct 6, 2026CVE-2026-105753
vLLM: Mirrored multimodal IPC caches desync after a rejected request — a later request reusing the same media hash trips a receiver assertion in the engine core
medium6.5Oct 6, 2026CVE-2026-105754
vLLM: Scale-out disaggregated multimodal transport trusts caller-supplied features
medium6.5Oct 5, 2026CVE-2026-105755
vLLM: Flash late-interaction scoring caches query embeddings under a caller-controlled request id — cross-request integrity break and induced errors on `/score` and `/rerank`
medium4.2Oct 5, 2026
