11.MaestroBots@arbitrary-call
2023-11-01 21:05:14
# 08.PoC
MaestroBots@arbitrary-call
MaestroBots的路由合约受到攻击,漏洞发生约半小时之后项目方就发现并且迅速修复,替换了新的路由合约,并承诺归还大约280ETH给损失的用户。
多笔攻击的手法一致,我们选取其中一笔MogCoinEth来进行分析。
- 时间:2023-10-24 22:53:47 (UTC)
- 损失金额:~281ETH
交易
- 受攻击的路由合约Router2(存储合约,未开源):0x80a64c6D7f12C47B7c66c5B4E20E72bc1FCd5d9e
代理合约(逻辑合约,未开源):0x8EAE9827b45bcC6570c4e82b9E4FE76692b2ff7a
分析其中一笔攻击交易:0xc087fbd68b9349b71838982e789e204454bfd00eebf9c8e101574376eb990d92
- 黑客EOA地址:0xce6397e53c13ff2903ffe8735e478d31e648a2c6
- 黑客攻击合约地址(已销毁):0xe6c6e86e04de96c4e3a29ad480c94e7a471969ab
- 新的代理合约(逻辑合约,未开源):0x6599aE06914f1f5Ec0053d3F475348D40E608442
资金流向
攻击过程
通过phalcon浏览器可以发现,攻击者写了一个合约,调用0x9239127f
方法,就成功将代币转移到攻击合约中。
然后后面就是一系列的将获利转换成ETH的操作,我们只需要分析为什么可以直接转移代币即可,这一定是逻辑合约的函数写的有问题。
攻击详细分析
由于逻辑合约没有开源(也许就是这个原因,就放松了警惕),我们对其进行反编译,找到0x9239127f
方法:该函数可以对传入的varg0
,转换后也就是一个token的地址。任何人可以对其进行任意调用,因为没有做任何传参的校验和权限校验!通览整个方法,也没有发现任何可能revert的地方。
修复之后的逻辑合约已经没有这个方法了
复现
1 | pragma solidity ^0.8.10; |
建议
- 即使没有开源源代码,也不要放松警惕
- 对于关键函数,一定要进行权限检测和参数校验