10 月 13 日,Check Point Research 披露了开源 LLM 网关 LiteLLM 的两个高危漏洞:CVE-2026-35029 让低权限账号一路摸到管理功能,直至完全接管网关主机;CVE-2026-59823 则通过藏在嵌套参数里的 api_base 发起服务端请求伪造,把网关携带的上游厂商 API 密钥送出内网。LiteLLM 是企业里最常见的「模型总机」之一——统一转发发往 OpenAI、Anthropic、Google 等厂商的请求,顺带保管所有厂商的钥匙。Check Point 的统计口径:月下载量约 9700 万次、GitHub 星标超过 5.9 万。两个漏洞分别打这扇门的两个面:门锁,和门后挂着的钥匙。

两把钥匙,两扇门CVE-2026-35029 · 夺门低权限账号(只读即可)/config/update 缺失授权检查读服务器文件、覆写管理员凭证指示网关加载外部代码执行结果:完全接管网关主机CVE-2026-59823 · 摸钥任意网关账号均可触发api_base 藏进请求体 user_config现场构建攻击者控制的 Router请求重定向到外部服务器结果:上游厂商 API 密钥外泄原本拦得住:防护只查了请求体最外层键,没有递归检查嵌套对象——藏一层就绕过了
图|两条链分别打「门」和「钥」。读图要点:右链的防护不是没有,而是只查了一层——输入验证的老错误换了个组件复发。

CVE-2026-35029:一把只读账号的完整上位路

两个漏洞里,CVE-2026-35029 坏在授权。LiteLLM 用角色做访问控制,管理员之外还有受限与只读角色;问题在于 /config/update 端点缺失授权检查,权限最低的用户也能改只有管理员能动的运行时配置。Check Point 在受控环境里把后果演示完整了:读服务器上的文件(配置文件与系统文件里常有敏感信息)、把管理员凭证覆写成自己的、再指示网关从外部源下载并执行代码——恶意 Python 模块从云存储加载,远程代码执行就此成立。一条从「最受限角色」到「主机完全控制」的链,中间没有需要绕过高阶防护。Black Duck 的 Christopher Jess 评价很直白:这是熟悉的应用程序安全失败——一次缺失的权限检查,叠加网关的集中地位,后果被放大。

CVE-2026-59823:防护只查一层,就只防住一层

第二个漏洞更值得工程团队逐行看。LiteLLM 有个叫「Clientside LLM Credentials」的文档化功能:/chat/completions 等接口接受请求体里的 user_config 参数,一旦该参数出现,LiteLLM 会用其中的配置现场构建一个全新的 Router,随后的模型调用全走这个攻击者可控的路由——包括任意指定的 api_base。原本有一道防护:is_request_body_safe 会拒绝请求体顶层的 api_base、base_url 参数(这道墙还是源于早先一起 api_base 劫持窃密报告),configurable_clientside_auth_params 也会限制直接传入 api_base 与 api_key。但 user_config 走的是另一条代码路径,而防护只检查请求体最外层键、没有递归检查嵌套对象——把 api_base 藏进 user_config,护栏形同虚设。攻击效果是双重的:网关把发往厂商的请求重定向到攻击者服务器,请求中携带的上游 API 密钥随之易主(OpenAI、Anthropic、Google 的都在射程内);网关本身还可以当跳板,探测内网服务与云元数据接口。这个 SSRF 的 CVSS 4.0 评分是 5.3(中等)——评分只覆盖了单点利用难度,没覆盖「一家企业的全部模型钥匙」这个爆炸半径。

一个位置,三重放大LLM 网关OpenAI / Anthropic / Google 密钥路径之最每个 AI 请求的必经之路提示、响应、敏感数据全部流过这一个进程钥匙之最一家厂商一处放钥网关一处放齐所有厂商集中管钥 = 集中丢钥藏身之最月下载约 9700 万次嵌在无数平台与内部工具很多团队没主动部署过前科:3 月 PyPI 恶意版本经 CI 扫描器失守,每次 Python 启动都会执行
图|三重放大决定杠杆率。读图要点:低权限账号能摸到全部厂商钥匙,是因为网关把「一把账号」放大成了「一串钥匙」。

为什么网关是蜜罐

把两个漏洞放回网关的位置,风险画像就清楚了。网关坐在每个 AI 请求的必经之路上,提示、响应与敏感数据全部流过;它存着企业接入的每一家模型厂商的密钥——这些密钥是直接的、可计费的、无需二次认证的访问权;更要命的是藏身性,Check Point 与 Tetrate 都提醒:LiteLLM 嵌在大量平台和内部工具里,很多团队从没主动部署过它,却照样在跑。这不是假想威胁的注脚:今年 3 月,PyPI 上的 litellm 1.82.7 与 1.82.8 两个版本被植入恶意代码,攻击者 TeamPCP 先攻陷了 LiteLLM CI 流水线里的安全扫描器 Trivy,再拿到维护者的 PyPI 凭据;恶意 .pth 文件让污染代码在每次 Python 启动时都会执行,而当时这个包每天被下载约 340 万次。

修法之外,真正要改的账

修复本身不复杂:两个漏洞都在 1.83.9 版本解决,升级即可,Check Point 也确认目前没有在野利用报告。难的是补丁的到达率——月下载约 9700 万次、且大量是隐性部署,等上游平台发版,企业用户才跟着被保护。Check Point 与 Tetrate 给的动作清单值得照做:盘点代码库、容器镜像与 CI 配置里所有 litellm 副本;审计网关账号,删掉没人用的;拿一个受限用户实测权限边界;有未授权访问迹象就轮换全部厂商密钥;把 LLM 网关正式纳入渗透测试与漏洞扫描范围。更深的账在架构侧:集中管钥匙省了运维,也把「一串密钥」变成了「一个单点」——1999 年本站拆过工具链组件各自失守(Archon 未授权 RCE 与 OpenCode 密钥外泄),这次是集中式凭证层的单点失效。分散会漏,集中会炸,两边都不是可以忽略的成本。

站点相关线索:840 拆过 AI 网关的五层分工,2002 写过 Modal 用 Secret Injection 让密钥「用而不见」,1943 是 ServiceNow 给智能体发运行时护照,1945 把治理产品放上了货架。LiteLLM 这一课给货架加了条注脚:凭证层的每一种集中方案,都要同时回答「钥匙放在哪、谁能碰到、丢了多久会发现」。目前官方及行业暂未披露更多细节,后续将持续跟进迭代动态。