削减事件——价格操纵

本文为机器翻译
展示原文

币安智能链上的去中心化金融(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 代币。此操作会从池中移除他们提供的流动性,使他们能够提取其相应的基础资产份额。

深入到这一步,

观察发现, 0x34be合约的 CUT 余额在销毁之前为零,但在销毁之后却收到了 269,661 个 CUT 代币,而 PAIR 合约仅转移了 60,652 个代币,这强烈表明销毁机制中存在异常或漏洞。

通过明显利用销毁过程漏洞获得大量 CUT 代币,攻击者能够执行进一步的交换,将这些 CUT 代币转换回USDT。这可能使他们大幅增加收益。

此外,攻击者似乎循环执行合约创建过程,多次重复该漏洞以耗尽配对合约中大量的USDT储备。

深入研究 CUT 代币代码中的addLiquidityremoveLiquidity步骤,以澄清刻录操作中的错误。

对于每个新用户增加流动性,CUT 代币将记录订单 ID 以用于奖励目的,包括增加的 CUT 金额的等值USDT价值。

并且在移除流动性的时候,CUT token 会根据_transferFunDealTypeContractAddress合约的逻辑来计算奖励,这也就是所谓的价格保护机制。

这是一个未经验证的代码合约,我们将分析反编译的源代码。

valuePreservationByRmoveLP函数在0x70f88861函数内被反编译。

在此函数中,合约将用户从removeLiquidity步骤收到的 CUT 金额转换为基于当前 CUT 价格的相应USDT值。然后,它计算与orderInfo中存储的数据相比的价值变化。然后使用当前价格将此USDT价值变化转换回一定数量的 CUT 代币,并将这些代币奖励给用户。

通过这种逻辑,攻击者可以轻松操纵价格(拉高出货),从而在同一笔交易中造成orderID中初始记录的值与后来的 CUT 值之间的显著差异。

根本原因

通过分析攻击过程,我们可以看出该合约的主要缺陷在于项目方采用实时价格来计算奖励。

经验教训

完全依赖实时价格进行计算可能会有风险。攻击者可能会利用这一点操纵价格以谋取利益。为了保护项目的完整性,建议改为使用预言机价格进行计算。

相关赛道:
来源
免责声明:以上内容仅为作者观点,不代表Followin的任何立场,不构成与Followin相关的任何投资建议。
喜欢
收藏
评论