NewApp Monitoring is liveSign up free
AgentbeamBeta
AI agent vulnerability · vLLM

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

mediumCVSS 3.1 6.5GHSA-hcwq-8wjf-3gcr

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 vllm

The 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 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

Credited to koonnamchok, DarkLight1337, jperezdealgaba.

Questions

Does the 600-second audio limit protect the chat endpoint?

No. VLLM_MAX_AUDIO_DECODE_DURATION_S is 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-key or VLLM_API_KEY is 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 entries