你钱包里有多少授权,你还记得吗?
每次你和 DeFi 协议互动,第一步几乎都是授权。你批准了一个智能合约,让它有权代表你移动某个代币。这个步骤感觉像是开门,一次性的动作,点击同意或授权然后继续往下一步走。问题是那扇门并不会自动关上。
代币授权不会因为你完成交易就失效,不会因为你关掉浏览器就消失,不会因为你断开钱包连接就终止。你去年授权给某个 DEX 的权限,今天还在。你试用过一次、再也没有回去的那个协议,依然持有你给它的授权。除非你主动撤销,否则那些授权会一直存在。
2024 年 3 月,一个叫 Dolomite 的 DeFi 协议被攻击,损失超过 180 万美元。攻击者利用的不是什么复杂的漏洞,而是一个 2019 年部署、早已停用的旧合约。那个合约停用了好几年,但当年使用过它的用户,授权从来没有被撤销。攻击者找到了那个被遗忘的入口,走了进去。受害者什么都没做,只是在五年前点过一个授权按钮,然后忘了。
授权的问题不只是被遗忘。很多协议预设要求的是无限授权。不是「允许这次交易移动 100 USDC」,而是「允许这个合约永久移动你所有的 USDC,无上限」。这样设计对协议来说更方便,用户只需要授权一次,之后每次交互都不需要重新批准。但这也意味着一旦那个合约出问题,攻击者可以拿走的不是这次交易涉及的金额,而是你钱包里所有这个代币。
你和那些协议的关系不是静态的。合约可以被升级,开发团队可以离开,协议管理员密钥可以被攻击者取得。当其中任何一个意外发生,攻击者不需要你的私钥,他只要你过去曾经在这个地方给出过授权就已经足够。你已经签署授权的钱包,在不知情的情况下,也没有签署任何新交易的情况下被清空。
这是 Web3 里少有人主动去想的一层风险。协议按照设计运作的时候,那些授权静静地待在那里,没有人注意到它。它只在出问题的时候才变得可见,但那时候通常已经太晚。
你知道目前有多少个智能合约持有你的授权吗?或许是时候定期检视一下自己钱包的授权情况了。
授权是可以被看见的,也是可以被撤销的。你的钱包里存在一份你可能从来没有完整看过的清单,记录着你曾经给出过的每一个授权。把这份清单摊开来看,是理解自己钱包授权风险的第一步。ZenRealm 的钱包授权检查工具可以帮你做到这件事。输入你的钱包地址,几秒内就能看到你在主流 EVM 网络上目前还有效的所有授权。
延伸阅读: