vLLM CVE-2026-54233
MEDIUMSeverity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
vLLM enforces no native authentication; advisory explicitly states unauthenticated access, warranting PR:N over the official PR:L; impact is pure availability with no confidentiality or integrity effect.
Primary rating from Vendor (https://github.com/vllm-project/vllm).
CVSS VectorVendor: https://github.com/vllm-project/vllm
Lifecycle Timeline
2Blast Radius
ecosystem impact- 2 pypi packages depend on vllm (2 direct, 0 indirect)
Ecosystem-wide dependent count for version 0.23.0.
DescriptionCVE.org
Summary
vLLM's /v1/audio/transcriptions endpoint limits compressed upload size but not decoded PCM output. A 25MB OPUS file expands to ~14.9GB of float32 PCM at decode time. Tested on vLLM v0.19.0.
Details
SpeechToTextProcessor rejects uploads over VLLM_MAX_AUDIO_CLIP_FILESIZE_MB (default 25MB) based on compressed byte length, but the audio decoder in audio.py accumulates all decoded frames into memory with no size limit before returning:
# speech_to_text.py L184-189
if len(audio_data) / 1024 ** 2 > self.max_audio_filesize_mb:
raise VLLMValidationError(...)
y, sr = load_audio(buf, sr=self.asr_config.sample_rate)
# decoded size unchecked
# audio.py L77-107
chunks: list[npt.NDArray] = []
for frame in container.decode(stream):
chunks.append(frame.to_ndarray())
audio = np.concatenate(chunks, axis=-1).astype(np.float32)
# single contiguous allocationA 25MB OPUS file at 6kbps encodes ~8.7 hours of audio. Decoding produces ~5.7GB of float32 PCM (232x amplification), and np.concatenate then allocates a second contiguous array, bringing peak RSS to ~14.9GB from a single request. SpeechToTextConfig.max_audio_clip_s (default 30s) applies only after the full decode and does not prevent the allocation.
Impact
An unauthenticated attacker can exhaust server memory with a small number of concurrent requests, each a valid upload within the documented size limit. Severity was assessed with reference to prior OOM vulnerability reports in vLLM.
Fix
A fix for this vulnerability was merged here: https://github.com/vllm-project/vllm/pull/44970
AnalysisAI
Memory exhaustion via audio decompression bomb in vLLM's /v1/audio/transcriptions endpoint allows a remote attacker to crash or severely degrade the inference server by uploading a crafted OPUS file that passes the 25MB compressed-size check but decodes to ~14.9GB of float32 PCM in memory. Affected are vLLM installations through v0.23.0 with speech-to-text (ASR) functionality enabled. No public exploit code has been identified at time of analysis and the vulnerability is not listed in CISA KEV; however, the attack methodology is fully detailed in GitHub Security Advisory GHSA-6pr9-rp53-2pmc, making independent reproduction trivial. The official CVSS PR:L rating conflicts with the advisory's explicit claim of unauthenticated exploitation - security teams should audit whether their deployment enforces authentication on the audio endpoint.
Technical ContextAI
CWE-409 (Improper Handling of Highly Compressed Data - Decompression Bomb) is the root cause. The affected package is pip/vllm <= 0.23.0. The SpeechToTextProcessor in speech_to_text.py correctly rejects uploads exceeding VLLM_MAX_AUDIO_CLIP_FILESIZE_MB (default 25MB) by checking the compressed byte length before decoding. However, load_audio() in vllm/multimodal/media/audio.py uses PyAV's container.decode(stream) in a loop, appending each decoded frame's NumPy array to a Python list, then calls np.concatenate() on the entire list - this allocates a second, contiguous array, doubling peak RSS. The SpeechToTextConfig.max_audio_clip_s duration guard (default 30s) is applied only after full decode, providing no memory protection. OPUS at 6kbps achieves a ~232x decompression ratio: a 25MB file encodes ~8.7 hours of audio, yielding ~5.7GB of decoded PCM frames plus ~9.2GB for the concatenation step, totalling ~14.9GB peak RSS from a single API request.
RemediationAI
Upgrade to vLLM v0.23.1rc0 or a subsequent GA release that incorporates PR #44970 (https://github.com/vllm-project/vllm/pull/44970, commit 1b1359c33269446f13c05da9a90c25174cbea590). The fix introduces the VLLM_MAX_AUDIO_DECODE_DURATION_S environment variable (default 600 seconds) enforced during decode in both the PyAV and soundfile backends - rejection occurs before full memory allocation, either from container metadata inspection or per-frame sample counting, preventing the decompression bomb. Note that v0.23.1rc0 is a release candidate; monitor the vLLM releases page at https://github.com/vllm-project/vllm/releases for the GA version before deploying to production. If patching is not immediately possible, restrict network access to the /v1/audio/transcriptions endpoint via reverse proxy ACL or firewall rules to trusted, authenticated clients only - this is the most effective compensating control but requires deployment changes. Reducing VLLM_MAX_AUDIO_CLIP_FILESIZE_MB to a smaller value (e.g., 1MB) decreases the maximum decompression amplification per request but does not eliminate the vulnerability. Rate-limiting uploads per source IP can slow a sequential attack but does not prevent a burst of concurrent requests.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
Same technique Information Disclosure
View allVendor StatusVendor
Share
External POC / Exploit Code
Leaving vuln.today
GHSA-6pr9-rp53-2pmc