WETH流动性池的资金已全部被提取,攻击者获利共约180万美金。 据了解,Merlin Dex 是一个去中心化交易所,关于本次安全事件,Beosin安全团队第一时间对事件进行了分析,结果如下。
事件相关信息
我们以其中一笔交易为例进行分析
攻击交易
0xf21bedfb0e40bc4e98fd89d6b2bdaf82f0c452039452ca71f2cac9d8fea29ab2
攻击者地址
0xc0D6987d10430292A3ca994dd7A31E461eb28182
0x2744d62a1e9ab975f4d77fe52e16206464ea79b7
被攻击合约
0x82cf66e9a45Df1CD3837cF623F7E73C1Ae6DFf1e(USDC-WETH池子)
攻击流程
1.第一步,池子创建者(0xc0D6987d10430292A3ca994dd7A31E461eb28182)创建了工厂合约 (0x63E6fdAdb86Ea26f917496bEEEAEa4efb319229F),在初始化时Feeto地址已经被设为(0xc0D6987d10430292A3ca994dd7A31E461eb28182)。
2.攻击者通过工厂合约部署USDC-WETH池子(0x82cf66e9a45Df1CD3837cF623F7E73C1Ae6DFf1e), 池子初始化时便将池子中的USDC和WETH最大化授权给了合约工厂的Feeto地址,可以看到这存在明显的中心化风险。
3. 于是在有了最大授权的情况下,攻击者转走了该池子中的所有代币。
4. 值得注意的是,在攻击发生之前,工厂合约的Owner和Feeto地址曾有过改动,但这一步并不是攻击所必须的,猜测可能是攻击者为了迷惑他人所做的操作。
最后可以看到USDC-WETH流动性池的资金已全部被提取,攻击者获利共约180万美金。
漏洞分析
Beosin安全团队分析本次攻击主要利用了 pair合约的中心化问题,在初始化时最大化授权了工厂合约中的Feeto地址,而导致池子中的资金随时可能被初始化时设定的Feeto地址提取走。
资金追踪
攻击者调用了transferFrom函数从池子转出了811K的USDC给攻击者地址1(0x2744d62a1e9ab975f4d77fe52e16206464ea79b7)。攻击者地址2(0xcE4ee0E01bb729C1c5d6D2327BB0F036fA2cE7E2)从token1合约(WETH)提取了435.2的eth,通过Anyswap跨链后转到以太坊地址(0xa7D481944730a88B862eB57248Cb1B2C8aa358Ad)和地址(0x0b8a3ef6307049aa0ff215720ab1fc885007393d)上,共获利约180万美元。
截止发文时, Beosin KYT反洗钱分析平台发现目前被盗资金仍存放在上述攻击者的两个以太坊主网地址上,Beosin安全团队将持续对被盗资金进行监追踪。
总结
针对本次事件,Beosin安全团队建议, 项目方应该使用多签钱包或DAO治理来管理具有重要权限的地址,用户在进行项目交互时也要多多了解此项目是否涉及风险。