系统:运行中
← 返回所有攻击
AGENTS MEDIUM NEW

在 LLM 智能体框架中,开放工具并不等于授权调用

2026 年 6 月一项针对 LangChain、LlamaIndex 与 Stripe Agent Toolkit 的审计发现,三者都不会在执行前重新校验工具调用的实际参数——被注入的付款因此得以执行。

2026-07-13 // 5 min affects: langchain, langgraph, llamaindex, stripe-agent-toolkit, llm-agent-frameworks

这是什么?

2026 年 6 月 27 日,David Mellafe Zuvic 的一篇简短 arXiv 论文(2606.28679)为许多智能体技术栈共有的一种缺陷给出了精确命名:它们把工具被开放当作了授权。论文审计了三个被广泛使用的基础组件——LangChain/LangGraph、LlamaIndex 与 Stripe Agent Toolkit——并提出一个狭义问题:在模型发出的工具调用执行之前,框架是否会依据某项策略重新校验其具体的参数值?在所审查的固定公开源提交中,三者的答案一致:它们会限制模型可以调用哪些工具,但没有一个在默认情况下提供确定性、默认拒绝的检查来判断这次调用实际想做什么

这一缺口正是经典的混淆代理(confused deputy)问题,由 Norm Hardy 于 1988 年首次描述:一个特权程序被权限更低的调用方诱导,滥用它本应合法持有的权限。云安全联盟(CSA)2026 年 3 月的研究简报记录了这种模式为何在智能体部署中重新成为高危类别。

工作原理

一个既读取不可信内容(邮件、检索到的文档、工具返回结果),又持有具有副作用的工具(付款、邮件、CRM、基础设施 API)的智能体,在数据与指令之间没有硬性边界。只要攻击者能向智能体读取的任意通道写入内容,被注入的文本就可能引导模型发出操作者从未打算发起的工具调用。

审计的关键在于防御缺失的位置。能力闸门回答的是「create_payment 是否为允许的工具?」——它可能理所当然地回答「是」,因为该智能体本就应当执行付款。而任何默认控制都没有回答的是「这一次 create_payment 调用,携带这些参数(此收款方、此金额),此刻是否被授权?」。由于缺少参数层面的校验,一条注入指令只要生成格式正确但未获授权的调用,就能顺利通过:

# 能力闸门:通过——create_payment 是已开放的工具
# 缺失:针对 {payee, amount} 值的逐次调用授权
create_payment(payee="attacker-controlled", amount=9999)

论文指出,这笔未获授权的付款在 LangChain 的默认派发下会被执行(并附有一个 LlamaIndex 概念验证);而当在执行前置入一个按值授权的闸门时,同样的调用会被拒绝。这里不存在任何新颖的利用原语,论文也未主张任何 CVE——其结论是:默认姿态在参数值上是「失败即放行」。

为何重要

智能体越来越多地连接到具有不可逆后果的工具:转账、向大量收件人群发邮件、修改访问控制、删除数据。当唯一的执行层是模型自身的指令遵循时,一次成功的注入就会继承操作者的全部权限。CSA 简报将此与 2026 年一起真实的供应链事件相联系:一个精心构造的仓库工单诱使已认证的编码智能体安装了攻击者控制的软件包——这正是现实中的混淆代理链条,而非纸面推演。

多智能体架构会让情况更糟:一个子智能体若通过与合法指令相同的通道信任其编排者,就会把单次注入传播到多套凭据之间,而每一步都没有人工介入。

防御

按参数值而非仅按名称重新授权每次调用。 在工具派发之前放置一个策略决策点,评估具体参数——收款方、金额、收件人列表、目标资源——并默认拒绝。论文的参考设计 ScopeGate 将其拆分为五个阶段:作用域(scope)、授权、金额上限、幂等性、默认拒绝。你不必照搬该实现;你需要的是这样一个属性:未获授权的参数值会在执行前被确定性地拒绝。

将检索到的内容视为数据,绝不视为指令。 只允许触发动作的指令来自经授权的主体。来自网页、邮件、文档和工具响应的内容不应能够独自发起具有副作用的调用。

对不可逆操作要求人工确认。 付款、群发、凭据变更和删除都应要求在运行时强制执行的显式带外批准,无论指令表面上来自何处。

收窄凭据,不要交出环境权限。 用按用途的窄授权取代宽泛的 OAuth 授权;为智能体赋予独立身份,使异常操作更易被发现。限制影响半径(支出上限、收件人/域名白名单),让混淆代理无从施展。

在多智能体图中让每一次权限传递都显式化。 子智能体不应隐式继承编排者的权限;对智能体间消息进行记录与签名,使被操纵的编排者无法悄然委派。

状态

项目详情
来源arXiv 2606.28679,《Capability Gates Are Not Authorization》(2026 年 6 月 27 日提交)
审计对象LangChain/LangGraph、LlamaIndex、Stripe Agent Toolkit(固定公开源提交)
结论默认具备能力闸门;默认不提供针对参数值、默认拒绝的逐次调用授权
参考控制ScopeGate(PDP/PEP)——作用域、授权、金额上限、幂等性、默认拒绝
报告结果未授权付款在 LangChain 默认下执行;被受测闸门拒绝(0/48 静态绕过、0/29 自适应尝试、0/10 良性误拒)
CVE作者未主张任何 CVE
背景CSA 关于智能体混淆代理攻击的研究简报(2026 年 3 月 23 日发布)

本文总结的是已公开披露的防御性研究,不含任何可操作的攻击指令。

Sources