上周三凌晨,阿凯在Discord收到一条“白名单 mint”链接。他点开后,页面弹出tpwallet连接请求的。一笔Gas费不到0.3美元的签名。五分钟后,钱包里0.8 ETH被转到一个陌生地址。
他截图给我看时,tpwallet的交易记录里只有一行“Approve”,没有转账明细。问题就出在这里,他签的就是授权。我让他把tpwallet切到以太坊浏览器,查授权记录。0x7a3开头的合约获得了USDT无限额度。另一个合约能调用他的ETH。阿凯说,当时tpwallet弹窗里有一串英文,他扫了一眼就点了确认。案例我见过七八次的,tpwallet的交互界面把“授权”和“交易”分得不算明显,新手很容易混淆。
更麻烦的是授权不会立刻扣钱,等发现时,资产已经经过两三个中转地址。撤销过程倒不复杂。tpwallet内置的“授权管理”能直接列出风险合约,阿凯逐个撤销了,花了不到4美元Gas。他顺手发现去年玩某链游时,还给一个已经跑路的DApp留了无限授权。那天晚上的,他把tpwallet里的资产分成两个钱包,一个只放几百U日常交互吧?另一个冷存。tpwallet的助记词他之前截过图,也删了。重新生成了一套。
我的观察是tpwallet这类多链钱包把入口做得越来越顺。安全责任全压在用户身上。弹窗里的“确认”按钮很大。
可背后的权限范围、合约地址、授权额度。有些人根本不看的。
阿凯后来把tpwallet更新到最新版,开了指纹解锁和交易密码。他说,现在每次签名前会停三秒的。看看是不是“授权”。这个习惯比任何安全插件都管用了。还有个小细节,阿凯被盗的那笔ETH,最终进了Tornado Cash。追不回来。tpwallet客服只能提供交易哈希。
链上世界没有撤回键了。他把这次经历发群里,有人回“我也里面过”了。tpwallet本身没漏洞,漏洞是那个点得太快的拇指。