1.9 亿美元被“掏空”!黑客牵头,路人“趁火打劫”,一切仅因一个低级致命漏洞

1.9 亿美元被“掏空”!黑客牵头,路人“趁火打劫”,一切仅因一个低级致命漏洞
文章图片
整理|郑丽媛出品|CSDN(ID:CSDNnews)本周二 , 跨链通讯协议Nomad被曝遭遇黑客攻击 , 导致其代币桥内的1.9亿美元资金几乎全被“掏空”:据DefilLama统计数据显示 , 原本Nomad的总价值锁定(TVL)为1.9亿美元 , 但几个小时后其官方账户中只剩下了651.54美元 。
1.9 亿美元被“掏空”!黑客牵头,路人“趁火打劫”,一切仅因一个低级致命漏洞
文章图片
尽管周二一早 , Nomad官方就发推特表示已得知此事 , 并称目前正在调查 , 但这起事件还是在Web3领域引起了巨大争议:
Terra研究员FatMan认为本次Nomad遭遇的攻击是“真正的加密市场中首次发生的去中心化抢劫” 。
Paradigm研究合伙人兼安全主管Samczsun也发推表示:“刚刚发生的Nomad事件是我在Web3中见过的最混乱的黑客攻击之一 。 ”
更令人意外的是 , 最终导致了这1.9亿美元损失的源头 , 竟然只是一个“低级漏洞” 。
大量资产从Nomad代币桥转移出去
具体来说 , Nomad是以太坊、Avalanche、Milkomeda和Moonbeam之间跨链转移的代币桥梁 , 特点在于不依赖大量外部方来验证跨链通信 , 可通过一种名为“optimistic”机制 , 让用户可以安全地发送消息和桥接资产 。
最初注意到不对劲的是一名推特用户@spreekaway:“Nomad代币桥变得很‘崎岖’???看起来非常可疑 。 ”从他提供的截图来看 , 彼时正有大量资产从Nomad代币桥转移出去 , 这显然不太寻常 。
1.9 亿美元被“掏空”!黑客牵头,路人“趁火打劫”,一切仅因一个低级致命漏洞
文章图片
对此 , Paradigm研究合伙人兼安全主管Samczsun的第一反应:可能是Token小数点的配置有误 。 从他的视角来看 , 当时跨链桥似乎正在进行一个“发送0.01WBTC , 返还100WBTC”的促销活动 。
1.9 亿美元被“掏空”!黑客牵头,路人“趁火打劫”,一切仅因一个低级致命漏洞
文章图片
最初Samczsun是不信的 , 但在Moonbeam上进行了一些手动挖掘后 , 他确认了这一事实:“虽然我从Moonbeam只转出了0.01WBTC , 但不知道为什么以太坊上却收到了100WBTC 。 ”也就是说 , 这不并是Token小数点的错误配置 。
但与此同时 , Samczsun发现了更糟糕的一点:在WBTC中桥接的交易实际上并没有“证明(prove)”这个步骤 , 而是直接进行“process”操作 。 这明显不符合逻辑 。
Replica合约中存在致命错误
基于此 , Samczsun总结出有两种可能性:要么是在先前的区块中单独提交了证明 , 要么就是Replica合约中存在严重错误 。 然而 , 没有任何迹象表明最近有什么信息被提前证明了 , 这也就只剩下了一种可能性 , 即Replica合约中存在致命错误 。
在快速浏览代码后 , Samczsun推测出了问题所在 。 在进行process操作时 , 用户提交的消息必须来自可接受的根(会在prove中被设置) , 其中第185行的“acceptableRoot”就是用来检查根是否被证明或已被确认 。 一般在进行Replica合约部署初始化时 , 会先把可信根设置为0 , 再将其改为非0数据的新根 , 同时将旧根设为失效——而Samczsun怀疑 , 可能旧根的“0”还处于生效状态 。
1.9 亿美元被“掏空”!黑客牵头,路人“趁火打劫”,一切仅因一个低级致命漏洞
文章图片
这个想法很好验证 , Samczsun用0x00来检查合同是否会接受这个根 , 结果居然真的通过了……
1.9 亿美元被“掏空”!黑客牵头,路人“趁火打劫”,一切仅因一个低级致命漏洞
文章图片
“事实证明 , 在升级期间 , Nomad团队将可信根初始化为0x00 。 说白了 , 使用0值作为初始化值是一种常见的做法 。 不幸的是 , 在这种情况下 , 它也有一个很小的副作用 , 即会自动验证每一条消息 。 ”