PUNK:“不可思议” 的被黑之旅: Impossible Finance 被黑分析

据慢雾区消息,币安智能链(BSC)DeFi项目ImpossibleFinance遭遇闪电贷攻击。慢雾安全团队第一时间介入分析,并将结果分享如下:

攻击细节分析

ImpossibleFinance的DEX架构参考了Uniswapv2,但在Pair的实现上有所不同。ImpossiblePair分别实现了cheapSwap与swap两个接口。cheapSwap函数限制了只由Router合约可进行调用,swap函数则是任意用户都可调用进行代币兑换操作。本次攻击事件的根本原因正是出在这种特殊的代币兑换架构上,接下来我们对此次攻击进行具体分析:

首先攻击者利用闪电贷从PancakeSwap中借出大量WBNB,并最终将其兑换成IF(ImpossibleFinance代币)?。

OKX发布第七次储备金证明,BTC、ETH和USDT价值100亿美元:金色财经报道,OKX 发布第七次储备金证明(PoR),公示币种已增至 22 个,储备金率均超过 100%,其中 BTC、ETH、USDT 的储备金率均为 103%,总计价值达 100 亿美元。当前OKX 已通过 zk-STARK 技术升级 POR 系统,用户随时可以独立验证欧易 OKX 的偿付能力,是行业为数不多的按月发布储备金证明的主流加密交易平台。

OKX 全球首席商务官 Lennix Lai 表示:OKX 自 2022 年底以来持续发布 POR 报告,为行业树立了平台安全性与透明度的最高标准。我们将简化 zk-STARK 技术的使用方法,持续完善储备金证明系统,这是获得和保持用户信任的必要条件。[2023/5/29 9:48:12]

Web3音乐平台Unchained Music与Avalanche达成合作:4月22日消息,Web3音乐平台Unchained Music近日宣布与Avalanche达成合作,将在各种经过审查的DeFi协议中专门将艺术家版税资金部署至Avalanche C链。[2023/4/22 14:20:30]

随后攻击者创建了一个由自己控制的代币AAA(BBB),并与上一步骤中获得的IF代币添加流动性。

之后攻击者通过Router传入自定的兑换路径(AAA->IF->BUSD)将AAA代币兑换成BUSD代币,而问题正是出现在此兑换过程中。通过链上记录我们可以很容易的发现攻击者在将AAA代币兑换成IF代币的过程中进行了两次兑换操作:

美国银行:以太坊Shapella升级并未解决可扩展性问题:金色财经报道,美国银行(BAC)在上周的一份研究报告中表示,以太坊首先引入了与智能合约和去中心化应用程序兼容的区块链操作系统的想法,但尽管受益于这一先发优势,该平台的吞吐量仍然有限。分析师AlkeshShah和AndrewMoss写道,Shapella升级并未解决可扩展性问题,“但作为未来升级的先驱,向前迈出了一小步”。以太坊可能无法在短期内提高吞吐量,而来自替代区块链的日益激烈的竞争将限制其采用和使用。围绕上海流动性事件的主要担忧是验证者可以提取和出售质押的ETH,占ETH总供应量的16%,但提取过程旨在“防止验证者的短期大量外流和由此产生的安全性风险。”[2023/4/12 13:59:11]

为什么在一次兑换过程中会进行两次兑换操作呢?

通过分析具体的内部调用流程我们可以发现,攻击者在Router合约调用AAA合约的transferFrom函数将AAA代币转入Pair合约的过程中,同时调用了一次Pair合约的swap函数(即在transferFrom函数实现了正常转账与swap调用的逻辑)。然后再通过项目设计预期的cheapSwap再进行一次正常的代币兑换操作。

通过以上分析我们可以知道攻击者在一次代币兑换过程中分别通过调用swap函数与cheapSwap函数进行两次代币兑换操作,最终收到了额外的BUSD代币。那么既然是进行兑换操作,理论上每次兑换操作都将导致K值的变化,最终使得用户无法获得预期的代币。

但通过分析ImpossiblePair的swap函数与cheapSwap函数的具体逻辑,我们发现一个惊人的情况:在swap函数中进行了K值检查,而在cheapSwap函数却未进行K值检查而直接进行了update操作。这就导致了攻击者进行了多次兑换操作获得了额外的BUSD。

攻击流程

1、攻击者先通过PancakeSwap闪电贷借出WBNB,并将WBNB兑换成IF代币。

2、创建恶意的代币合约AAA(BBB),并在Impossible中添加了AAA代币与IF代币流动性。

3、通过AAA->IF->BUSD路径进行AAA代币到BUSD代币的兑换,并在AAA代币转入Pair合约兑换成IF代币的过程中进行了一次IF代币与BUSD的兑换操作,随后再进行正常的cheapSwap操作。最终获得了额外的BUSD代币。

4、之后重复以上操作进行获利。

总结

本次攻击的核心在于cheapSwap函数中未进行K值检查,导致攻击者可以通过在一次兑换过程中进行多次兑换操作以获得额外的代币。慢雾安全团队建议DeFi协议在参考其他项目的基础上进行创新的过程中应该充分的对其新的模型进行检查验证以避免此类安全事故的发生。

参考交易:

https://bscscan.com/tx/0x0220704a99ddfb982d26e65cc337f26b77dc057930b7aa1d848cc48ec77984a8

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:12ms0-3:580ms