近期,BNB Chain 生态项目 MobiusDAO 遭受攻击,攻击者通过项目合约的逻辑漏洞铸造出大量 MBU 代币卖出获利。

作者:Beosin

近期,BNB Chain 生态项目 MobiusDAO 遭受攻击,攻击者通过项目合约的逻辑漏洞铸造出大量 MBU 代币卖出获利。Beosin 安全团队对该事件进行了漏洞分析和资金追踪,并将结果分享如下:

详细攻击步骤

(1) 攻击者首先部署了攻击合约 (0x631adFF068D484Ce531Fb519Cda4042805521641),并使用该合约调用了 Mobius 代理合约 0x95e92B09b89cF31Fa9F1Eca4109A85F88EB08531 的存款函数,随后 Mobius 合约铸造了超过 9.7x10^15 个 MBU 代币并发送给攻击合约。

攻击交易哈希:0x2a65254b41b42f39331a0bcc9f893518d6b106e80d9a476b8ca3816325f4a150

(2) 攻击合约在收到 MBU 代币后调用 PancakeSwap 相关合约卖出 MBU 代币完成获利。

漏洞分析

Mobius 合约的存款函数在收到存款后会铸造等量的 MBU 代币发送给存款者。在该函数中,每当用户存入 WBNB 时,该函数会获取 BNB 的价格,以计算要铸造并转账的 MBU 代币数量。

BNB 的价格来自 getBNBPriceInUSDT 函数,该函数返回精确到 18 位小数的价格。如上图所示,返回的价格约为 656 美元。

由于 Mobius 的逻辑合约并未开源,通过反编译我们发现,漏洞出现在函数返回 18 位小数的结果时,合约再次将该值乘以 10^18,从而产生了相比正常结果高了 10^18 倍的 MBU 代币数量

被盗资金追踪

Beosin Trace 对被盗资金进行追踪发现:被盗资金被攻击者转换成约 215 万枚 USDT 代币,其中 135 万枚 USDT 兑换成 BNB 后存入 Tornado Cash,剩余 80 万枚 USDT 通过跨链兑换成 Ethereum 链的 ETH,随后存入 Tornado Cash。Beosin Trace 已将黑客相关地址加入黑地址库,后续将持续追踪

据 Beosin Trace 分析,所有被盗资金已存入 Tornado Cash

总结

本次攻击的核心在于攻击者利用项目合约的一个算数错误,铸造了巨量的代币卖出获利。这本是一个非常容易发现的代码错误,但 Mobius 项目方此前没有对合约进行详尽的代码测试发现该错误,也没有进行审计,导致了超过 215 万美元的损失。Beosin 安全团队建议项目方应当对项目的合约代码加强审计与安全测试,从而避免类似情况的发生。

免责声明:作为区块链信息平台,本站所发布文章仅代表作者及嘉宾个人观点,与 Web3Caff 立场无关。文章内的信息仅供参考,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。