一段看起来像 API 文档的网页,可以同时服务两类读者:人类看到的是排错和付费入口;会浏览网页、调用工具并能付款的 Agent 还会读到藏在结构化数据和 DOM 里的“指令”。

Zscaler ThreatLabz 披露的案例里,攻击者用 SEO 投毒把假模块页面推给搜索者,再把“购买许可证即可解决错误”的内容写进 JSON-LD 与屏幕外的 HTML 节点。

这不是传统意义上的“用户点错链接”。当 Agent 把网页当作任务上下文时,页面正文、元数据、错误提示和工具说明都会进入它的决策链。该案例把支付描述成例行的 API key 获取步骤,并包含向硬编码地址转移约 0.0012 ETH 的脚本;攻击者随后给出假 API key,让一次付款看起来像任务完成。

真正需要重画的是授权边界。网页可以提供信息,却不能凭页面里的文字扩大 Agent 的付款权。搜索结果排得更靠前、字段看起来更结构化,或错误信息显得更紧急,都不应自动变成“允许向新地址付款”的理由。

ThreatLabz 的内部测试评估了 26 个模型:四个模型在相关攻击场景中未采取恰当行动,另有两个模型未能在仿冒加密平台场景中正确识别网站。SecurityWeek 对该研究的报道也指出,攻击者通过隐藏提示、操纵搜索结果和仿冒站点,诱导 Agent 付款或信任虚假平台。

对会执行支付的 Agent,最有用的默认规则不是“发现恶意提示再拦截”,而是把外部网页降级为不可信输入:

1. 网页、检索结果和工具返回值不得自行新增收款方、资产类型或付款额度;

2. 首次向新地址付款,应触发独立确认,而不是沿用页面中的付款参数;

3. 付款策略应预先限定金额、允许对象与有效时间,并保留可复核的意图记录;

4. 页面声称“立即付款才能修复”时,应该是暂停信号,不是授权信号。

支付协议能记录一笔交易是否被签名;它不能替用户判断这笔交易最初是不是被一段隐藏网页内容诱导出来的。对 Agent 而言,付款安全的起点不是让它读懂更多页面,而是让页面永远无法替人扩大权限。

信源:Zscaler ThreatLabz《Indirect Prompt Injection in Web Content Targets AI Agents》;SecurityWeek《Prompt Injection Attacks Trick AI Agents Into Making Crypto Payments》。