Nomad被黑解析|致命漏洞损失1.9亿美元,白帽已返还近900万美元

欧科云链研究院
欧科云链研究院 机构得得号

Aug 03, 2022

摘要: 本文将从数据概览、事件原因、详细经过、漏洞分析四个维度,对事件展开深度分析。

8月2日,欧科云链OKLink安全团队监测到Nomad Bridge遭受攻击,智能合约中的WETH和WBTC被转出,损失约1.9亿美元。

编辑|小欧

分析|OKLink安全团队

继6月24日,Horizon跨链桥被黑损失1亿美元之后,如今Nomad跨链桥也面临黑客攻击损失近2亿美元,为何黑客如此“钟爱”跨链桥?

伴随区块链及链上应用的增长,多链交互需求让跨链桥业务迎来了爆发性增长。而有Money效应的地方,就摆脱不了“黑暗”的滋生,当跨链桥在为用户提供便利的同时,庞大的资金量也吸引了众多黑客的关注。

回顾此次Nomad跨链桥被黑事件,堪称是Web3史上最混乱的黑客攻击之一。今天,本文将从数据概览、事件原因、详细经过、漏洞分析四个维度,对事件展开深度分析...

数据概览

累计涉及1251个ETH地址

据欧科云链OKLink数据追踪显示,此次Nomad Bridge 攻击事件共涉及1251个ETH 地址,涉及14个资产种类,涉案金额约1.9 亿美金;其中包含 12个ENS地址,ENS 地址涉案金额超 6980 万美金,约占总金额的38%;在利用漏洞获利后,直接进行交易的地址数达739 个,占比近60%。

但值得注意的是并不是所有地址都是恶意攻击,已知已有白帽骇客公开表态愿意归还资金。截至发稿前,被OKLink多链浏览器标记为“Nomad官方被盗资金回收地址”,目前已返还近900万美元资产。

图片源:OKLink

此外,OKLink多链浏览器目前已对其余黑客地址进行了7*24H监控,后期若发生相关地址异动,将第一时间同步大家。

左右滑动查看更多地址信息

事件起因与漏洞分析

这次漏洞产生的原因是 Replica 合约在初始化的时候将 confirmAt[0x00] 赋值为1,使得storage变量 messages中未初始化的键值对都能够成功通过检测。

大约从第 15259101 个区块开始,攻击者对Replica 合约的 Process 函数进行了多次的调用。

图片来源:OKLink

对(0xb1fe开头的)交易哈希进行分析可以看到,当交易执行到acceptableRoot函数的时候,可以发现很不寻常的地方。

从下图可以看出,acceptableRoot函数的输入参数为全0,且该函数返回结果为 true。

根据_messageHash获得的 messages[_messageHash] 值为 0 字符串,有两种情况,一是 _messageHash 在 messages mapping 中没有对应的值,二是存在有对应值但被设为了0,并且我们从返回结果true得知,输入0值可以绕过这个 require 检查,这是很异常的情况。

进入到acceptableRoot函数,当输入_root 为0时,意味着 confirmAt[_root] 满足不为零且小于等于 block.timestamp 的值。

而confirmAt[] 只在initialize,update和 setConfirmation三个函数中出现被修改的情况,导致此次攻击事件发生的问题出现在 initialize 函数中。

可以看到在调用initialize函数对合约变量进行初始化的时候,将confirmAt[_committedRoot] 的值设为了1。

在该合约的初始化交易中可以看到,输入的所有变量都为0,也就是说在初始化阶段 confirmAt[0x00..0] 的值被设为了1。

这也就直接导致了 acceptableRoot 函数中发生了不合理的绕过。

初始化交易哈希:

0x53fd92771d2084a9bf39a6477015ef53b7f116c79d98a21be723d06d79024cad

回到process 函数中,在了解了上述漏洞产生的原因后,只需要每次输入没有被使用过的 _messageHash ,就能在 messages mapping 中获取到 0 值,从而绕过 !proven 的检测,最终从跨链桥上盗取资产。

此次漏洞的核心就在对confirmAt这个mapping赋值的过程。从initialize函数输入参数可以看到,_committedRoot使用了0x00。一般情况使用0值做初始化参数没有问题,但是在Nomad的这个场景下,就导致了任意message都能通过检测的安全漏洞。

也就是说,攻击者只需要找到一个有效的交易,用自身地址找到/替换对方的地址,然后重新广播它就能获得Nomad跨链桥上资产。

OKLink安全分析师建议,未来在initialize函数中也需要进行严格的安全检查和判断,避免安全事故的发生。

链上安全无小事

马虎大意不可取

此次Nomad事件影响十分广泛,参与地址数众多,其中出现了许多ENS地址。主要原因是执行攻击的门槛成本低,后续参加的攻击者只需要将先前攻击者的calldata 稍作修改就可以完成攻击,很多普通用户通过社区传授的“成功经验”,对Nomad跨链桥趁火打劫,过了把“黑客瘾”。

加上项目方在攻击事件发生时,没有相应的项目应急停止机制,因此才会造成近2亿美元的损失。

近年来,跨链桥相关的黑客攻击主要发生在跨链之前和签名处,普遍均为合约漏洞,当然也存在类似此次Nomad官方马虎大意造成的被盗事件。

对于越来越多的跨链项目及项目合约安全,欧科云链OKLink安全团队提醒:

1.项目上线前对合约进行安全审计;

2.合约调用接口需要严格排查其适配性;

3.版本更新时需要对相关接口及签名安全进行重新评估;

4.需要对跨链签名者进行严格审查以保证签名不被恶意人员控制;

作为全球领先的区块链数据与技术服务提供商,未来欧科云链将持续发挥链上大数据公司优势,跟进分析链上安全事件,为Web3时代的链上安全保驾护航。

链得得仅提供相关信息展示,不构成任何投资建议
本文系作者 欧科云链研究院 授权链得得发表,并经链得得编辑,转载请注明出处、作者和本文链接

更多精彩内容,关注链得得微信号(ID:ChainDD),或者下载链得得App

分享到:

相关推荐

    评论(0

    Oh! no

    您是否确认要删除该条评论吗?

    分享到微信