事件背景
Merlin是一个能够自动组合的收益聚合工具,其生态系统经过优化,可以实现用户在追求安全和可持续为前提的最大收益回报。
零时科技区块链安全情报平台监控到消息,北京时间2021年6月29日,Merlin Labs官方Telegram称Merlin遭受了黑客攻击,并声明黑客将 0.1WBNB 存入vault,然后手动将1000BNB转入合约,以欺骗合约认为它收到了 1000BNB的奖励,从而导致铸币产生了 MERL 奖励,零时科技安全团队及时对该安全事件进行复盘分析。
事件分析
攻击信息
通过初步追踪分析,这里梳理了一条攻击路线来进行具体分析,攻击信息如下:
攻击者钱包地址
https://bscscan.com/address/0x2bADa393e53D0373788d15fD98CB5Fb1441645BD
攻击者合约地址
https://bscscan.com/address/0xcc369faf26c0457ceea7a24bbfe158e106214147
攻击者盗取资金交易
https://bscscan.com/tx/0x903ae34f48d4e00da8d7ca5dfad26f8f37e80cde2156907580cf551a63317f76
MerlinToken合约地址
https://bscscan.com/address/0xDA360309C59CB8C434b28A91b823344a96444278#code
MerlinPool合约地址
https://bscscan.com/address/0x3b87475ac293eeed0e8bC25713Eb8242A9497C3F#contracts
攻击过程
目前攻击者创建的合约及交易较多,但每笔交易的攻击流程均类似,如以上攻击合约中,攻击者共进行了26笔交易,其中22笔为攻击者利用漏洞盗取资金交易,其余4笔为攻击者将盗取资金转至钱包地址交易,这里将以上攻击交易进行详细分析,方便读者更清晰的了解攻击过程。如下图:
第一步:攻击者给vault合约转入0.1枚BNB。
第二步:攻击者直接给vault合约转入874枚BNB。
第三步:vault合约将转入的874枚BNB转至0xd7d0合约,并获取对应的846枚ibBNB。
第四步:0xd7d0合约将874枚BNB转出至WNativeRelayer合约,并随即销毁vault合约的846枚ibBNB。
第五步:vault合约将262枚BNB转至0x236f合约,之后转给0x913合约257枚BNB后,将该资金以1:1对半分为128枚BNB和3334枚Merlin添加PancakeSwap V2: MERL 5流动性,并获取对应的548枚Cake-LP Token。
第六步:将获取的548枚Cake-LP Token转至MerlinPool合约。
第七步:将0x236f合约剩余的5枚BNB兑换为135枚Merlin,并将资金转至0x436f地址。
第八步:给0x236f地址铸造了8996枚Merlin代币,并将生成的代币转至攻击者合约,此步也是攻击者获利最重要的步骤。
第九步:给MerlinPool合约地址也铸造了相应的Token。(此步应为添加Cake-LP Token获取的相应奖励)。
第十步:最终攻击者合约将获取的Merlin代币兑换成BNB获利离场。
至此
攻击者通过该笔攻击交易获取了332枚BNB,价值约10万美元,由于项目合约中奖励功能的代码逻辑问题,攻击者通过多笔攻击交易已获利超30万美元。
目前,Merlin官方已宣布关闭Merlin Lab,并已在网站上发布通知并停止所有存款,所涉及的Twitter及Telegram等账号均已停止运营。
总结
通过此次攻击事件来看,攻击者通过多次获取奖励,并通过Merlin合约中的代码缺陷,最终获得了大量代币,对于合约功能缺陷问题,应在合约上线前进行严格审查及测试。对于此类攻击事件,零时科技安全团队给出以下建议:
安全建议
对于合约代码安全,可找多家安全审计公司进行审计。
对于铸币及转账问题,应根据业务逻辑进行严格审核演算,避免出现代币异常获取问题。
对敏感性较强的代码,要做到及时更新完善。
来源:freebuf.com 2021-07-01 11:29:50 by: noneage
请登录后发表评论
注册