系统:运行中
← 返回所有攻击
INFRASTRUCTURE CRITICAL NEW

LMDeploy SSRF:当图像加载器劫持整个 AI 推理基础设施

CVE-2026-33626 将 LMDeploy 的 load_image() 变成了通用 SSRF 原语。安全公告公开 12 小时 31 分后,蜜罐就捕获到首次实战利用。

2026-05-22 // 6 min affects: lmdeploy, internlm-xcomposer, vision-language-models, gpu-inference-nodes

事件概要

2026 年 4 月 21 日,InternLM 团队发布安全公告 GHSA-6w67-hwm5-92mq,对应 CVE-2026-33626,这是一项位于 LMDeploy 中的服务端请求伪造(SSRF)漏洞。LMDeploy 是当前部署最广泛的开源工具包之一,用于对外提供视觉-语言模型与大语言模型的推理服务。漏洞位于 load_image()lmdeploy/vl/utils.py):函数会拉取视觉请求中传入的任意 URL,且未校验目标地址是否落在 link-local、loopback 或 RFC1918 私网范围内。NIST 评估为 CVSS 7.5(高危)。所有启用视觉-语言支持的 0.12.2 及之前版本均受影响,0.12.3 已修复。

真正值得关注的不是这一漏洞本身——SSRF 本属教科书案例——而是利用时间窗。Sysdig 威胁研究团队在 GitHub 公告上线 12 小时 31 分后,在蜜罐上观察到首次完整的武器化攻击尝试,源 IP 为 103.116.72[.]119。在长达八分钟的会话中,攻击者将图像加载器当作通用 HTTP SSRF 原语,对 GPU 节点的内部攻击面进行了扫描。

攻击原理

LMDeploy 对外提供视觉-语言推理接口,请求体为 JSON,其中可携带图像引用。库会把该 URL 传入 load_image(),再交由 requests.get 处理,过程中没有任何白名单、黑名单或 DNS pinning。推理容器能访问的任何地址,攻击者都能通过模型 API 间接访问。

# 概念示意,基于公开公告与 Sysdig 分析整理。
# 切勿用于您不拥有的任何系统。
POST /v1/chat/completions  HTTP/1.1
Host: model.example.com
Content-Type: application/json

{
  "model": "internvl-2-8b",
  "messages": [{
    "role": "user",
    "content": [
      {"type": "text",      "text": "describe this image"},
      {"type": "image_url", "image_url": {
         "url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"
      }}
    ]
  }]
}

Sysdig 蜜罐流量复现的利用链顺序访问了五个目标:位于 169.254.169.254AWS Instance Metadata Service(IMDS)、同 VPC 内的 Redis 内部端口、同子网中的 MySQL、一个二级 HTTP 管理界面,最后是用于带外回传错误信息的 DNS exfiltration 接收端。视觉-LLM 节点通常运行在带有较宽 IAM 角色的 GPU 实例上——S3 模型文件、训练数据集,有时还包含跨账户 assume-role——因此一次成功的 IMDS 读取,即足以将整个云账户拱手让人。

公开的 PoC 是最朴素的 HTTP 请求,没有新颖的密码学技巧,也没有模型层的攻击。本文价值在于另一面:整整一类 AI 服务基础设施,正悄悄运行着 2010 年代风格的传统 Web 应用漏洞,藏身于一套 2026 年的 GPU 前端之后。

影响为何重要

三个特点决定了它值得单独写一篇分析。

原语属于 AI,影响覆盖整个云账户。 一个接受 URL 的视觉接口,在结构上等价于一台带凭据的 HTTP 代理。任何把开源推理放在公网路由后的部署,都会继承 GPU 节点能触达的全部目标——而这一攻击面按设计就很大(模型存储桶、遥测后端、可观测性端点、内部工具 API)。

从公告到武器化的时间几乎为零。 12 小时 31 分钟低于大多数补丁管理流程的处置周期。Sysdig 将其视为转折点:攻击者正在持续监控 AI 基础设施仓库的 GitHub 公告,并在不到一个工作日内将披露转化为攻击。再把 GPU 服务栈当作研究代码而非生产 Web 服务来运维,已不再可行。

视觉-LLM 节点是凭据保险柜。 让推理服务从 S3 流式加载 70B 模型的实例角色,同样能访问 IMDS。当前被广泛使用的 Helm Chart 和 Docker 范例并没有「最小权限」默认值,团队往往直接套用 AWS 托管的宽角色,因为能跑就行。

防御建议

模型层没有缓解措施。修复完全在基础设施与运营层面。

  1. 将 LMDeploy 升级到 0.12.3 或更高版本,引入 URL 校验补丁。同时复核所有分叉和内部 vendor 副本——受影响函数为 lmdeploy/vl/utils.py:load_image,公告编号 GHSA-6w67-hwm5-92mq。
  2. 在每台 GPU/推理实例上强制启用 IMDSv2,并将 hop-limit 设为 1。IMDSv2 要求一次令牌往返,不能控制 HTTP 头的 SSRF 原语无法完成。
  3. 对 GPU 与推理节点实施出站白名单。模型服务对外发起的 HTTP 请求,目的地应限定在一个短而明确的清单内:对象存储、日志后端、模型遥测。其他一切默认拒绝,包括 link-local 与 RFC1918。
  4. 按工作负载收敛 IAM 角色。仅需具备读取 S3 模型文件能力的角色即可服务推理。用于训练、微调或流水线编排的角色,不应再附加到对外暴露的推理节点上。
  5. 将视觉接口视为不可信的文件抓取器。任何在服务端解析 URL 的推理服务——视觉、RAG、抓取类工具、文档问答——其抓取动作都应运行在隔离子网内,不能访问元数据接口,不能触达内网,也不能共用 IAM。该建议同样适用于 vllmTritonText Generation Inference,以及任何接收 URL 的工具插件。
  6. 订阅 AI 基础设施关键仓库的 GitHub Security AdvisoriesInternLM/lmdeployvllm-project/vllmhuggingface/text-generation-inferencetriton-inference-server/serverBerriAI/litellmlangchain-ai/langchainmicrosoft/semantic-kernel)。请把 Sysdig 的观察作为新基线:从公告到攻击,要以小时计,而非天计。

状态汇总

项目日期状态
GitHub 公告 GHSA-6w67-hwm5-92mq 发布2026-04-21公开
蜜罐捕获首次实战利用(Sysdig)2026-04-22已确认
修复版本 LMDeploy 0.12.3 发布2026-04-21可用
CVSS 评分7.5(高)
受影响版本≤ 0.12.2,启用 lmdeploy[vl]易受攻击

抛开 LMDeploy 单点不谈,更值得记住的结论是:AI 推理栈如今已被攻击者视为高价值的常规 Web 服务。相应的防御手册同样是常规的——出站控制、IMDSv2、按职责收敛 IAM、迅速打补丁——但必须真正落到承载模型的机器上,而不仅是模型前面的应用层。

Sources