日前Stargate 跨链桥的底层协议LayerZero更新了默认的交易验证合约,经Cobo 区块链安全团队分析,此次更新修复了之前版本中存在的严重漏洞,该漏洞可能导致所有依托LayerZero 构建的跨链项目的资产受到影响。
Stargate Finance(https://stargate.finance/ )是近日最受人瞩目的跨链桥项目,截至发文时TVL 已超过35 亿美金。
Stargate 跨链桥底层基于LayerZero 实现跨链消息传递。LayerZero 完成跨链消息传递的基本原理是:
Oracle会将源链上的blockhash 和block receiptsRoot 提交到目标链上
Relayer 会将源链上跨链消息所在交易的receipt 以及该receipt 与block receiptsRoot 的路径关系提交到目标链上,此时目标链上的交易验证合约会基于Ethereum MPT [1] 的依赖关系,对Relayer 所提交的receipt 和Oracle 所提交的receiptsRoot 的对应关系进行验证
如果验证通过,该receipt 被认为是合法的receipt,并向上层协议转发,触发后续的跨链资产操作。
LayerZero 3 月28 日在未发表任何公告的情况下更新了跨链使用的验证合约[2]。Cobo 安全团队通过对比原始验证合约(MPTValidator)和新验证合约(MPTValidatorV2)代码[3],发现本次更新是对之前重大安全漏洞的修复。
补丁核心代码如下:
原始漏洞代码在进行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 及上层协议(例如 Stargate)正常运作的基石。虽然LayerZero项目方已经修复了目前明显的漏洞,但是不排除还存在其他被攻击漏洞的可能性。此外,LayerZero 项目的关键合约目前大都还被 EOA 控制,没有採用多签机制或者时间锁机制。如果这些特权 EOA 的私钥一旦洩漏,也可能会导致所有上层协议的资产受到影响。
在此,Cobo 区块链安全团队提醒投资者注意新项目的风险,同时呼吁 LayerZero 项目方在对合约代码进行深度审计的同时,也尽快将目前 EOA 控制的特权转移给多签或者时间锁合约,减少攻击风险敞口。
Reference:
https://eth.wiki/fundamentals/patricia-tree
https://etherscan.io/tx/0xf4f0495bfed37d4d95b3342ead0962433c7973f240b9b0739faa91e6ccac9d40
https://www.diffchecker.com/RJdDTCx7
Cobo Labs 希望协助加密世界投资者规避风险、提高收益,为传统金融机构、风险投资公司、通证基金、个人投资者、交易所、媒体等伙伴提供客观、有深度的数据分析。
关于亚太最大的加密货币托管及资管平台Cobo:我们向机构提供领先的安全托管与企业资管业务;我们向全球高净值合格投资人提供加密数字钱包业务和丰富灵活的定期与结构化产品,我们关注金融创新,并于2020 年第三季度成立了第一家面向全球机构的基金产品「DeFi Pro」。