5月20日,CertiK平安手艺团队发现币安智能链DeFi收益聚合器PancakeBunny(BUNNY)遭到闪电贷攻击,发生代币闪崩事宜。

此次事宜共损失114,631枚BNB和697,245枚BUNNY,按当市价钱盘算约合约4200万美元。 

经CertiK平安团队观察得出,由于该协议是使用PancakeSwap AMM来举行资产价钱盘算的,因此黑客恶意行使了闪电贷来操作AMM池的价钱,并行使Bunny在铸造代币的时刻盘算上的问题乐成完成攻击。

攻击是若何发生的?

本次攻击,攻击者总共举行了8笔闪电贷。其中7笔闪电贷来自PancakeSwap 流动性池的BNB,另外一笔则来自ForTube Bank的USDT。

手艺细节剖析

在文中,CertiK平安专家添加了地址标签(如下图所示),使代币的流向加倍清晰。

攻击者的地址:https://bscscan.com/address/0xa0acc61547f6bd066f7c9663c17a312b6ad7e187

攻击者使用的合约地址:https://bscscan.com/address/0xcc598232a75fb1b361510bce4ca39d7bc39cf498

生意一: 

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

在第一笔生意中,攻击者完成了两件事:

①将BNB转换成 "USDT-BNB FLIP"。

②将 "USDT-BNB FLIP "存入BUNNY的池子。

攻击者将FLIP存入资金池,这样当其在后期挪用VaultFlipToFlip合约中的Withdraw()或getReward()函数时,资金池将铸造BUNNY代币。

①"Zap"所做的是将所提供的代币的一半换成一对中的另一个代币,并将两个代币提供应响应的PancakeSwap池。这也可以通过BUNNY的Dapp前端来完成。

②将USDT-BNB FLIP存入池中。

生意二: 

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

在完成第一笔生意将"USDT-BNB FLIP "存入BUNNY资金池之后,攻击者举行了第二笔生意,这也是大多数人最关注的生意。

接下来把第二笔生意中的发生的所有代币的转移剖析成多个部门:

①攻击者从7个差其余PancakeSwap流动性池中行使闪电贷共借了232万BNB,从ForTube用闪电贷款借了296万USDT。

然后攻击者向 "USDT-BNB''池提供了7700枚BNB和296万USDT的流动性,获得了14.4万LP代币。

②攻击者将从闪电贷中获得的232万BNB在PancakeSwap V1池中换取了383万USDT。

由于V1池的BNB和USDT贮备远少于V2池,V1池的价钱更容易 *** 作,在将BNB换成USDT后,BNB价钱急剧下降。

③上文提到攻击者在 "生意一 "中把 "USDT-BNB FLIP "存到BUNNY池,现在攻击者可以挪用 "getReward() "函数来铸造BUNNY。

在挪用"VaultFlipToFlip "合约中的 "getReward() "函数时发生了大量代币转移纪录,如截图所示。

,

USDT跑分网

U交所(www.9cx.net),全球頂尖的USDT場外擔保交易平臺。

,

上图中这个函数发生的细节如下:

BUNNYMinterV2从USDT-BNB v2池中取出流动性——从池中取出296万USDT和7744枚BNB。

将USDT换成BNB。在ZapBSC合约中使用的是V1 PancakeSwap Router 而不是V2。

由于V1池的价钱已经 *** 作(见步骤②),攻击者能够将296万USDT换成231万BNB。

然后,一半的BNB(115.6万)被换成BUNNY,另一半的BNB(115.6万)和换来的BUNNY被添加到BNB-BUNNY池中。

现在,大量的BNB被加入到BNB-BUNNY池中,这增添了BNB(reserve0)的数目。

当之后盘算要铸造的BUNNY数目时,这将被用来操作 "valueInBNB "变量。

ZapBSC 合约地址 https://bscscan.com/address/0xf4c17e321a8c566d21cf8a9f090ef38f727913d5#code

把符号中移除流动性获得的7700BNB交流一半到BUNNY,并将另一半BNB与BUNNY配对,以提供 "BNB-BUNNY "池中的流动性。

注重符号、和发生在 "BUNNYMinterV2 "合约的 "mintForV2 "函数中的"_zapAssetsToBUNNYBNB "函数挪用。

BunnyMinterV2合约地址:https://bscscan.com/address/0x819eea71d3f93bb604816f1797d4828c90219b5d#code

从符号和发生的所有LP代币都被送到PancakeSwap的BUNNY池中,这是BunnyMinterV2合约中 "mintForV2 "函数中的这行代码所执行的效果:

"IBEP20(BUNNY_BNB).safeTransfer(BUNNY_POOL, bunnyBNBAmount);" 

如符号所示,该合约继续执行,铸造了700万的BUNNY(基于之前的BUNNY价钱价值可达约10亿美元)。

那么,是什么缘故原由导致合约铸造了这么多的BUNNY?呢?

在bunnyMinterV2合约中,要铸造的BUNNY数目与 "valueInBNB "变量有关,该变量是通过`priceCalculator.valueOfAsset(BUNNY_BNB, bunnyBNBAmount)`函数盘算得出的。

在函数`valueOfAsset`中,valueInBNB的盘算方式是:`valueInBNB = amount.mul(reserve0).mul(2).div(IPancakePair(asset).totalSupply())`

由于在BNB-BUNNY池中有大量的BNB(正如上图符号、中注释的那样),变量 "reserve0"是一个异常大的值,使 "valueInBNB "变得很大,以是它最终会增添铸造的BUNNY数目。

④在收到700万的BUNNY后,攻击者在PancakeSwap BNB-BUNNY V1池和V2池中将BUNNY换成BNB。

⑤最后,攻击者向ForTube和PancakeSwap的7个流动性池送还闪电贷,并将69.7万枚BUNNY和11.4万枚BNB转移到攻击者的地址。

这种攻击奏效的缘故原由之一是"ZapBSC "合约(https://bscscan.com/address/0xf4c17e321a8c566d21cf8a9f090ef38f727913d5#code)使用PancakeSwap V1流动性池,通过V1 PancakeSwap Router举行代币交流。

许多DeFi项目无法从PancakeSwap V1过渡到V2,由于它们在合约中把PancakeSwap Router和池子的地址写死为V1的地址。

由于V1流动性池已经被放弃,它们的池子中代币的贮备量很低,这使得攻击者更容易操作其中的代币价钱。

写在最后

当前的加密天下中,这样的闪电贷攻击和恶意价钱操作一定不会是最后一次。

CertiK建议DeFi项目将其PancakeSwap集成从V1迁徙到V2。

同时也可使用时间加权平均价钱(TWAP)来阻止价钱异常颠簸所带来的损失,以此提防黑客行使闪电贷攻击价钱预言机。

IPFS官网

IPFS官网(www.ipfs8.vip)是FiLecoin致力服务于使用FiLecoin存储和检索数据的官方权威平台。IPFS官网实时更新FiLecoin(FIL)行情、当前FiLecoin(FIL)矿池、FiLecoin(FIL)收益数据、各类FiLecoin(FIL)矿机出售信息。并开放FiLecoin(FIL)交易所、IPFS云矿机、IPFS矿机出售、租用、招商等业务。

USDT官网接口声明:该文看法仅代表作者自己,与本平台无关。转载请注明:chia(www.chia8.vip):首发 | PancakeBunny闪崩事宜最全手艺细节剖析
发布评论

分享到:

皇冠app下载(www.huangguan.us):沾恩汇价跌 美加生涯成本低
1 条回复
  1. USDT充提教程(www.6allbet.com)
    USDT充提教程(www.6allbet.com)
    (2022-01-12 00:02:46) 1#


    USDT官网
    挺好,再多一些特点

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。