← All advisories
CVE-2026-116176highSSRF & network2026-10-25

CVE-2026-116176: vLLM fixes an SSRF that can leak KV-cache tensors, plus three ways to crash a shared server

Four vLLM CVEs were published on 25 October 2026. The worst lets an API caller put an attacker's host in the X-Request-Id header so a P2pNcclConnector prefill worker connects out and sends that request's KV-cache tensors to it. The other three let a client crash or OOM-kill a shared vLLM server. Upgrading to vLLM 0.31.0 covers all four.

01.

What it is

CVE-2026-116176 (GHSA-vfp2-c8pq-v6h6, SSRF): vLLM copies the X-Request-Id header verbatim into the internal request id, and P2pNcclConnector pulls a host:port out of it with no allow-list. A caller can make a prefill worker ZMQ-connect to an attacker host, share the NCCL unique_id and send the request's KV-cache tensors there, or block the worker. Only deployments running P2pNcclConnector as a kv_producer are affected; vLLM 0.9.2 up to 0.24.0.

CVE-2026-116180 (GHSA-rhcx-5729-88vg, cross-tenant crash): LogprobsTensors.empty_cpu() leaves a tensor uninitialized, and positions a KV connector reports as already computed are never written. One request with prompt_logprobs (or echo plus logprobs) against a connector-cached prefix makes tokenizer decode raise OverflowError, which kills EngineCore and drops every co-tenant request. Affects V1 engines using connectors such as LMCacheConnectorV1 or NixlConnector; vLLM 0.8.5 up to 0.31.0.

CVE-2026-116179 (GHSA-4m6g-h9mv-wqjc, memory exhaustion): a client could override num_frames through media_io_kwargs, set it to -1 and make the API frontend decode every frame of a large inline video/jpeg payload, exhausting memory. vLLM 0.18.0 up to 0.31.0. The fix rejects per-request media_io_kwargs unless the server is started with --trust-request-mm-kwargs.

CVE-2026-116177 (GHSA-mm38-5g96-7j6x, decompression bomb): the Nemotron-VL processors set Pillow's Image.MAX_IMAGE_PIXELS to None for the whole process, so an unauthenticated caller of /v1/chat/completions can send a decompression-bomb image and OOM-kill the worker. NVD lists vLLM 0.10.2 up to 0.25.0; the GitHub advisory says it was confirmed on 0.8.5. The fix adds a pixel limit configurable with VLLM_MAX_IMAGE_PIXELS.

02.

How to check

  1. Affected: vllm (PyPI) before 0.31.0 for the two crash bugs, before 0.24.0 for the SSRF and before 0.25.0 for the decompression bomb (version ranges above).
  2. You are most exposed if several users or tenants share one vLLM server, if you use disaggregated prefill with a KV connector (P2pNcclConnector, LMCache, Nixl), or if you serve multimodal (video or Nemotron-VL) models.
03.

How to fix

  1. Upgrade vllm to 0.31.0 or later.
  2. Until then, don't let untrusted clients set X-Request-Id or media_io_kwargs (strip them at your proxy), keep API keys on, and don't share one engine between tenants you don't trust.
pip show vllm | grep -i version
04.

Sources

More advisories for this tool
The weekly email

One email a week. Only what changed.

Every new security hole in AI coding tools, MCP servers, app builders and the stacks they generate (Next.js, Supabase, Node, PHP), each with how to check your app and the fix. No roundups of things you already read.

Free, one email a week. Read the latest issue first if you like. One-click unsubscribe in every email. We never sell or share addresses.