结局 · 1.2 万 USDC 在他以为没签任何东西的情况下被划走
这则是按真实手法合成的案例,Eric 是化名。香港的 DeFi 用户 Eric 在 2025 年 4 月 4 日想做一笔 swap,和往常一样点「Swap」,MetaMask 弹出确认窗口,他照常点了确认,没多看一眼。等了 1 分钟,扩展显示「Transaction failed: insufficient gas」 —— 等他想再试,MetaMask 里的 USDC 余额从 1.2 万掉到 0。
这怎么可能
因为他装了一个声明 host_permissions: *://*/* 的恶意扩展。这种全权限扩展能改写你打开的每个网页,把你要发的交易悄悄换成一笔授权,钱包弹窗里显示的就是换过的内容,Eric 没细看就点了确认。从 Eric 的视角看,他只是做了一笔没成功的 swap。但从链上看,是他自己确认了一笔 approve,攻击者随后用这笔授权把 USDC 转走。
他为什么会装这个扩展
Eric 想图方便。每次做 swap 都要打开 app.uniswap.org 太麻烦,他去 Chrome Web Store 搜「Uniswap」看有没有专用扩展。结果真搜到「Uniswap - Decentralized Exchange」,开发者标 Uniswap Labs,安装数几千,评分 4.5。他没怀疑就装了。
这里藏着一条所有 DeFi 用户都该知道的规则:协议有没有官方扩展、官方扩展是哪一个,只认官网。Uniswap Labs 确实有官方浏览器钱包扩展,但只该从 Uniswap 官网(wallet.uniswap.org)的下载按钮跳转安装;在商店里自己搜到的同名扩展,先核对开发者,再和官网跳过去的那一页对一遍。
装之前应该问的两个问题
第一处:搜索之前先确认这个品牌有没有官方扩展。任何 DeFi 协议名字下面挂着「Chrome 扩展」的,先去官方网站或官方 X 找声明,确认有官方扩展产品再下载,并且从官网给的链接跳转去装。多数协议的答案是「没有」。
第二处:安装前看 host_permissions。Chrome Web Store 上点扩展的 Details 看权限列表。「Read and change all your data on all websites」这一项相当于把整个浏览器交给扩展。装这种权限的扩展前要绝对确信是官方版 —— 任何 DeFi 协议名下、权限是 <all_urls> 的扩展,默认先当可疑,逐项核对是不是从官网跳过去装的那一个。
5 个一秒识破信号
- DeFi 协议名下的「Chrome 扩展」 —— 先去官网确认出没出过,没出过的一律是假
- 扩展要求权限含 host_permissions <all_urls> —— 等于允许它读取并改写所有网页;钱包类扩展都要这项权限,所以更要确认是官网跳转装的
- Swap 显示 pending 很久后 failed 但余额已变 —— 假 swap 真划账的特征
- 开发者名是品牌名,却没有 Chrome 应用商店的「Established publisher」徽章
- 装扩展前不需要「绑定 Uniswap 官方账户」 —— Uniswap 根本没账户体系
已经装过怎么办
先卸扩展,它的脚本会跟着一起删掉。麻烦的是当初如果还照提示装过什么配套的桌面程序 —— 那个得另外查杀,记不清就直接重装系统。资产部分按《私钥泄露应急 · 五步抢救流程》第三、四步:把链上资产转新地址、把所有 approval 撤掉。
Eric 后来还是把整台电脑重装了系统 —— 他记不清那几个月顺手装过哪些东西,与其一样样查,不如重装省心。
「装任何 Chrome 扩展前先去那个品牌的官方网站和官方 X 找『我们的浏览器扩展是 XX』的声明。没有声明 = 没有官方扩展 = Chrome Web Store 上任何同名扩展都是假的。有声明的,也只从官网给的链接跳过去装。这一条 30 秒检查能挡掉这类钓鱼的大半入口。」