热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

项目方在对合约代码进行深度审计的同时,也应尽快将EOA控制的特权转移给多签或者时间锁合约,减少攻击风险敞口。撰
项目方在对合约代码进行深度审计的同时,也应尽快将 EOA 控制的特权转移给多签或者时间锁合约,减少攻击风险敞口。

撰文:Cobo 安全团队

日前 Stargate 跨链桥的底层协议 LayerZero 更新了默认的交易验证合约,经 Cobo 区块链安全团队分析,此次更新修復了之前版本中存在的严重漏洞,该漏洞可能导致所有依托 LayerZero 构建的跨链项目的资产受到影响。

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:
1. https://eth.wiki/fundamentals/patricia-tree
2. https://etherscan.io/tx/0xf4f0495bfed37d4d95b3342ead0962433c7973f240b9b0739faa91e6ccac9d40
3. https://www.diffchecker.com/RJdDTCx7

推荐阅读
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 配置IPv4静态路由实现企业网内不同网段用户互访
    本文介绍了通过配置IPv4静态路由实现企业网内不同网段用户互访的方法。首先需要配置接口的链路层协议参数和IP地址,使相邻节点网络层可达。然后按照静态路由组网图的操作步骤,配置静态路由。这样任意两台主机之间都能够互通。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
author-avatar
名将箱包_714
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有