收藏本站 网站导航 开放平台 Thursday, April 18, 2024 星期四
  • 微信

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

来源 中金网 05-21 00:28
摘要: 这是一次典型的利用闪电贷操作价格的攻击,其关键点在于 WBNB-BUNNY LP 的价格计算存在缺陷。

  By:Kong@慢雾安全团队

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

攻击过程分析

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

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

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

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

  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-BUNNY LP 数量,并将其返回给 mintForV2。随后将会调用 PriceCalculatorBSCV1 合约的 valueOfAsset 函数来计算这些 LP 的价值,这里计算价值将会以 BNB 结算 (即单个 LP 价值多少个 BNB)。

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

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

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

总结

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

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

  本文链接:https://www.8btc.com/article/6637692

  转载请注明文章出处

区块链
免责声明:中金网发布此信息目的在于传播更多信息,与本网站立场无关。中金网不保证该信息的准确性、真实性、完整性、有效性等。相关信息并未经过本网站证实,不构成任何投资建议,据此操作,风险自担。
相关新闻 更多

天眼深度丨比特币减半临近 如何影响市场?

随着比特币减半的临近,全球加密货币市场正处于高度关注和热烈讨论的焦点。

04-12 15:23

天眼深度丨美联储降息预期减弱 加密货币将继续下跌?

随着美联储降息预期的减弱,加密货币市场近期呈现出明显的下跌趋势。

04-03 16:05

天眼深度丨比特币将在 5 月达到 99000 美元?

2024年,比特币备受行业瞩目,多位行业分析师对其价格前景持乐观态度。

03-28 15:40