根据Ambient exchange创始人Doug Colkitt在社交媒体上发布的帖子,从KyberSwap中榨取4600万美元的攻击者依靠“复杂且精心设计的智能合约漏洞”实施攻击。
Colkitt将这一漏洞称为“无限资金故障”。据他说,攻击者利用KyberSwap集中流动性功能的独特实现,“诱骗”合同相信它的流动性比现实中更多。
1/完成了对Kyber漏洞的初步深入研究,我想我现在对发生的事情有了很好的了解。这无疑是我见过的最复杂、最精心设计的智能合约漏洞Doug Colkitt(@0xdoug)2023年11月23日
大多数去中心化交易所(DEX)都提供“集中流动性”功能,允许流动性提供商设定购买或出售加密货币的最低和最高价格。据Colkitt称,KyberSwap攻击者利用该功能来消耗资金。然而,他表示,这种利用“是针对Kyber集中流动性的实施,可能不会对其他DEX起作用”。
Colkitt说,KyberSwap攻击包括针对单个池的几次攻击,每次攻击几乎完全相同。为了说明它是如何工作的,Colkitt考虑了在以太坊上利用ETH/wstETH池。该池包含以太币(ETH)和丽都包裹权益以太币(wstETH)。
如区块链数据所示,攻击者首先从闪贷平台Aave借款10000 wstETH(当时价值2300万美元)。据Colkitt称,攻击者随后向池中倾倒了价值670万美元的这些代币,导致其价格暴跌至每1 wstETH 0.0000152 ETH。在这个价格点上,没有流动性提供者愿意买卖,所以流动性应该为零。
攻击者随后存入3.4 wstETH,并提出在0.0000146和0.0000153之间进行买卖,在存入后立即提取0.56 wstETH。Colkitt推测,攻击者可能撤回了0.56 wstETH,以“使随后的数值计算完全一致”
在进行存款和取款后,攻击者进行了第二次和第三次交换。第二次掉期将价格推高至0.0157 ETH,这本应使攻击者失去流动性。第三次互换将价格推高至0.00001637。这也超出了攻击者自己的流动性阈值设定的价格范围,因为现在已经超过了他们的最高价格。
从理论上讲,最后两次掉期应该一无所获,因为攻击者是在用自己的流动性进行买卖,因为其他每个用户的最低价格都远低于这些值。Colkitt表示:“在没有数字错误的情况下,这样做的人只会用自己的流动性来回交易,所有的流动性都会净值为零(减去费用)。”
然而,由于用于计算价格区间上限和下限的算法的特殊性,该协议未能在前两次掉期中的一次中去除流动性,但在最终掉期期间又将其添加回来。因此,该池最终“重复计算了原始LP头寸的流动性”,这使攻击者能够以最低的ETH金额获得3911个wstETH。尽管攻击者在第一次交换中不得不丢弃1052个wstETH来实施攻击,但在偿还了他们的闪贷后,这仍然使他们获利2859个wstETH(按今天的价格计算为670万美元)。
攻击者显然在多个网络上对其他KyberSwap池重复了这一漏洞,最终获得了总计4600万美元的加密货币战利品。
相关:HTX交易所在热钱包黑客攻击中损失1360万美元:报告
根据Colkitt的说法,KyberSwap在computeSwapStep函数中包含了一个故障保护机制,旨在防止这种漏洞的发生。然而,攻击者设法将交换中使用的数值保持在触发故障保护的范围之外。正如Colkitt所说:
“‘到达数量’是到达刻度线边界的上限,计算为…22080000,而剥削者设定的交换数量为…220799999。这表明这个漏洞是多么精心设计。检查失败了<0.00000000000001%。”
Colkitt称这次攻击是“我见过的最复杂、最精心设计的智能合约攻击”
据Coindegraph报道,11月22日,KyberSwap被利用了4600万美元。该团队在4月17日发现了一个漏洞,但在那次事件中没有资金损失。该交易所的用户界面也在2022年9月遭到黑客攻击,尽管所有用户都在该事件中得到了赔偿。11月22日的袭击者已通知团队,他们愿意谈判退还部分资金。
编辑:web3528btc 来源:加密钱包代币