前言
北京时间2022年4月30日,知道创宇区块链安全实验室监测到BSC链上的bDollar项目遭到价格操纵攻击,导致损失约73万美元。
知道创宇区块链安全实验室第一时间跟踪本次事件并分析。
基础信息
攻击者地址:0x9dadbd8c507c6acbf1c555ff270d8d6ea855178e
攻击合约:0x6877f0d7815b0389396454c58b2118acd0abb79a
tx:0x9b16b1b3bf587db1257c06bebd810b4ae364aab42510d0d2eb560c2565bbe7b4
CommunityFund合约:0xEca7fC4c554086198dEEbCaff6C90D368dC327e0
漏洞分析
漏洞关键在于CommunityFund合约中的claimAndReinvestFromPancakePool方法在使用Cake代币进行代币转换时,会对换取的WBNB数量进行判断并且会自动把换取的WBNB的一半换为BDO代币;而之后合约会自动使用合约中的WBNB为池子添加流动性,若此时BDO代币的价值被恶意抬高,这将导致项目方使用更多的WBNB来为池子添加流动性。
而最为关键的是,攻击者实施攻击前,在WBNB/BDO、Cake/BDO、BUSD/BDO池子中换取了大量BDO代币导致BDO价格被抬高。
在我们对攻击交易进行多次分析之后,发现事情并没有那么简单,该次攻击极有可能是被抢跑机器人抢跑交易了,依据如下:
1、该笔攻击交易比BSC链上普通交易Gas费高很多,BSC链上普通交易默认Gas费为5Gwei,而该笔交易竟高达2000Gwei。
2、我们发现该攻击合约与攻击者地址存在多笔抢跑交;
3、我们在相同区块内找寻到了真实攻击者的地址与交易,该交易被回滚了。
攻击流程
1、攻击者使用闪电贷贷款670枚WBNB;
2、之后攻击者将WBNB在各个池子中换取大量BDO代币;
3、随后攻击者再次使用闪电贷贷款30516枚Cake代币;
4、将贷款的Cake代币进行swap,换取400WBNB,其中200枚被协议自动换取为BDO代币;
5、攻击者将WBNB换取Cake代币用于归还闪电贷;
6、最后,攻击者将升值后的3,228,234枚BDO代币换取3020枚WBNB,还款闪电贷671枚,成功套利2381枚WBNB价值约73万美元。
总结
本次攻击事件核心是合约会为流动性池自动补充流动性,而未考虑代币价格是否失衡的情况,从而导致项目方可能在价格高位对流动性进行补充,出现高价接盘的情况。
建议项目方在编写项目时多加注意函数的逻辑实现,对可能遇到的多种攻击情况进行考虑。
在此提醒项目方发布项目后一定要将私钥严密保管,谨防网络钓鱼,另外,近期,各类合约漏洞安全事件频发,合约审计、风控措施、应急计划等都有必要切实落实。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。