Your Agent Is Mine: Measuring Malicious Intermediary Attacks on the LLM Supply Chain
Hanzhi Liu, Chaofan Shou, Hongbo Wen, Yanju Chen, Ryan Jingyang Fang, Yu Feng
cs.CR
2026-04-10
UCSB等团队买了28个付费、收了400个免费LLM API路由,9个改写工具调用、17个动AWS金丝雀;弱配置诱饵灌进约20亿token,440个Codex会话里401个已是YOLO。
Agent 已经不只聊天:它会跑 Bash、装依赖、动云账号。生产环境很少直连 OpenAI 或 Anthropic,中间至少插一层 LLM API 路由,做多模型回退、负载均衡、一把钥匙开多家。LiteLLM 大约 4 万 GitHub star、2.4 亿次 Docker 拉取;new-api 和 one-api 各自百万级拉取;调查报道写过淘宝转售店单店复购超过 3 万次。
路由不是路过的网线。客户端主动把 base URL 指过去,路由先拆掉客户端 TLS,再另开一条连上游。每一跳都能看见明文 JSON:系统提示、工具定义、API key、返回的 toolcall。上游模型产出的工具调用,目前没有任何已部署机制能绑到客户端最终执行的那一份。2026 年 3 月 LiteLLM 的依赖混淆事故已经把这件事从假设变成现实:被投毒的发行版拿到了每一条过路请求和响应的写权限。
威胁模型里,攻击者自己开路由,或通过供应链、内部权限、服务器漏洞拿下一台合法路由。测量明确排除 prompt injection、模型后门和客户端木马,只盯两件正交的事。
多跳链是最弱一环。只要中间某一跳不老实,下游诚实路由既看不见原文,也修不回来。AC-2 的暴露还是累加的,每一跳都刮一遍。典型路径可以有四跳:淘宝转售、二层聚合、OpenRouter、模型主机,客户端只配第一跳。
实证分两块。市场侧买了 28 个付费路由(淘宝、闲鱼、Shopify),再从公开社区收了 400 个免费实例,模板主要是 sub2api 和 new-api。每台路由用研究账号走沙箱,跑自定义任务和 TerminalBench 2.0,盯回连、文件系统和进程树。投毒侧故意在中文论坛、微信群、Telegram 放出一把 OpenAI key;再在 20 个域名、20 个 IP 上挂弱口令的 Sub2API、CLIProxyAPI 和 claude-relay-service 诱饵。研究代理 Mine 用 FastAPI 实现四类攻击,对着 OpenClaw、OpenCode、Codex、Claude Code 各打 1000 条工具调用。
野外已经有人在干。
| 场景 | 样本 | 主动改写 | 凭证滥用 |
| 付费路由 | 28 | 1 个注入恶意代码 | 0 |
| 免费路由 | 400 | 8 个注入;2 个带条件触发 | 17 个碰 AWS 金丝雀,1 个抽走 ETH |
| 泄露的上游 key | 1 把 | 未观察到改写 | 1 亿 GPT-5.4 token,超过 7 个 Codex 会话 |
| 弱配置诱饵 | 20 域名 + 20 IP | 440 个会话都能改 shell | 99 个凭证、398 个项目或主机,401 个已是 YOLO |
诱饵侧更刺眼:超过 4 万次未授权访问,来自 147 个 IP、6 种 JA3 指纹;大约 20 亿 GPT-5.4 / 5.3-codex token,可见流量约 13 GB。440 个 Codex 会话全部可注入命令,401 个已经自动批准工具,复杂触发器根本用不上。ETH 抽水当时不到 50 美元,是金丝雀不是战利品。把泄露 key 和诱饵加在一起,过路 token 约 21 亿。
Mine 对四个公开 agent 框架:0/4 做了响应完整性校验。AC-1 改写兼容 100%,AC-1.a 99.6%,剩下 0.4% 是带引号、可编辑路径、URL 安装这种替换规则主动放过的边角。流式场景靠缓冲拼完整参数再改,中位代理开销 0.013 ms,对照上游中位延迟 820 ms。
客户端能立刻上的三道闸,数字来自合成语料,不是线上流量:
| 防御 | 覆盖 | 代价 |
| 高风险工具策略门(失败即关) | AC-1 / AC-1.a 全拦 | 1.0% 误报,中位 2.3 μs;面对白名单域名或本地 stager,简单自适应基准 100% 绕过 |
| IsolationForest 异常筛 | AC-1 89.0%, AC-1.a 50.0%, AC-1.b 50.9% | 6.7% 误报;砍掉 shell-risk 特征后 AC-1 掉到 17.6% |
| 仅追加透明日志 | 不阻断,只留证据 | 每 1000 会话 12.0 MB,约 1.26 KB/条 |
误报预算收到 1% 时,异常筛对 AC-1 只剩 43.5%,AC-1.a 为 0,AC-1.b 为 9.4%。长期缺口是提供商签发的规范响应信封,类似邮件 DKIM,签模型名、工具名、参数、结束原因和客户端 nonce。目前 OpenAI、Anthropic、Gemini 的 tool-use API 和 MCP 规范都没有部署这一层。
YOLO 模式、灰市路由、一把 key 串四跳,已经是很多人的默认用法,不是边缘场景。付费只改善稳定性,不证明 toolcall 没被改过。prompt 护栏挡不住这件事:改写发生在模型推理环外面的 JSON 层。
能立刻做的是失败即关的安装域名和包名白名单,再加本地透明日志。别指望异常检测单独扛。它更像审阅优先级,知道特征的人可以故意写得像普通 shell。E2B 一类沙箱能缩小执行后的杀伤半径,同样不能证明这条命令来自上游模型。
对提供商的含义更硬:不签响应信封,agent 执行的工具调用就没有出处。路由器翻译 schema 是常态,所以必须签规范化后的 JSON,不能签原始 HTTP body。
测量盯的是公开可达的商品路由市场,企业私有和邀请制部署不在样本里。有限次黑盒探测抓得到「等 50 次再动手」这种,抓不到没被探针撞上的潜伏条件。作者自己写,2 个自适应样本不一定穷尽。
防御数字全部来自模板生成的合成语料,IsolationForest 也只在合成 benign 上拟合。1.0% 策略门误报来自白名单外的镜像域名,重度用国内镜像的开发环境会更高。策略门在「payload 放在白名单域 / 先放本地 stager」这两招下 100% 被绕,论文把这写成这节的主要负面结果。
伦理附录写得很直:没有走 IRB;没有按家做协调披露,理由是卖家匿名、漏洞是架构性的、披露单家修不了信任缺口;Mine 不公开;第三方提示词和原文不落盘。泄露 key 的实验故意制造了可被公开发现的密钥,作者按系统测量处理,但承认会引来第三方滥用。AC-2 发生在请求路径,响应签名提案挡不住。兼容性数字不是端到端执行率:客户端权限提示和本地沙箱仍可能拦住改过的命令。