前言
北京时间 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 万美元。
总结
本次攻击事件核心是合约会为流动性池自动补充流动性,而未考虑代币价格是否失衡的情况,从而导致项目方可能在价格高位对流动性进行补充,出现高价接盘的情况。
建议项目方在编写项目时多加注意函数的逻辑实现,对可能遇到的多种攻击情况进行考虑。
在此提醒项目方发布项目后一定要将私钥严密保管,谨防网络钓鱼,另外,近期,各类合约漏洞安全事件频发,合约审计、风控措施、应急计划等都有必要切实落实。