这是一次被盗走80,000 颗以太的交易纪录,是目前Defi 金额第二大的被盗事件。 https://etherscan.io/tx/0x24c7d855a0a931561e412d809e2596c3fd861cc7385566fd1cb528f9e93e5f14 该地址已经被etherscan 举报为黑名单了,钱包里面目前还有93,750 颗ETH https://etherscan.io/address/0x629e7da20197a5429d30da36e77d06cdf796b71a 然后Wormhole 很快也发现自己出问题了,对骇客隔空喊话,并且提供一白帽协议,只要骇客愿意归还所有被盗的wETH,就提供给他1,000万美金的奖金! 而且可以瞬间洗白变成合法合理的白帽骇客,我猜应该有很大的机率会接受这deal。 我们就来看看事情最主要的原因。 在Wormhole 里面要mint ETH 的流程是要执行 complete_wrapped -> 然后需要transfer message -> transfer message 是透过post_vaa 这个function 产生-> 透过verify_signatures 去验证签名是不是合法的-> 然后用到了solana sdk 提供的一个function load_instruction_at,也是这次漏洞发生的主因,不需要透过系统的地址就可以执行。 https://github.com/solana-labs/solana/blob/7ba57e7a7c87fca96917a773ed944270178368c9/sdk/program/src/sysvar/instructions.rs#L180-L188 load_instruction_at在Solana 1.8.0 之后因为安全性的问题已经弃用,改用 骇客就先试打了0.1 ETH 拿到正常verify_signatures 的参数去做伪造,反正系统不会检查,这点相当的聪明。
|