Nomad跨链桥遭遇黑客被盗损失数亿美元,行业最强白帽解析漏洞!

必查客 版主 发布在 必查客/BitChecker
 4951  0

Nomad事件今天霸屏币圈,短短几个小时被黑上亿美元。而且Nomad在受到攻击之后,TVL也在几个小时内撤出了将近2亿美元。


在之前的区块链项目被黑的事件中,曾有用户用Any Swap跨链被黑十几万,通过对漏洞的追踪,最终发现在Any Swap下,黑客可以利用随机数种子反推出用户的私钥来达到盗取用户资产的目的。


Any Swap这种破解私钥的技术可能需要一定的技术门槛,但是这次Nomad漏洞是为数不多的,即便是普通人不懂技术和代码也有机会可以实现的攻击,所以事件才会发酵如此之快。此次事件也受到业内白帽的关注。


@samczsun是业内知名的白帽,相信大家都不陌生,在早年有一个项目漏洞,他本可以轻易将资金转走,但是他却花了整整一个通宵,几经转折联系到了项目方修补了这个漏洞,而此次他也对Nomad事件做了一个详细的分析。

 


我们不妨来一起来回顾一下此次被盗事件漏洞问题:


从电报中@samczsun发现链上的资产在迅速的撤出,于是他去查询了链上具体的交易信息,发现了一些端倪。


当一个账户发出0.01个WBTC的时候会返回给100个WBTC,当然这不排除是某种促销活动,于是@samczsun继续进行一些链上跟踪后发现了问题,在Moonbeam上桥接的0.01个WBTC,不知是何原因以太坊却收到了100个

 


通过查询合约代码@samczsun定位到了一个严重的问题。合约中有一个叫做process的方法,这个方法的作用是,首先它会验证信息确保收到的信息是被证明过的,如果信息没有问题就执行。正常来说这样的逻辑和过程是没有任何问题的,但是问题就在于这个验证。


Messages是一个Map,Map的结构是键值对的,如果在这个map里面没有找到对应的键,根据solidity的规则会返回一个默认值0,而这个键是从哪里来的?

 

我们可以从代码中看到,key是从process的参数message的字节码中解析出来的,也就是说键是从外部传入的,现在想要黑掉这个合约,我们的必要条件基本上都具备,关键验证信息从外部传入,这个是我们已经确认的,剩下的只要证明acceptable Root 如果能够接受0返回true,那就能把这个验证绕过。

 

@samczsun在区块链浏览器中调用了acceptable Root这个方法,并把参数0传入,返回的结果正如大家所见到的是true,Nomad项目被黑的核心原因终于被找到。


黑客利用这个漏洞,找一笔有效的交易反复发送构造好的交易数据,来抽取跨链桥被锁定的资金,这也就是为什么网上说 这次攻击普通人也能做到的原因,现在Nomad的资金已经基本上都空了。


对此次事件网上大家的看法也不一致,有人称第一笔转出是黑客所为,后面极有可能是散户捡钱,也有用户猜测是项目方看到情况已经失控,于是自导自演。


至于真相如何我们不得而知,此次的事件中损失最严重的是不久前刚给nomad投资的机构,受nomad跨链桥被攻击的影响,包括与nomad跨链桥相关的Moonbeam也受到不小的影响,但反而evmos因为Moonbeam暂时关闭的EVM功能,而Moonbeam作为evmos与以太坊生态的主要跨链桥,被盗的资金需要通过evmos作为出金渠道,反而迎来了一波不小的涨幅。


跨链桥被盗屡见不鲜,目前区块链技术还在非常早期的阶段,在早期的阶段虽然有着非常大的红利,但同时也伴随着巨大的风险,希望大家还是小心谨慎。