Cobo安全团队:Stargate跨链桥的底层协议LayerZero重大安全漏洞分析_ROO:ZER

日前Stargate跨链桥的底层协议LayerZero更新了默认的交易验证合约,经Cobo区块链安全团队分析,此次更新修复了之前版本中存在的严重漏洞,该漏洞可能导致所有依托LayerZero构建的跨链项目的资产受到影响。StargateFinance是近日最受人瞩目的跨链桥项目,截至发文时TVL已超过35亿美金。Stargate跨链桥底层基于LayerZero实现跨链消息传递。LayerZero完成跨链消息传递的基本原理是:Oracle会将源链上的blockhash和blockreceiptsRoot提交到目标链上Relayer会将源链上跨链消息所在交易的receipt以及该receipt与blockreceiptsRoot的路径关係提交到目标链上,此时目标链上的交易验证合约会基于EthereumMPT的依赖关係,对Relayer所提交的receipt和Oracle所提交的receiptsRoot的对应关係进行验证如果验证通过,该receipt被认为是合法的receipt,并向上层协议转发,触发后续的跨链资产操作LayerZero3月28日在未发表任何公告的情况下更新了跨链使用的验证合约。Cobo安全团队通过对比原始验证合约和新验证合约代码,发现本次更新是对之前重大安全漏洞的修复。补丁核心代码如下:

原始漏洞代码在进行MPT验证时,通过外部传入的pointer来获取下一层计算所用到的hashRoot。这裡使用solidity底层add,mload等汇编指令从proofBytes中获取hashRoot,由于没有限制pointer在proofBytes长度内,因此攻击者可以通过传入越界的pointer,使合约读取到proofBytes以外的数据作为下一层的hashRoot。这样就存在伪造hashRoot的可能,进一步导致伪造的交易receipt可以通过MPT验证。最终可造成的后果是,在Oracle完全可信的前提下,Relayer仍可以单方面通过伪造receipt数据的方式来实现对跨链协议的攻击,打破了LayerZero之前的安全假设。目前LayerZero协议的Oracle是一个类似多签的合约,三位admin中的两位提交相同的数据后,会被认为数据是有效的。但是Relayer是单签EOA控制,任何一个Relayer都可以提交攻击数据,完成所有的攻击流程。补丁后的代码使用传入的path并使用safeGetItemByIndex函数获取MPT下一层的hashRoot,保证了hashRoot存在于当前的proofBytes中,从而可以使MPT验证正确的进行下去。此次爆出漏洞的代码是LayerZero协议中最核心的MPT交易验证部分的代码,是整个LayerZero及上层协议正常运作的基石。虽然LayerZero项目方已经修复了目前明显的漏洞,但是不排除还存在其他被攻击漏洞的可能性。此外,LayerZero项目的关键合约目前大都还被EOA控制,没有採用多签机制或者时间锁机制。如果这些特权EOA的私钥一旦泄漏,也可能会导致所有上层协议的资产受到影响。在此,Cobo区块链安全团队提醒投资者注意新项目的风险,同时呼吁LayerZero项目方在对合约代码进行深度审计的同时,也尽快将目前EOA控制的特权转移给多籤或者时间锁合约,减少攻击风险敞口。Reference:https://eth.wiki/fundamentals/patricia-treehttps://etherscan.io/tx/0xf4f0495bfed37d4d95b3342ead0962433c7973f240b9b0739faa91e6ccac9d40https://www.diffchecker.com/RJdDTCx7

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金智博客

[0:15ms0-4:183ms