币安智能链上的去中心化金融(DeFi)项目 Caterpillar Coin 于 2024 年 9 月 10 日遭到攻击,估计损失约 140 万美元。
攻击者通过三笔交易对该项目实施了攻击:
https://bscscan.com/tx/0x6262c0f15c88aed6f646ed1996eb6aae9ccc5d5704d5faccd1e1397dd047bc8a
https://bscscan.com/tx/0xce6e474dc9555ef971473fee19f87716f38ba01a0df39e78207b71eda134c420
https://bscscan.com/tx/0x2c123d08ca3d50c4b875c0b5de1b5c85d0bf9979dffbf87c48526e3a67396827
概述
在我们的分析中,我们将重点关注造成最大损失的攻击——第三次攻击:
https://bscscan.com/tx/0x2c123d08ca3d50c4b875c0b5de1b5c85d0bf9979dffbf87c48526e3a67396827
攻击者:
https://bscscan.com/address/0x560a77bc06dcc77eee687acb65d46b580a63eb45
脆弱合约:
https://bscscan.com/address/0x7057f3b0f4d0649b428f0d8378a8a0e7d21d36a7
漏洞分析
此次攻击似乎遵循了一个简单的模式:攻击者利用闪电贷从 USDT-WBNB 对中借入USDT ,然后循环创建多个合约,主要攻击逻辑在构造函数中运行。在创建每个合约之前,攻击者都会转移大量USDT以供构造函数中的逻辑使用。
在合约创建之前,将USDT发送给合约,新合约会将其中的一部分兑换成 CUT 代币。
然后,合约利用获得的 CUT 代币和USDT为配对合约增加流动性。作为提供流动性的回报,合约将获得相应数量的 CAKE-LP 代币,代表其在流动性池中的份额。
在后续步骤中,合约将使用剩余的 CUT 代币(我们知道数量很大)执行另一次交换,这次将 CUT 代币转换回USDT。
然后,攻击者销毁 CAKE-LP 代币。此操作会从池中移除他们提供的流动性,使他们能够提取其相应的基础资产份额。
通过明显利用销毁过程漏洞获得大量 CUT 代币,攻击者能够执行进一步的交换,将这些 CUT 代币转换回USDT。这可能使他们大幅增加收益。
此外,攻击者似乎循环执行合约创建过程,多次重复该漏洞以耗尽配对合约中大量的USDT储备。
深入研究 CUT 代币代码中的addLiquidity和removeLiquidity步骤,以澄清刻录操作中的错误。
对于每个新用户增加流动性,CUT 代币将记录订单 ID 以用于奖励目的,包括增加的 CUT 金额的等值USDT价值。
并且在移除流动性的时候,CUT token 会根据_transferFunDealTypeContractAddress合约的逻辑来计算奖励,这也就是所谓的价格保护机制。
valuePreservationByRmoveLP函数在0x70f88861函数内被反编译。
通过这种逻辑,攻击者可以轻松操纵价格(拉高出货),从而在同一笔交易中造成orderID
中初始记录的值与后来的 CUT 值之间的显著差异。
根本原因
通过分析攻击过程,我们可以看出该合约的主要缺陷在于项目方采用实时价格来计算奖励。
经验教训
完全依赖实时价格进行计算可能会有风险。攻击者可能会利用这一点操纵价格以谋取利益。为了保护项目的完整性,建议改为使用预言机价格进行计算。