AI News HubLIVE
站内改写5 分钟阅读

语义事务:在操作系统边界保护不可信的AI代理工作流

语义事务模型将整个AI代理任务视为一个原子事务,通过影子状态和效果发件箱暂存,在提交前进行全轨迹验证,防止多步攻击。本文以Cordon和ATP系统为例,说明该模型如何解决代理工具调用的双重写入问题,并通过EchoLeak和ForcedLeak两个零点击注入案例揭示传统运行时和模型级过滤的不足。

来源Hacker News AI作者: Ayauho

Latent Dynamics

2026年7月15日

凌晨2点14分,一家地区性支付处理商的对账代理打开了当晚的供应商汇款批次。其任务很常规:将收到的发票文件与未清账分录进行匹配,并为早上的财务团队标记差异。

一份汇款文件在光学字符识别备忘录字段中携带了一条隐藏指令。该指令告诉代理将附件的路由更正视为权威。它要求代理在标记任何内容之前,向一个“更正后”的账户转账34万美元。

标准的工具暴露模型无法阻止这种情况。代理的计划循环没有理由怀疑备忘录字段。它只是代理被授权读取的文档中的文本。一旦代理决定调用转账函数,传统运行时将立即分发数据包。

但实际情况并非如此。转账请求已生成,但运行时从未发送它。该请求作为暂存、非活动的记录停留在效果发件箱中,等待整个任务轨迹通过验证。引用监视器将转账的输入追溯到不受信任的备忘录字段,并拒绝了该轨迹。在任何数据包到达支付网络之前,发件箱记录被清除。

这就是语义事务模型背后的核心主张。代理工具调用不是一系列独立的操作,在运行时就立即提交。一个任务是一个事务,暂存在本地状态的影子副本和效果发件箱中,在发生任何不可逆操作之前根据完整轨迹进行检查。两个系统使这一主张具体化:Cordon事务运行时[1]和在Mnemosyne运行时中实现的代理事务处理(ATP)[3]。

无状态RPC代理运行时的失败

大多数代理部署通过直接的无状态远程过程调用公开数据库、文件系统和外部应用程序编程接口。每个工具调用就地执行。它在运行时立即更改主机状态。

这是双重写入问题的一个版本,在分布式系统中已研究多年。必须更新自身状态并同时通知外部系统的服务无法原子地执行这两项操作。它需要一种协调机制。微服务架构通过事务性发件箱模式解决了这个问题。服务将出站事件写入与本地状态更改相同的数据库事务中,然后异步排出。大多数代理运行时跳过了这一步。工具调用及其副作用被视为一个事件。

结果是对多步骤攻击的结构性盲目。读取被污染的文件本身看起来是良性的。从该文件派生的命令写入本身也看起来是良性的。只有组合才是危险的,而一次检查一个调用的过滤器无法看到组合。

即使没有攻击者,无状态执行本身也会破坏状态。AppWorld基准测试评估了跨越九个应用程序和457个API的编码代理,填充了大约100个模拟用户。它通过平均每个任务八个基于状态的单元测试来检查结果,这些测试直接针对底层SQL数据库运行。AppWorld区分了两种指标。任务目标完成检查单个任务是否成功。场景目标完成检查相关任务的完整链是否成功,而不破坏先前任务已建立的状态。

运行标准ReAct循环的GPT-4o代理在基准测试的正常拆分中达到了48.8%的任务目标完成率和32.1%的场景目标完成率。在更难的挑战拆分中,同一代理达到了30.2%和13.0%[2]。解决了一半单独任务的模型只能完成略超过三分之一的完整场景。错误在步骤之间累积,而无状态运行时中没有任何东西可以回滚它们。

模型级过滤器遗漏的两次零点击注入

2025年的两次披露说明了为什么运行在模型自身推理内部的过滤器不能成为安全边界。

Aim Labs在Microsoft 365 Copilot中发现了CVE-2025-32711,称为EchoLeak。Aim Labs在通用漏洞评分系统上将其评为9.3。国家漏洞数据库列出了较低的7.5分,因为其评分模型假设较少的前提条件已满足[3]。

该攻击以包含隐藏提示的电子邮件形式到达,该提示旨在绕过Copilot的跨提示注入攻击分类器。当用户后来要求Copilot总结收件箱时,模型读取了隐藏指令并同时检索了私有上下文。为了外泄该上下文,隐藏提示告诉Copilot将其答案格式化为跨两行拆分的markdown引用链接。Copilot的输出清理器未将拆分链接识别为外部引用。聊天客户端仍然渲染了它。然后浏览器自行请求了链接的图像,将编码的秘密携带到攻击者控制的服务器。微软于2025年6月发布了后端补丁[3]。

Noma Labs在Salesforce Agentforce中发现了第二个漏洞链,称为ForcedLeak,并评分为9.4[4]。该攻击利用了平台的Web-to-Lead表单,该表单接受最多42,000个字符的描述字段。攻击者在该字段中提交了带有隐藏提示的线索。当员工稍后通过Agentforce的路由代理处理该线索时,代理执行了嵌入的指令并检索了客户记录。

该漏洞利用了平台内容安全策略中的陈旧允许列表条目:一个已过期的域,仍标记为可信。研究人员以五美元购买了该过期域,并将其用作外泄端点。代理将窃取的记录写入指向该域的图像请求中,完全绕过了出站过滤。Salesforce于2025年9月8日通过更严格的受信任URL允许列表关闭了该漏洞[4]。

这两起事件都不需要越狱模型。两者只需要一个合法授权的工具调用被模型没有理由怀疑的内容所引导。

Cordon事务模型

Cordon将语义事务定义为任务级执行边界。它将工具意图和跟踪的结果谱系绑定到可逆的本地状态、暂存的外部效果、委托的权限和审计元数据[1]。Cordon在代理分派工具调用的点介入,并延迟任何不可逆效果,直到运行时可以验证整个任务。

运行时在任务期间跟踪三种对象:

结果对象。返回给代理执行或在其中产生的任何值:文件内容、工具输出、命令输出流、摘要、临时工件。

变异。本地写入、删除、配置编辑和其他持久性更改,保存在写入集和删除集中,统称为W∪D。变异仅在活动事务内可恢复。

效果对象。任何完成时使信息或行为在事务外部可见的操作,例如网络请求、API调用或数据库提交。这些暂存在效果发件箱中,记为E。

Cordon对这些对象运行三阶段协议:准备、验证,然后提交或中止。在准备阶段,运行时接受工具意图,在W∪D中记录变异,并将效果重定向到E而不释放它们。在验证阶段,运行时将四个检查作为一个整体进行:谱系图G、活动权限集A、E中的暂存效果以及声明的约束元组C。此检查得出一个布尔结果valid(T, C)。在提交或中止阶段,真实结果提升影子状态并释放E中已批准的效果。虚假结果阻止E,将W∪D回滚到事务开始前的状态,并写入完整的审计记录。

对账代理的任务以中止分支结束。E中的转账请求从未离开待处理状态,因为验证发现其谱系追溯到不受信任的备忘录字段。

Cordon是建立在此相同思想上的几个事务模型之一,每个模型的范围不同。AI-原子-框架(简称ATM)管理对共享存储库或工作树的并发写入[6]。ATM将任务的八个元素组织成一个治理链:

任务的意图

其存储库范围

一组禁止谓词

其管理的路径

其所需的交付物

其验证命令

其证据义务

其任务方向纪元

内容标识符代理根据此链接纳共享变异。领域特定的适配器将写入意图映射到语义原子:具有已知读写依赖关系的具体源范围。当代码库对于给定区域没有定义的原子时,ATM会创建一个虚拟原子。这是一个临时的、可审计的单元。它让代理比较候选写入并在任何写入到达共享路径之前分配临时冲突密钥。

在Mnemosyne运行时中实现的ATP针对不同的失败模式:过时的提议和补偿会使下游依赖步骤孤立[3]。ATP将规划模型视为不受信任的提议者,其本身没有事务权限,这一特性称为提议非权威性。确定性提交者单独可以修改状态。这赋予了ATP其核心保证,即智能解耦正确性:无论模型是否产生幻觉、漂移或完全失败,提交的状态都保持正确。第二个保证,即证据保留修复,要求任何修复操作都不能删除或掩盖触发它的证据。当中断使已接受的提议无效时,Mnemosyne不会从头开始重新规划。它运行局部修复协议,生成仅覆盖受影响依赖区域的狭窄修复提议,并将该提议通过相同的接纳门发送回去。

效果发件箱

可逆变异是问题中较容易的一半。一旦数据包离开主机,网络请求就无法撤销。一旦支付清除,文件系统的影子副本也无济于事。这是语义事务运行时必须解决的核心复杂性,也是对账代理的转账实际被阻止的地方。

发件箱在与影子状态变异相同的事务范围内存储暂存效果,具有足够的结构以支持冪等重放和审计。代表性记录包括:

{ "transaction_id": "uuid", "sequence_position": "integer", "idempotency_key": "string", "target_type": "HTTP_DISPATCH | FINANCIAL_TRANSFER | SOCKET_WRITE", "payload": { "...": "type-specific fields" }, "validation_state": "PENDING | APPROVED | AUDITED | REVOKED", "lineage_data": { "source_tool": "string", "input_provenance_digest": "sha256 of context and prior outputs", "dependency_ids": ["uuid"] }, "compensation_boundary": { "on_abort_action": "VOID | RELEASE_LOCK | TRIGGER_REVERSAL_JOB | RETAIN_FOR_MANUAL_AUDIT" } }

三个字段承载了设计的重量。冪等密钥阻止了重试提交在目的地重复转账。lineage_data中的来源摘要让验证器能够将对账代理的转账追溯到备忘录字段,而不是用户发出的指令。验证状态只能通过上述验证阶段从待处理变为已批准。没有任何代码路径会在记录仍处于待处理状态时释放它。

用于枢轴边界的Saga步骤

发件箱需要精确说明在暂存效果序列中提交和回滚的含义,其中一些效果在后续步骤失败时可能已经不可逆。这是分布式系统中的Saga模式,在此处适用于模型生成的提议序列,而不是固定的、预编写的代码路径。

Saga是有序的子事务序列S=⟨T1​,T2​,…,Tn​⟩,每个子事务是系统状态空间上的状态转换算子。序列分为三类。对于小于枢轴索引p的i,可补偿步骤Tᵢ具有 [为控制AI成本而截断]