免责声明:今日财经所有资讯仅代表作者个人观点,不构成任何投资理财建议。
    惊天魔盗,近 2 亿美金损失——Nomad Bridge 攻击事件分析
    2022-08-02 12:01:00 pv / 分享快讯

    北京时间2022年8月2日,CertiK安全团队监测到Nomad Bridge遭受攻击,导致了价值约1.9亿美元的损失。

    合约的问题在于在initialize() 函数被调用的时候,“committedRoot” 被设成了0x00地址。因此,攻击者可以通过消息的验证,将在桥合约中的代币转移。

    攻击步骤

    ① 攻击者调用process()函数开始攻击。

    ② process()函数中调用了acceptableRoot(messages[_messageHash]),这个函数检查了被提交的root以及OptimisticTimeOut是否过期。

    ③此时函数acceptableRoot(messages[_messageHash])返回了true,也就是说这条message就被批准了。这是因为0x0000在初始化过程中被设置为了true(CertiK安全专家认为这是部署过程中产生的错误)。

    ④当这条message被批准后,攻击者即可从桥中转移资金。

    攻击交易

    攻击示例:

    ○ 在Moonbeam Bridge上转移了0.01 WBTC:https://moonscan.io/tx/0xcca9299c739a1b538150af007a34aba516b6dade1965e80198be021e3166fe4c

    ○ 在Etherem Bridge接受了100WBTC代币转移:https://etherscan.io/tx/0xa5fe9d044e4f3e5aa5bc4c0709333cd2190cba0f4e7f16bcf73f49f83e4a5460

    漏洞分析

    在Replica合约中,“committedRoot”被错误地初始化为0(https://etherscan.io/tx/0x53fd92771d2084a9bf39a6477015ef53b7f116c79d98a21be723d06d79024cad)。

    合约地址:https://etherscan.io/address/0x88a69b4e698a4b090df6cf5bd7b2d47325ad30a3

    函数process通过调用函数acceptableRoot()确保message hash能通过验证。

    函数acceptableRoot()会检查root是否已经被proven, processed或者confirmed。

    然而在初始化的交易中0x53fd92771d2084a9bf39a6477015ef53b7f116c79d98a21be723d06d79024cad,owner传入了0x00并且它对应的`confirmAt`也会在初始化中被设为1。

    因此0x00可以被当作一个`acceptableRoot`,这也可以在replica合约中查询到https://etherscan.io/address/0xb92336759618f55bd0f8313bd843604592e27bd8。

    Prove函数的实现导致了一条unproven message的root是0,而0作为一个有效的confirmed root可以通过require的检查。攻击者只需调用process函数就能从桥中转移资金。

    本文地址: - 今日财经

    免责声明:本文仅代表作者本人观点,与今日财经立场无关。本站所有内容不构成投资建议,币市有风险、投资请慎重。

    回顶部