据慢雾区消息,币安智能链(BSC)DeFi项目ImpossibleFinance遭遇闪电贷攻击。慢雾安全团队第一时间介入分析,并将结果分享如下:
攻击细节分析
ImpossibleFinance的DEX架构参考了Uniswapv2,但在Pair的实现上有所不同。ImpossiblePair分别实现了cheapSwap与swap两个接口。cheapSwap函数限制了只由Router合约可进行调用,swap函数则是任意用户都可调用进行代币兑换操作。本次攻击事件的根本原因正是出在这种特殊的代币兑换架构上,接下来我们对此次攻击进行具体分析:
首先攻击者利用闪电贷从PancakeSwap中借出大量WBNB,并最终将其兑换成IF(ImpossibleFinance代币)?。
Otherside开发公司Improbable已对开发人员开放MSquared元宇宙创建引擎:6月20日消息,Yuga Labs元宇宙Otherside开发公司Improbable已对开发人员开放MSquared(M2)元宇宙创建引擎,包含元宇宙标记语言(MML),开发人员可通过Construct Metaverse环境使用这些工具进行创作。Improbable目前暂未公开后续计划细节,未来几周或将宣布除Yuga Labs以外的其他合作伙伴。[2023/6/20 21:48:40]
NFT项目Chimpers推特账户遭黑客入侵,攻击者多次发布虚假铸造网站:1月10日消息,NFT项目Chimpers的官方推特账户遭黑客攻击被盗用,并发布了多个指向虚假网站的链接,诱使用户通过该链接铸造NFT。根据Chimpers社区Discord成员分享的消息,团队已经意识到这个问题,并正在努力尝试恢复账号,同时提醒用户不要点击使用Chimpers推特发布的任何链接。[2023/1/10 11:03:33]
随后攻击者创建了一个由自己控制的代币AAA(BBB),并与上一步骤中获得的IF代币添加流动性。
Optimism建立项目激励基金OP Stimpack,将启动面向建设者的空投:5月4日消息,以太坊二层扩容网络Optimism宣布建立为Optimism上项目提供资金的基金OP Stimpack,Optimism将为该基金分配2.31亿枚OP Token,并将启动面向建设者的空投。首先将通过项目的TVL 以及每日交易量决定项目可以申领的OP Token数量,之后将向任何符合Optimism愿景的项目开放,该阶段将在首轮追溯空投发放后启动。[2022/5/4 2:48:56]
之后攻击者通过Router传入自定的兑换路径(AAA->IF->BUSD)将AAA代币兑换成BUSD代币,而问题正是出现在此兑换过程中。通过链上记录我们可以很容易的发现攻击者在将AAA代币兑换成IF代币的过程中进行了两次兑换操作:
Cirlce推出Circle Impact赈灾公募基金:金色财经报道,据官方消息,Cirlce推出Circle Impact赈灾公募基金,旨在帮助肯塔基州、阿肯色州、田纳西州、密苏里州和伊利诺伊州受致命龙卷风影响的人们。Circle为该基金制定了一个员工匹配计划,并正在向更广泛的Web3社区发起挑战,以筹集100万美元的资金来帮助改变现状。USDC或加密货币捐赠需要至少达到20美元,法币捐款可以为任何面额。[2021/12/17 7:44:56]
Simplex宣布支持BSV:金色财经报道,合规支付服务提供商Simplex增加了对BSV的支持。据悉,Simplex为多个加密货币交易所提供法币网关基础设施。[2020/7/3]
为什么在一次兑换过程中会进行两次兑换操作呢?
通过分析具体的内部调用流程我们可以发现,攻击者在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协议在参考其他项目的基础上进行创新的过程中应该充分的对其新的模型进行检查验证以避免此类安全事故的发生。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。