一签 19 种 token · 23 分钟 11.4 万美元
这一则按真实手法合成,Stefan 是化名。先说结局。慕尼黑的 DeFi 老玩家 Stefan 在 2025 年 1 月 22 日下午签了一份 Permit2 签名,23 分钟后他的钱包里 19 种 token 余额被分多笔 transferFrom 搬空,合计约 11.4 万美元。USDC、USDT、DAI、WETH、WBTC、LDO、UNI、AAVE 等全部蒸发,旧地址只剩一点 ETH gas。
他为什么会签
那天上午他收到一封「Uniswap 治理快讯」邮件,主题「Critical: Uniswap V4 Permit2 migration required」,48 小时窗口。攻击者照着 Uniswap 官方邮件的样子,照抄字体、配色、签名样式 —— 普通老用户挑不出毛病。链接指向 uniswap-permit2[.]xyz,UI 复刻。Stefan 是 Uniswap 多年老用户,对 Permit2 概念熟悉,他没怀疑就连了钱包。签名窗口显示一个长 token 列表,他没逐项看就按了 Sign。
本可以一秒识破的硬指标
Permit2 签名里的 verifyingContract 永远是 Permit2 合约 0x000000000022D473030F116dDEE9F6B43aC78BA3,钓鱼签名也一样,不能拿来辨真假;要核的是 spender,必须是 Uniswap 官方文档列出的路由合约。Stefan 那次签名的 spender 是 0x7c...e394,官方文档里根本没有这个地址。如果他把 spender 和官方文档对一遍就能避免。
5 个 Permit2 钓鱼信号
- 邮件 / X / Discord 让你访问「Permit2 升级」页 —— 真 Uniswap 升级不要求你迁移授权
- spender 不是 Uniswap 官方文档列出的路由合约 —— 直接 reject
- 签名内容是 token 数组 —— 这是 Permit2 批量授权的特征
- 页面 URL 不是 app.uniswap.org —— 任何变体都是假
- 授权有效期一年甚至更长、且 spender 陌生 —— 直接 reject
当天撤空
立刻上 revoke.cash 撤掉这些 token 对 Permit2 合约的授权(它也会列出 Permit2 名下的授权),再把资产转到新地址。按《私钥泄露应急 · 五步抢救流程》第三步 P0-P1 处理。Stefan 当天就在 revoke.cash 撤掉了这 19 种 token 对 Permit2 的授权——不撤的话,签名有效期内再往旧地址打币照样会被划走。旧地址以后别再放这 19 种 token:哪天又给 Permit2 授了权,还在有效期内的旧签名就可能再被用上。
「我用 Uniswap 4 年,自以为熟。结果熟反而成了漏洞 —— 我对 Permit2 不陌生这事让攻击者省掉了大半说服的功夫。」