撰文:Beosin
近期,BNB Chain 生态项目 MobiusDAO 遭受攻击,攻击者通过项目合约的逻辑漏洞铸造出大量 MBU 代币卖出获利。Beosin 安全团队对该事件进行了漏洞分析和资金追踪,并将结果分享如下:
详细攻击步骤
(1) 攻击者首先部署了攻击合约(0x631adFF068D484Ce531Fb519Cda4042805521641)
,并使用该合约调用了 Mobius 代理合约0x95e92B09b89cF31Fa9F1Eca4109A85F88EB08531 的存款函数,随后 Mobius 合约铸造了超过 9.7x10^15 个 MBU 代币并发送给攻击合约。

(2) 攻击合约在收到 MBU 代币后调用 PancakeSwap 相关合约卖出 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 安全团队建议项目方应当对项目的合约代码加强审计与安全测试,从而避免类似情况的发生。


