代币闪崩,差点归零 - PancakeBunny 被黑简析_BNB:sunny币未来前景

By:Kong@慢雾安全团队

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

攻击过程分析

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

SEC主席:如果加密代币具有真正的价值,SEC随时准备与加密行业合作以实现合规性:6月6日消息,美国 SEC 主席 Gary Gensler 接受 CNBC 采访时表示,如果加密代币具有真正的价值,那么 SEC 合规性将建立信任。SEC 随时准备与加密行业合作以实现合规性。[2023/6/6 21:19:47]

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

数据:NFT代币总市值突破300亿美元:金色财经报道,据区块链分析网站Coingecko最新数据显示,目前NFT代币市值已经突破300亿美元(本文撰写时为30,069,877,675美元),24小时交易额为3,711,528,534美元,市值排名前三的NFT代币分别是:Theta Network(7,181,203,938美元)、Axie Infinity(4,291,349,253美元)和Chiliz(2,063,861,021美元),NFT代币市值首次突破300亿美元发生在2021年4月16日。[2021/9/2 22:54:13]

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

美国SEC主席:可能所有股票都能被代币化:美国证监会(SEC)主席Jay Clayton和货币监理属审计官Brain Brooks在昨天参与了一场数字商会活动,Jay Clayton在活动中表示“和两年前相比,现在所有股票交易都是电子化的,过去有股票证书,现在有电子入口,很可能所有股票都会被代币化。”Clayton的意思是,技术可能发生变化,但是一些活动的监管原则不会改变。

此外,Clayton和Brooks都谈到他们在合作为银行托管稳定币存币推出指导意见,Brooks还提到了数字人民币,其表示在央行数字货币上,美国永远不会存在优势,在支付方面,OCC已经建立了一些实时支付系统。(Ledger Insights)[2020/10/3]

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

声音 | Coinbase Pro 产品负责人:未来将上更多实用型代币和证券型代币:此前,Coinbase为其专业交易平台的客户推出了Coinbase Pro移动应用程序。 目前,Coinbase Pro已经上线了25种代币。Coinbase Pro产品负责人David Farmer表示,将会看到更多实用型代币(utility token)、证券型代币(security token)和更多种类的资产,此外,未来Coinbase会上线更多的代币。(decrypt)[2019/10/14]

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:93ms