结局 · 1.2 万 USDC 在他没签任何东西的情况下被划走
这是这个案例最反常的一点。香港 DeFi 用户 Eric 在 2025 年 4 月 4 日想做一笔 swap,过程中 MetaMask 从来没弹过签名窗口。但他点完「Swap」、等了 1 分钟,扩展显示「Transaction failed: insufficient gas」 —— 等他想再试,MetaMask 里的 USDC 余额从 1.2 万掉到 0。同一批中招的 88 个用户合计损失 21 万美元。
这怎么可能
因为他装了一个声明 host_permissions: *://*/* 的恶意扩展。Chrome 扩展之间可以通过 messaging API 通信,这种全权限扩展可以读取并劫持其他扩展的弹窗 —— MetaMask 发起签名请求时,假扩展抢先把弹窗截走、自己模拟用户点击 Confirm,整个过程对用户完全透明。从 Eric 的视角看,他没签任何东西。但从链上看,他亲手签了一笔 setApprovalForAll + transferFrom。
他为什么会装这个扩展
Eric 想图方便。每次做 swap 都要打开 app.uniswap.org 太麻烦,他去 Chrome Web Store 搜「Uniswap」看有没有专用扩展。结果真搜到「Uniswap - Decentralized Exchange」,开发者标 Uniswap Labs,安装数几千,评分 4.5。他没怀疑就装了。
这里隐藏一条所有 DeFi 用户都该知道的硬规则:Uniswap 官方没有任何 Chrome / Firefox / Edge 浏览器扩展产品。所有自称 Uniswap 官方扩展的全部是假。Uniswap 只有 app.uniswap.org 网页版和 iOS / Android App。同样道理 Aave、Curve、Compound 等头部协议也没出浏览器扩展。Uniswap 官方在 2025 年 4 月专门发声明把这条钉在 X 主页置顶。
装之前应该问的两个问题
第一处:搜索之前先确认这个品牌有没有官方扩展。任何 DeFi 协议名字下面挂着「Chrome 扩展」的,先去官方网站或官方 X 找声明,确认有官方扩展产品再下载。99% 的情况下答案是「没有」 —— 因为头部 DeFi 协议都走 web app + 移动 App 路线。
第二处:安装前看 host_permissions。Chrome Web Store 上点扩展的 Details 看权限列表。「Read and change all your data on all websites」这一项相当于把整个浏览器交给扩展。装这种权限的扩展前要绝对确信是官方版 —— 任何 DeFi 协议名下、权限是 <all_urls> 的扩展,默认假定恶意。
5 个一秒识破信号
- Uniswap / OpenSea / Aave 这类协议的「Chrome 扩展」 —— 99% 是假,官方根本没出
- 扩展要求权限含 host_permissions <all_urls> —— 给了它对所有网站的读取权限
- Swap 显示 pending 很久后 failed 但余额已变 —— 假 swap 真划账的特征
- 扩展开发者名是品牌名但没经过 Chrome Verified 标记
- 装扩展前不需要「绑定 Uniswap 官方账户」 —— Uniswap 根本没账户体系
已经装过怎么办
卸扩展不够 —— 它可能已经在浏览器里植入持久化恶意脚本(service worker、native messaging host)。换 Chrome profile 或重装 Chrome 是最低限度的动作。资产部分按《私钥泄露应急 · 五步抢救流程》第三、四步:把链上资产转新地址、把所有 approval 撤掉。
Eric 后来把整台电脑重装系统 —— 因为恶意扩展可能在浏览器之外植入 keylogger 或剪贴板劫持。重装是被这类扩展钓中后的标准动作,单卸扩展、单换 profile 都不够。
「装任何 Chrome 扩展前先去那个品牌的官方网站和官方 X 找『我们的浏览器扩展是 XX』的声明。没有声明 = 没有官方扩展 = Chrome Web Store 上任何同名扩展都是假的。这一条 30 秒检查能挡掉这类钓鱼的全部入口。」