本周二,跨链通讯协议 Nomad 被曝遭遇黑客攻击,导致其代币桥内的 1.9 亿美元资金几乎全被“掏空”:据 Defil Lama 统计数据显示,原本 Nomad 的总价值锁定(TVL)为 1.9 亿美元,但几个小时后其官方账户中只剩下了 651.54 美元。
尽管周二一早,Nomad 官方就发推特表示已得知此事,并称目前正在调查,但这起事件还是在 Web3 领域引起了巨大争议:
Terra 研究员 FatMan 认为本次 Nomad 遭遇的攻击是“真正的加密市场中首次发生的去中心化抢劫”。
Paradigm 研究合伙人兼安全主管 Samczsun 也发推表示:“刚刚发生的 Nomad 事件是我在 Web3 中见过的最混乱的黑客攻击之一。”
更令人意外的是,最终导致了这 1.9 亿美元损失的源头,竟然只是一个“低级漏洞”。
大量资产从 Nomad 代币桥转移出去
具体来说,Nomad 是以太坊、Avalanche、Milkomeda 和 Moonbeam 之间跨链转移的代币桥梁,特点在于不依赖大量外部方来验证跨链通信,可通过一种名为“optimistic”机制,让用户可以安全地发送消息和桥接资产。
最初注意到不对劲的是一名推特用户 @spreekaway:“Nomad 代币桥变得很‘崎岖’???看起来非常可疑。”从他提供的截图来看,彼时正有大量资产从 Nomad 代币桥转移出去,这显然不太寻常。
对此,Paradigm 研究合伙人兼安全主管 Samczsun 的第一反应:可能是 Token 小数点的配置有误。从他的视角来看,当时跨链桥似乎正在进行一个 “发送 0.01 WBTC,返还 100 WBTC”的促销活动。
最初 Samczsun 是不信的,但在 Moonbeam 上进行了一些手动挖掘后,他确认了这一事实:“虽然我从 Moonbeam 只转出了 0.01 WBTC,但不知道为什么以太坊上却收到了 100 WBTC。”也就是说,这不并是 Token 小数点的错误配置。
但与此同时,Samczsun 发现了更糟糕的一点:在 WBTC 中桥接的交易实际上并没有“证明(prove)”这个步骤,而是直接进行“process”操作。这明显不符合逻辑。
Replica 合约中存在致命错误
基于此,Samczsun 总结出有两种可能性:要么是在先前的区块中单独提交了证明,要么就是 Replica 合约中存在严重错误。然而,没有任何迹象表明最近有什么信息被提前证明了,这也就只剩下了一种可能性,即 Replica 合约中存在致命错误。
在快速浏览代码后,Samczsun 推测出了问题所在。在进行 process 操作时,用户提交的消息必须来自可接受的根(会在 prove 中被设置),其中第 185 行的“acceptableRoot”就是用来检查根是否被证明或已被确认。一般在进行 Replica 合约部署初始化时,会先把可信根设置为 0,再将其改为非 0 数据的新根,同时将旧根设为失效——而 Samczsun 怀疑,可能旧根的“0”还处于生效状态。
这个想法很好验证,Samczsun 用 0x00 来检查合同是否会接受这个根,结果居然真的通过了……
“事实证明,在升级期间,Nomad 团队将可信根初始化为 0x00。说白了,使用 0 值作为初始化值是一种常见的做法。不幸的是,在这种情况下,它也有一个很小的副作用,即会自动验证每一条消息。”
这也就意味着,攻击者可以直接构造任意消息,而这些消息都可以正常执行。这一漏洞的性质决定了本次黑客事件的规模,正如 Samczsun 所说:“这就是此次事件如此混乱的原因——你甚至不需要知道 Solidity 或默克尔树(Merkle Trees)这类技术知识,只需找到一个有效交易,用你的地址替换原本的地址,然后再推广出去。”
主动返还不当获利,可获得 20% 的赏金?辟谣!
综上,总体而言本次攻击是由于 Nomad 桥 Replica 合约在初始化时将可信根设置为 0x0,但在进行可信根修改时并未令旧根失效,导致攻击者可以构造任意消息对 Nomad 桥进行资金窃取——更重要的是,由于不需要什么专业技术,攻击者中不仅有黑客,也有好奇尝试的许多“路人”用户。
文章开头提到 Terra 研究员 FatMan 对这场攻击的评价也正因如此:“在公共 Discord 服务器上弹出的一条消息称,任意一个人都能从 Nomad 桥上抢 3 千到 2 万美元:所有人要做的就是复制第一个黑客的交易并更改地址,然后点击通过 Etherscan 发送即可。”
针对这一事件,Nomad 团队事后表示目前调查正在进行中,已联系区块链情报和取证的专业公司协助,也已通知执法部门尽快处理这一情况,及时提供最新信息。
与此同时,有未知来源的消息称 Nomad 在链上呼吁攻击者返还资金:“如果你愿意将不当获利返至 nomadexploit.eth 则不会对你采取进一步行动,且可获得 20% 的赏金,按照白帽处理。”
但很快 Nomad 在官方推特辟谣称:“我们尚未提供任何返还被盗跨链资金的说明。请忽略除 Nomad 官方渠道以外的所有渠道的消息。”并于周三给出了明确资金返还地址:“请将资金发送至以下以太坊钱包地址:0x94A84433101A10aEda762968f6995c”
因本次事件可能牵扯到一部分仅因好奇而意外攻击了 Nomad 的用户,部分人主动返还了不当获利。据区块律动 BlockBeats 报道,本周三派盾在其社交平台表示,已检测到约 900 万美元 Nomad 被盗资金已被归还至 Nomad 提供的资金回收地址。
参考链接:
https://www.nftculture.com/nft-news/nomad-got-drained-for-over-150m-in-one-of-the-most-chaotic-hacks-seen/
https://defillama.com/protocol/nomad
— 活动推荐 —