代币闪崩,差点归零 - PancakeBunny 被黑简析_ITA:Didcoin

By:Kong@慢雾安全团队

据慢雾区情报,币安智能链上DeFi收益聚合器PancakeBunny项目遭遇闪电贷攻击,慢雾安全团队第一时间介入分析,并将结果以简讯的形式分享,供大家参考:

攻击过程分析

1.攻击者先发起一笔交易,使用0.5个WBNB与约189个USDT在PancakeSwap中添加流动性并获取对应的LP,随后将LP抵押至PancakeBunny项目的VaultFlipToFlip合约中。

链游Parallel将于下周推出Closed Alpha并解锁PRIME代币:2月25日消息,Echelon Prime基金会发文称,旗下链游Parallel Closed Alpha将于下周二(2月28日)推出,并将于3月1日解锁PRIME代币。截至2月3日,持有Parallel 卡的近6万个钱包中,每个钱包都有可申领的余额。截至3月1日,PRIME的流通供应量约为20.2万

此前2021年10月份,Parallel 完成了一轮由 Paradigm 领投的 5000 万美元 A 轮股权融资,当时项目的整体估值为 5 亿美元。[2023/2/25 12:29:04]

2.在LP抵押完成后,攻击者再次发起另一笔交易,在这笔交易中攻击者先从PancakeSwap的多个流动性池子中闪电贷借出巨量的WBNB代币,并从Fortube项目的闪电贷模块借出一定数量的USDT代币。随后使用借来的全部USDT代币与部分WBNB代币在PancakeSwap的WBNB-USDT池子添加流动性,并把获得的LP留在WBNB-USDT池子中。

TITAN销毁90亿已发行代币:据TITAN (Titanswap) 官方消息,TITAN已于9月24日上线火币“全球观察区”并开启“新币挖矿”。TITAN基金会为了让通证模式更合理,能进一步赋能项目长期发展的战略目标,在反复征求社区意见和与所有投资人协商达成一致的基础上,对TITAN已经发行的100亿中的90亿代币进行销毁,链上记录将同步公布。

参与火币锁仓赚币的TITAN上新挖矿的用户不受影响,90亿代币直接从早期投资人和基金会持仓中等比例销毁,即TITAN总量变更为10亿,其中早期投资人持有1亿代币,基金会持有9亿代币并通过流动性挖矿释放。按照0.3 USDT的现价,TITAN销毁后总市值约3亿USDT,流通市值约3000万USDT。[2020/9/25]

3.由于在步骤1攻击者已经在VaultFlipToFlip合约中进行了抵押,因此攻击者在添加完流动性后直接调用VaultFlipToFlip合约的getReward函数来获取BUNNY代币奖励并取回先前抵押的流动性。

中币Filecoin期货代币FIL6Z今日开盘7分钟后继续涨停:据官方消息,自昨日中币Filecoin期货代币FIL6Z以140 QC(=20 USDT)开盘后43秒涨停至168 QC(=24 USDT,比较申购价涨幅达60%),今日凌晨再次开放交易,于7分钟后FIL6Z继续达到涨停板,价格为201.6 QC (≈29.03 USDT),并且买一量持续增加(目前达到1万6千多枚)。

中币的FIL6Z交易适用20%的涨跌停机制,是指在单个交易时段内允许FIL6Z价格上涨和下跌的最大幅度为20%。在达到涨停限制的情况下,用户只能卖出但买入需要根据挂单时间先后。据悉,中币设置20%涨跌停的原因是,由于Filecoin主网还未上上线,用户交易风险较大,同时中币支持多空双向交易。因此为保护广大投资者,设置涨跌停机制。[2020/8/7]

4.在进行getReward操作时,其会调用BunnyMinterV2合约的mintForV2函数来为调用者铸造BUNNY代币奖励。

以太坊互助保险Nexus Mutual称其原生代币NXM并未在任何交易所上线:据官方消息,以太坊互助保险Nexus Mutual(NXM)发推称,其原生代币NXM目前并未在任何交易所上线。获得NXM代币的唯一方法是成为会员,并通过Nexus Mutual应用程序购买。Nexus Mutual还提醒用户不要通过Uniswap上来获得NXM。

此前报道,Nexus Mutual于7月初宣布推出新的Staking(质押)系统,平台用户可以在其认为安全的合约上进行质押,并获得相应奖励。质押者(Stakers)无需再像老系统中那样排队等待奖励,每个特定智能合约中都会按比例分配质押奖励。[2020/7/11]

5.在mintForV2操作中,其会先将一定量(performanceFee)的LP转至WBNB-USDT池子中移除流动性,但由于在步骤2中攻击者把大量的LP留在了池子中,因此BunnyMinterV2合约将会收到大量的WBNB代币与USDT代币。

6.在完成移除流动性后会调用zapBSC合约的zapInToken函数分别把步骤5中收到的WBNB与USDT代币转入zapBSC合约中。

7.而在zapInToken操作中,其会在PancakeSwap的WBNB-USDT池子中把转入的USDT兑换成WBNB。随后再将合约中半数WBNB在PancakeSwap的WBNB-BUNNY池子中兑换成BUNNY代币,并将得到的BUNNY代币与剩余的WBNB代币在WBNB-BUNNY池子中添加流动性获得LP,并将此LP转至mintForV2合约中。而由于步骤5中接收到的非预期的大量的WBNB,并且进行WBNB兑换成BUNNY代币的操作,因此WBNB-BUNNY池子中的WBNB数量会大量增加。

8.在完成zapInToken操作后会计算BunnyMinterV2合约当前收到的WBNB-BUNNYLP数量,并将其返回给mintForV2。随后将会调用PriceCalculatorBSCV1合约的valueOfAsset函数来计算这些LP的价值,这里计算价值将会以BNB结算(即单个LP价值多少个BNB)。

9.在valueOfAsset计算中,其使用了WBNB-BUNNY池子中WBNB实时的数量乘2再除以WBNB-BUNNYLP总数量来计算单个LP的价值(valueInBNB)。但经过步骤7,我们可以发现WBNB-BUNNY池子中的WBNB非预期的数量大量变多了,这就导致了在计算单个LP的价值会使得其相对BNB的价格变得非常高。

10.随后在mintForV2中,合约会以在步骤9中计算出的LP价值来通过amountBunnyToMint函数计算需要给攻击者铸造多少BUNNY代币。但由于价格计算方式的缺陷导致最终LP的价格被攻击者恶意的操控抬高了,这就导致了BunnyMinterV2合约最终给攻击者铸造了大量的BUNNY代币(约697万枚)。

11.在拿到BUNNY代币后,攻击者将其分批卖出成WBNB与USDT以归还闪电贷。完成整个攻击后拿钱走人。

总结

这是一次典型的利用闪电贷操作价格的攻击,其关键点在于WBNB-BUNNYLP的价格计算存在缺陷,而BunnyMinterV2合约铸造的BUNNY数量依赖于此存在缺陷的LP价格计算方式,最终导致攻击者利用闪电贷操控了WBNB-BUNNY池子从而拉高了LP的价格,使得BunnyMinterV2合约铸造了大量的BUNNY代币给攻击者。

慢雾安全团队建议,在涉及到此类LP价格计算时可以使用可信的延时喂价预言机进行计算或者参考此前AlphaFinance团队研究的LP价格计算方式,以避免被恶意操控的事故再次发生。

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

金智博客

[0:0ms0-7:806ms