一签 19 种 token · 23 分钟 11.4 万美元
先说结局。慕尼黑的 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 真 governance 邮件列表,照抄字体、配色、签名样式 —— 普通老用户挑不出毛病。链接指向 uniswap-permit2[.]xyz,UI 复刻。Stefan 是 Uniswap 多年老用户,对 Permit2 概念熟悉,他没怀疑就连了钱包。签名窗口显示一个长 token 列表,他没逐项看就按了 Sign。
本可以一秒识破的硬指标
Permit2 真实部署地址是 0x000000000022D473030F116dDEE9F6B43aC78BA3 —— 一个 vanity address,开头大量 0。社区里把这串前缀「0x000000000022」当成快速识别法。任何 spender 不以这串开头的 Permit2 签名,默认假定恶意。Stefan 那次签名的 spender 是 0x7c...e394,完全不是这个前缀。如果他扫一眼前 6 位就能避免。
5 个 Permit2 钓鱼信号
- 邮件 / X / Discord 让你访问「Permit2 升级」页 —— 真 Uniswap 升级不要求你迁移授权
- spender 不以 0x000000000022 开头 —— 直接 reject
- 签名内容是 token 数组 —— 这是 Permit2 批量授权的特征
- 页面 URL 不是 app.uniswap.org —— 任何变体都是假
- deadline 距离现在 30 天 / 365 天 —— 真 Permit2 通常分钟级
6 周分批撤退的标准节奏
Permit2 签出无法撤销,唯一办法是把列表里所有 token 转到新地址。按《私钥泄露应急 · 五步抢救流程》第三步 P0-P1 处理。Stefan 后来花了 6 周分批把剩余资产搬走 —— 一次性大额转账可能触发其他 Permit2 协议的连锁警报。被钓后的「分批撤退」是 2025 年的标准应对节奏。旧地址永久不再持有这 19 种 token 中的任何一种,因为攻击者签名还在有效期内,再到账就被 sweep。
「我用 Uniswap 4 年,自以为熟。结果熟反而成了漏洞 —— 我对 Permit2 不陌生这事让攻击者省了 80% 的说服成本。」