{"basis":"claimed","id":"CVE-2026-22778","name":"vLLM leaks a heap address when PIL throws an error","vendorProject":"vllm-project","product":"vllm","publishedAt":"2026-02-02","cvss":{"score":9.8,"severity":"CRITICAL","version":"3.1"},"exploited":null,"epss":{"score":0.18287,"percentile":0.9722,"date":"2026-11-02"},"coverage":{"cloudflare":{"status":"none","firstOn":null,"daysToRule":null},"aws":{"status":"none","firstOn":null,"daysToRule":null},"azure":{"status":"none","firstOn":null,"daysToRule":null},"google":{"status":"none","firstOn":null,"daysToRule":null},"fastly":{"status":"no_history","firstOn":null,"daysToRule":null},"f5":{"status":"rule","firstOn":"2026-09-16","daysToRule":226},"akamai":{"status":"no_source","firstOn":null,"daysToRule":null},"crs":{"status":"none","firstOn":null,"daysToRule":null}},"title":"vLLM leaks a heap address when PIL throws an error","description":"vLLM is an inference and serving engine for large language models (LLMs). From 0.8.3 to before 0.14.1, when an invalid image is sent to vLLM's multimodal endpoint, PIL throws an error. vLLM returns this error to the client, leaking a heap address. With this leak, we reduce ASLR from 4 billion guesses to ~8 guesses. This vulnerability can be chained a heap overflow with JPEG2000 decoder in OpenCV/FFmpeg to achieve remote code execution. This vulnerability is fixed in 0.14.1.","cwes":["CWE-532"],"vendors":[{"vendor":"cloudflare","status":"none","basis":"claimed","firstOn":null,"firstIsNew":false,"daysToRule":null,"daysAtMost":null,"freePlan":false,"claims":[]},{"vendor":"aws","status":"none","basis":"claimed","firstOn":null,"firstIsNew":false,"daysToRule":null,"daysAtMost":null,"freePlan":false,"claims":[]},{"vendor":"azure","status":"none","basis":"claimed","firstOn":null,"firstIsNew":false,"daysToRule":null,"daysAtMost":null,"freePlan":false,"claims":[]},{"vendor":"google","status":"none","basis":"claimed","firstOn":null,"firstIsNew":false,"daysToRule":null,"daysAtMost":null,"freePlan":false,"claims":[]},{"vendor":"fastly","status":"no_history","basis":"claimed","firstOn":null,"firstIsNew":false,"daysToRule":null,"daysAtMost":null,"freePlan":false,"claims":[]},{"vendor":"f5","status":"rule","basis":"claimed","firstOn":"2026-09-16","firstIsNew":true,"daysToRule":226,"daysAtMost":null,"freePlan":false,"claims":[{"id":"995ed2f858d8ef5e18b2088ae89919af9cb515346daca1200c86506974ba9dc6","cve_id":"CVE-2026-22778","vendor":"f5","product":"Attack signatures","rule_id":"200009381","rule_name":"vLLM Information Disclosure","change":"new","default_action":null,"published_on":"2026-09-16","source_url":"https://docs.cloud.f5.com/docs-v2/platform/changelogs/security-details-changelog","source_title":"F5 Distributed Cloud attack signatures changelog","excerpt":"Added: signature 200009381 \"vLLM Information Disclosure\" (Information Leakage, risk High), systems: Other Web Server. References: CVE-2026-22778.","first_seen_at":"2026-11-02T21:00:24.151Z"}]},{"vendor":"akamai","status":"no_source","basis":"claimed","firstOn":null,"firstIsNew":false,"daysToRule":null,"daysAtMost":null,"freePlan":false,"claims":[]},{"vendor":"crs","status":"none","basis":"claimed","firstOn":null,"firstIsNew":false,"daysToRule":null,"daysAtMost":null,"freePlan":false,"claims":[]}],"updatedAt":"2026-11-03T18:25:15.093Z","cvssVector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","ssvc":{"exploitation":"none","automatable":"yes","technicalImpact":"total"},"kevAction":null,"kevNotes":null,"references":[{"url":"https://github.com/vllm-project/vllm/security/advisories/GHSA-4r2x-xpjr-7cvv","name":null,"tags":["x_refsource_CONFIRM"]},{"url":"https://github.com/vllm-project/vllm/pull/31987","name":null,"tags":["x_refsource_MISC"]},{"url":"https://github.com/vllm-project/vllm/pull/32319","name":null,"tags":["x_refsource_MISC"]},{"url":"https://github.com/vllm-project/vllm/releases/tag/v0.14.1","name":null,"tags":["x_refsource_MISC"]}],"affected":[{"vendor":"vllm-project","product":"vllm","affected":[">= 0.8.3, < 0.14.1"],"fixed":[]}],"briefing":{"status":{"id":"action_required","label":"Action required"},"why":"It is reachable over the network without credentials or any user interaction (CVSS 9.8). A Metasploit module exists, so exploitation needs no custom work. EPSS ranks it in the top 3% of CVEs most likely to be exploited in the next 30 days. Exploitation in the wild is not established by CISA KEV.","who":"Teams running vllm-project vllm (>= 0.8.3, < 0.14.1). Prioritise internet-facing instances.","what_to_do":[{"text":"Apply the vendor's fix; the advisory lists the affected and fixed versions."},{"text":"Keep a WAF rule in place while you patch: F5 ships a rule you may need to switch on. A WAF rule reduces exposure; it does not replace the patch.","href":"#edge","linkText":"Edge coverage"},{"text":"Check which WAF sits in front of your site and whether it covers this CVE.","href":"#check","linkText":"Check your domain"}],"evidence":[{"heading":"CVE record","text":"CVSS 3.1 9.8 (critical). Weakness: CWE-532.","links":[{"label":"CVE-2026-22778","href":"https://www.cve.org/CVERecord?id=CVE-2026-22778"},{"label":"NVD","href":"https://nvd.nist.gov/vuln/detail/CVE-2026-22778"}]},{"heading":"Exploit evidence","text":"Metasploit has a module. A nuclei template exists, which our lab and benchmark replay.","links":[{"label":"Metasploit: vLLM Multimodal Heap-Address Information Leak Scanner","href":"https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/http/vllm_multimodal_info_leak.rb"}]},{"heading":"CISA KEV","text":"Not in the KEV catalog (catalog 2026.11.03, checked 2026-11-04). Absence from KEV is not evidence that it cannot be exploited.","links":[{"label":"CISA KEV catalog","href":"https://www.cisa.gov/known-exploited-vulnerabilities-catalog"}]},{"heading":"EPSS","text":"18.3% probability of exploitation activity in the next 30 days, higher than 97% of CVEs (2026-11-02).","links":[{"label":"FIRST EPSS","href":"https://api.first.org/data/v1/epss?cve=CVE-2026-22778"}]},{"heading":"WAF vendor statements","text":"F5 names it in a changelog. Quotes and dates below.","links":[{"label":"Vendor statements","href":"#evidence"}]}],"agent_prompt":"Assess whether the infrastructure available to you is affected by CVE-2026-22778 (vLLM leaks a heap address when PIL throws an error). Perform a read-only assessment within your authorized access. Do not send exploit traffic, scan third-party systems, change configuration or restart services.\n\n1. Verify the CVE record at https://www.cve.org/CVERecord?id=CVE-2026-22778 and the vendor advisory. Establish affected and fixed versions, including vendor backports. The record lists: vllm-project vllm: affected >= 0.8.3, < 0.14.1. Cite sources and retrieval dates; flag anything you cannot verify.\n2. Inventory deployments of vllm-project vllm: asset, environment, owner where known, installed version or build, and how you confirmed it (package metadata, a version endpoint, image tags). An image tag alone does not prove the running version.\n3. Identify which deployments are reachable from the internet or untrusted networks, and through which paths (direct origin, load balancer, CDN or WAF).\n4. Assess compensating controls separately from patch status. Current edge WAF coverage for this CVE: F5: rule exists, check whether it is enabled. Live data: https://cve.vigilbase.com/api/v1/cves/CVE-2026-22778. Check whether the rule is enabled and in block mode on each path, and whether any path bypasses the WAF. A WAF rule is not a patch.\n5. Check logs on exposed instances for requests matching the public exploit, if your access allows.\n\nReturn a short summary and a table: asset | version/build | assessment (affected, fixed, not applicable, unknown) | exposure | compensating control | evidence | next action. List what you could not assess and the access needed to resolve it. Do not infer absence of compromise from patch status or a lack of alerts.\n\nRemediation guidance: Apply the vendor's fix; the advisory lists the affected and fixed versions. Keep a WAF rule in place while you patch: F5 ships a rule you may need to switch on. A WAF rule reduces exposure; it does not replace the patch.\nMore: https://cve.vigilbase.com/cve/CVE-2026-22778"},"measured":[{"engineId":"owasp-crs","engineName":"OWASP Core Rule Set","engineVersion":"4.25.0","runtime":"Coraza v3.8.1","config":"paranoia level 1, anomaly threshold 5, default CRS settings","ranAt":"2026-11-02T13:02:57.000Z","verdict":"partial","templateId":"CVE-2026-22778","templatePath":"http/cves/2026/CVE-2026-22778.yaml","requests":2,"blockedRequests":1,"rules":["932235","932260","934170","941130","941170"],"note":"","requestDetail":[{"method":"GET","path":"/v1/models","status":200,"blocked":false,"rules":[]},{"method":"POST","path":"/v1/chat/completions","status":403,"blocked":true,"rules":["932235","932260","934170","941130","941170"]}]},{"engineId":"owasp-crs","engineName":"OWASP Core Rule Set","engineVersion":"4.25.0","runtime":"Coraza v3.8.1","config":"paranoia level 2, anomaly threshold 5, default CRS settings","ranAt":"2026-11-02T13:03:28.000Z","verdict":"partial","templateId":"CVE-2026-22778","templatePath":"http/cves/2026/CVE-2026-22778.yaml","requests":2,"blockedRequests":1,"rules":["932235","932236","932260","934170","941130","941170","942120"],"note":"","requestDetail":[{"method":"GET","path":"/v1/models","status":200,"blocked":false,"rules":[]},{"method":"POST","path":"/v1/chat/completions","status":403,"blocked":true,"rules":["932235","932236","932260","934170","941130","941170"]}]}],"sightings":null,"social":{"total":0,"first_seen":null,"daily":[{"day":"2026-10-22","posts":0},{"day":"2026-10-23","posts":0},{"day":"2026-10-24","posts":0},{"day":"2026-10-25","posts":0},{"day":"2026-10-26","posts":0},{"day":"2026-10-27","posts":0},{"day":"2026-10-28","posts":0},{"day":"2026-10-29","posts":0},{"day":"2026-10-30","posts":0},{"day":"2026-10-31","posts":0},{"day":"2026-11-01","posts":0},{"day":"2026-11-02","posts":0},{"day":"2026-11-03","posts":0},{"day":"2026-11-04","posts":0}],"top_posts":[],"exploit_repositories":[]}}