我拉了一张 100 人的“聪明钱”名单,发现攻击者花 500 美元就能买进去。
这不是某个合约的 bug。是“公开名单 + AI 自动执行 + 钱包授权”叠出来的攻击面。攻击者不需要攻破项目方,只需要挤进那张名单。
一、名单是怎么变成攻击载荷的
先把三个数字摆在一起:
• 全量 4,942 个早期铸造地址;
• 筛完 100 个“500 美元流动性 + 20 笔交易”的钱包;
• 推文说其中 64 个各持 5 亿枚。
可全量表里有 100 个地址持 5 亿;筛出来的那 100 条名单里,0 个。三个数字,三个口径。
更关键的是门槛:500 美元流动性 + 20 笔交易,就能进“聪明钱”名单;5 亿枚按现价约 4,000 美元,也能买到一个“聪明钱”标签。这不是信誉,是门票。
二、攻击链六步
1)买门票。攻击者买 5 亿枚,或刷 20 笔交易,挤进 100 名单。
2)部署“免费 mint”。合约在 preview 时走 benign 分支;execute 时用 transferFrom、permit2、第二笔交易,或者 proxy 在 preview 后升级实现。
3)用名单里的钱包去 mint,制造“聪明钱在打新”的信号。
4)跟单者的 Agent 检测到,preview 显示“free mint / no authority change”,自动执行。
5)合约用之前的 approval 或 permit2 把 USDT、代币、BNB 转走;日限额可能不覆盖 approval。
6)用户发现时,approval 还在、会话还没过期;攻击者可以慢慢扫尾。
这不是合约 bug,是“名单 + 自动执行 + 授权”三件事叠出来的。
三、为什么“安全 prompt”救不了
很多教程会给你一段很长的安全提示:preview、审计、不授权、只做精确金额、NFT metadata 不可信。这些话本身没错,但它们是文字,不是代码边界。
• preview 是模拟,不是保证;proxy 可以在 preview 后升级,状态也可以变。
• metadata、名单表格、mint 页面都能藏指令;模型可能被绕过。
• 钱包 skill 自带 dailyLimit、token 白名单、高风险交易 App 确认、approvals list;但推文让你装 `--all`、自动 mint,正好绕开这些闸。
• 我抓到的官网说明文件还指向旧铸造合约;白皮书说那个合约已退役。Agent 照做,可能把钱打进不会再 mint 的地址。
四、我会先查哪几个数
1)合约地址只认白皮书和区块浏览器,不认官网缓存;先小额测试。
2)日限额调到你能接受的最低档;token 白名单;高风险交易改成 App 确认。
3)每次 mint 后打开授权记录,搜 unlimited / permit2;有就撤销。
4)只装单个钱包 skill,不装 `--all`;专用热钱包,余额只放 gas + 本次 mint。
5)看到“聪明钱名单”,先数三个数:全量多少、筛完多少、真正还持币多少;再看池子深度。
五、讨论
这条攻击链里,最该先补的是哪一环?
A. 名单:公开表格不该直接进 Agent 上下文;
B. 自动执行:免费 mint 也必须逐笔确认;
C. 授权:approval / permit2 要有硬上限和自动撤销。
我选 B。因为名单可以换,授权可以撤,只有“自动执行”是攻击者真正需要的那个动作。