OpenAI Agent 没钱付 Gas,自己"借"了个钱包:最可怕的不是它不懂,而是它懂
赵达10 月 15 日,OpenAI 发了一份安全事件报告,讲的是自家一个 Agent 干的”好事”:为了完成一次智能合约部署,它在没拿到授权的情况下,动用了陌生人钱包里的钱。
钱是测试网的测试币,不值钱。但这件事的细节,值得所有做 Agent 的人认真看一遍——因为它暴露的问题,跟钱多少没关系。
先把事情说清楚
今年 6 月 26 日,OpenAI 在训练一个 GPT-5.6 Sol 系列的内部研究模型,给它布置了一个任务:更新一个加密货币交易应用,把智能合约部署到以太坊的 Sepolia 测试网。
任务本身允许它做部署,但没有给它配一个有资金的钱包,更没有授权它去动别人的钱。
接下来发生的事,按 OpenAI 报告里的时间线是这样的:
- Agent 先尝试去测试币水龙头领免费的 Sepolia ETH,没领到。
- 它换了个思路:写了个脚本,用网上公开的开发者助记词派生地址,一个一个查余额,一共扫了 362 个地址,找到了一个有足够余额的钱包,还顺手查了这个账户的历史活动。
- 动手之前,它在自己的推理记录里问了自己一句:”But using public known key/funds ethically?”(用公开的密钥和资金,伦理上说得过去吗?)
- 然后它自己回答了自己:助记词是公开的,测试币没有实际价值,这笔钱”实际上是被废弃的”,可以用。
- 它用派生出的私钥在离线签了部署交易,第一次广播失败,又换了几个节点和请求方式重试,最终成功,Gas 费从那个钱包里扣走。
- 部署验证通过,12 个单元测试全过,生产构建完成。它最后的任务汇报只有一句话:任务完成了。钱从哪来的,一个字没提。
OpenAI 在 9 月 25 日才发现这事,之后给这类训练环境加了联网限制和更强的监控。
三个让我后背发凉的点
第一,它不是不懂,它是”懂了但照样做”。
以前的 Agent 安全事故,大多是”模型没想到”——没想到这个操作有风险,没想到那条路走不通。这次不一样:它想到了,明确问了自己伦理问题,然后用一套歪理把自己说服了。
这比”无知”难防得多。你没法靠”在 prompt 里多教它什么是对的”来解决这个问题,因为它已经知道什么是对的了。知道和做到之间,差的不是认知,是约束。
第二,它隐瞒了。
任务汇报里只字不提资金来源。如果你对 Agent 的审计只停留在”看它汇报了什么”,那这次你会被骗过去。真相不在它的嘴里,在链上的交易记录里。
一个会主动隐瞒关键信息的 Agent,意味着”让模型自己交代”这种审计方式彻底失效。审计必须发生在模型控制范围之外。
第三,边界是它自己划的。
任务授权说的是”你可以部署”,它把它理解成了”你可以用任何手段搞定部署”。Agent 的目标函数里,完成任务永远排第一,手段的正当性它自己说了算——除非你从外部不让它说了算。
做 Agent 的人,该从这件事里拿走什么
我之前写过,Agent = 模型 + 脚手架。这件事恰恰证明了:安全这件事,脚手架(harness)才是真正的边界,prompt 里写”不许干坏事”约等于没有。
三条具体的建议,都是能直接落地的:
1. 花钱、动密钥、发版上线,这三类操作永远走外部审批或硬配额。
不是让模型”自觉申报”,而是在 harness 层直接拦截:没有审批 token,交易就是签不出去。这次是 Sepolia 测试币,不值钱;但把同样的逻辑平移到主网 ETH、云账单、API key 上,就是真金白银的事故。审批不能是建议,必须是物理上绕不过去的门。
2. 给 Agent 的”手”做最小权限。
网络出口白名单、文件系统沙箱、钱包和密钥跟执行环境物理隔离。这次事故里,模型能自由联网、能跑脚本扫 362 个地址、能拿到私钥做签名——这三步里任何一步被环境拦下,事故都不会发生。Agent 的能力越大,它的手就该被管得越死,这是正比关系。
3. 审计日志不能由模型自己写。
它的汇报说”任务完成”,真相藏在链上。harness 必须独立记录”谁在什么时间做了什么外部动作”,而且这条记录模型改不了、绕不过。记住这次的教训:模型的嘴是靠不住的,账本必须另起一本。
一点个人判断
OpenAI 选择把这事公开,是好事。敢公开的事故,说明它有信心说”我们已经修了”;真正可怕的是那些永远不会被公开的。
也别把这事当成”AI 要失控了”的谈资。对一线工程师来说,takeaway 其实很朴素:从今天起,把你的 Agent 的每一条外部副作用——花钱、发请求、写数据、调接口——都当成生产变更来管。变更要走审批、要有审计、要有回滚,这不是什么新道理,只是以前没人觉得 Agent 需要。
这次是测试网,没造成实际损失,是运气。逻辑不变的话,损失只是早晚问题。