CVE-2026-54236: vLLM: heap address leak enables ASLR bypass
GHSA-hgg8-fqqc-vfmw MEDIUM NUCLEI TEMPLATE CISA: TRACK*CVE-2026-54236 is an incomplete fix for the parent RCE chain CVE-2026-22778: vLLM's Anthropic API router and realtime speech-to-text WebSocket echo raw PIL exception messages — including heap object addresses — directly to callers because those routes catch exceptions internally, bypassing the global sanitizing handler added in the original patch. This leaks the documented Stage 1 primitive of a two-stage exploit that chains this address disclosure with a libopenjp2 heap overflow for remote code execution; the attack requires no authentication and only a single malformed image payload against any exposed /v1/messages endpoint. With 130 downstream dependents and an EPSS percentile in the top 5%, exposure is broad despite no confirmed active exploitation at publication time. Teams running vLLM ≤0.23.0 should prioritize applying the fix from PR #45119 immediately; as an interim measure, wrap str(e) with sanitize_message() at the five identified code sites and monitor for HTTP 500 responses containing hex address patterns in error bodies.
What is the risk?
Standalone CVSS 5.3 understates the chained risk profile. This is the documented Stage 1 primitive that reduces ASLR entropy from approximately 4 billion candidates to 8, directly enabling the libopenjp2 heap overflow RCE from the parent CVE. The attack surface is unauthenticated, network-accessible, and low-complexity — a single malformed JPEG or PNG in a multimodal API request triggers the address leak. Five separate code paths across HTTP and WebSocket transports are affected, introduced over a four-month window without the fix being applied, indicating a systemic gap in the project's patch propagation process. No active KEV listing or public PoC beyond the researcher's controlled reproduction, keeping near-term exploitation risk moderate but elevated for inference servers with external exposure.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| vLLM | pip | <= 0.23.0 | 0.24.0 |
Do you use vLLM? You're affected.
How severe is it?
What is the attack surface?
What should I do?
5 steps-
Patch: Apply vLLM PR #45119 (commit 94923629) as soon as available in a tagged release.
-
Immediate workaround: In api_router.py lines 78 and 124, serving.py line 808, and connection.py lines 75 and 265, replace str(e) with sanitize_message(str(e)), importing sanitize_message from vllm.entrypoints.utils.
-
Strengthen the sanitize_message regex from the narrow pattern ' at 0x[0-9a-f]+>' to the broader '\b0x[0-9a-fA-F]{6,}\b' to capture future non-standard repr formats.
-
Network controls: If the Anthropic API router is not required externally, restrict /v1/messages and /v1/messages/count_tokens to trusted internal networks.
-
Detection: Alert on HTTP 500 responses or WebSocket error frames from vLLM containing 0x[0-9a-fA-F]{6,} patterns in the body; correlate with repeated multimodal requests from a single source IP.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-54236?
CVE-2026-54236 is an incomplete fix for the parent RCE chain CVE-2026-22778: vLLM's Anthropic API router and realtime speech-to-text WebSocket echo raw PIL exception messages — including heap object addresses — directly to callers because those routes catch exceptions internally, bypassing the global sanitizing handler added in the original patch. This leaks the documented Stage 1 primitive of a two-stage exploit that chains this address disclosure with a libopenjp2 heap overflow for remote code execution; the attack requires no authentication and only a single malformed image payload against any exposed /v1/messages endpoint. With 130 downstream dependents and an EPSS percentile in the top 5%, exposure is broad despite no confirmed active exploitation at publication time. Teams running vLLM ≤0.23.0 should prioritize applying the fix from PR #45119 immediately; as an interim measure, wrap str(e) with sanitize_message() at the five identified code sites and monitor for HTTP 500 responses containing hex address patterns in error bodies.
Is CVE-2026-54236 actively exploited?
No confirmed active exploitation of CVE-2026-54236 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-54236?
1. Patch: Apply vLLM PR #45119 (commit 94923629) as soon as available in a tagged release. 2. Immediate workaround: In api_router.py lines 78 and 124, serving.py line 808, and connection.py lines 75 and 265, replace str(e) with sanitize_message(str(e)), importing sanitize_message from vllm.entrypoints.utils. 3. Strengthen the sanitize_message regex from the narrow pattern ' at 0x[0-9a-f]+>' to the broader '\b0x[0-9a-fA-F]{6,}\b' to capture future non-standard repr formats. 4. Network controls: If the Anthropic API router is not required externally, restrict /v1/messages and /v1/messages/count_tokens to trusted internal networks. 5. Detection: Alert on HTTP 500 responses or WebSocket error frames from vLLM containing 0x[0-9a-fA-F]{6,} patterns in the body; correlate with repeated multimodal requests from a single source IP.
What systems are affected by CVE-2026-54236?
This vulnerability affects the following AI/ML architecture patterns: LLM inference servers, multimodal AI pipelines, model serving, real-time speech AI services.
What is the CVSS score for CVE-2026-54236?
CVE-2026-54236 has a CVSS v3.1 base score of 5.3 (MEDIUM). The EPSS exploitation probability is 0.82%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0040 AI Model Inference API Access AML.T0049 Exploit Public-Facing Application AML.T0107 Exploitation for Defense Evasion Compliance Controls Affected
What are the technical details?
Original Advisory
vLLM is an inference and serving engine for large language models (LLMs). Prior to 0.23.1rc0, the fix for CVE-2026-22778, which introduced a sanitize_message helper that strips object-repr memory addresses from error messages before they reach the client, is incomplete: several response paths echo str(exc) directly to clients without calling sanitize_message. The unsanitized sites include the Anthropic API router in vllm/entrypoints/anthropic/api_router.py (the POST /v1/messages and POST /v1/messages/count_tokens handlers), the Server-Sent Events streaming converter in vllm/entrypoints/anthropic/serving.py, and the realtime speech-to-text WebSocket in vllm/entrypoints/speech_to_text/realtime/connection.py. These paths catch the exception inside the route coroutine and construct the JSONResponse themselves, bypassing the sanitizing global FastAPI exception handler, and WebSocket frames do not traverse that handler chain at all. Using the same primitive as the parent issue, an unauthenticated attacker can send malformed image bytes through the Anthropic Messages API image content parts so that PIL.Image.open raises an UnidentifiedImageError whose message contains the BytesIO object repr, leaking the heap memory address verbatim in the error.message field of the response body. This vulnerability is fixed in 0.23.1rc0.
Exploitation Scenario
An attacker targeting an organization's vLLM-powered Anthropic-compatible inference endpoint constructs a POST to /v1/messages containing a valid request body with an image content part bearing base64-encoded malformed bytes — for example, a truncated JPEG with an invalid header. The vLLM multimodal handler passes the payload to PIL's Image.open(), which raises UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0x7a95e299e750>. The Anthropic router's internal exception catch at api_router.py:75 returns this message verbatim in the JSON response field error.message, bypassing the global sanitizing handler. The attacker parses the hex address, maps the heap layout of the vLLM process, and uses this to calibrate offsets for a follow-on libopenjp2 heap overflow — completing the two-stage RCE chain from the parent CVE. The same primitive is reachable via the count_tokens endpoint and the speech-to-text WebSocket with analogous malformed payloads, providing multiple redundant channels for the leak.
Weaknesses (CWE)
CWE-532 Insertion of Sensitive Information into Log File
Primary
CWE-532 Insertion of Sensitive Information into Log File
Primary
CWE-532 Insertion of Sensitive Information into Log File CWE-532 — Insertion of Sensitive Information into Log File: The product writes sensitive information to a log file.
- [Architecture and Design, Implementation] Consider seriously the sensitivity of the information written into log files. Do not write secrets into the log files.
- [Distribution] Remove debug log files before deploying the application into production.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N References
- github.com/advisories/GHSA-hgg8-fqqc-vfmw
- github.com/pypa/advisory-database/tree/main/vulns/vllm/PYSEC-2026-3408.yaml
- github.com/vllm-project/vllm
- github.com/vllm-project/vllm/commit/94923629729381d7f7c9efde72071a2441f7fd82
- github.com/vllm-project/vllm/pull/45119
- github.com/vllm-project/vllm/security/advisories/GHSA-hgg8-fqqc-vfmw
- nvd.nist.gov/vuln/detail/CVE-2026-54236
- pypi.org/project/vllm
Timeline
Scanner Template Available
A Nuclei vulnerability scanner template exists for this CVE. You can scan your infrastructure for this vulnerability immediately.
View template on GitHubnuclei -t http/cves/2026/CVE-2026-54236.yaml -u https://target.example.com Related Vulnerabilities
CVE-2024-9053 9.8 vllm: RCE via unsafe pickle deserialization in RPC server
Same package: vllm CVE-2024-11041 9.8 vllm: RCE via unsafe pickle deserialization in MessageQueue
Same package: vllm CVE-2026-25960 9.8 vllm: SSRF allows internal network access
Same package: vllm CVE-2025-47277 9.8 vLLM: RCE via exposed TCPStore in distributed inference
Same package: vllm CVE-2025-32444 9.8 vLLM: RCE via pickle deserialization on ZeroMQ
Same package: vllm