
前言
世界时 5 月 20 日 10:34:28,币安智能链(BSC)DeFi收益聚合器 PancakeBunny(BUNNY)遭到来自外部开发人员的闪电贷攻击,黑客利用闪电贷套利 114631 个 BNB,大约 4000W 美元,涉及金额巨大。知道创宇区块链安全实验室 旨在通过全盘梳理攻击流程和代码细节,一窥闪电贷套利的秘密。
基础信息
攻击者地址:0xa0acc61547f6bd066f7c9663c17a312b6ad7e187
攻击合约地址:0xcc598232a75fb1b361510bce4ca39d7bc39cf498
攻击交易hash:
0x897c2de73dd55d7701e1b69ffb3a17b0f4801ced88b0c75fe1551c5fcce6a979
黑客利用闪电贷借大量 BNB,通过 PancakeSwap 操纵 USDT/BNB 以及 BUNNY/BNB 价格,获得大量 BUNNY 后再进行抛售,导致 BUNNY 价格闪崩,并且从中获利。实验室就该次攻击事件进行分析,在链上查询到了交易链接以及攻击合约地址。
攻击合约地址:
0xcc598232a75fb1b361510bce4ca39d7bc39cf498
攻击交易链接及截图:
https://bscscan.com/tx/0x897c2de73dd55d7701e1b69ffb3a17b0f4801ced88b0c75fe1551c5fcce6a979
图1
图2
图3
攻击步骤详解
1.攻击者先调用图2交易,进行了一次抵押,此时会产生抵押奖励;
2.然后攻击者通过图1的交易从闪电贷平台借出大量 BNB 和 USDT,通过 PancakeSwap 的交易对去添加流动性获取 lp 代币(144,445),并将 lp 代币留在了交易对合约中;
3.因为攻击者进行过抵押,然后通过调用图3中 VaultFlipToFlip 合约的 getReward 函数来获取 BUNNY 代币奖励并取回移除先前添加的流动性,然而在奖励计算时,获取 BUNNY 数量的逻辑出现问题导致产生大量的 BUNNY 代币( 6972455 ),并通过 PancakeSwap 兑换成 BNB,造成了 BUNNY 价格暴跌;
4.通过3步骤得到 BNB 之后归还到闪电贷地址,并从中获利 114631 个BNB,价值大约 4000W 美元。
总结
本次攻击事件,攻击者在一笔交易中完成了一系列借用、兑换、获取奖励、归还闪电贷等操作,其主要原因还是项目在计算抵押奖励时获取 lp 价格出现了逻辑问题,导致黑客利用这一漏洞进行了攻击。
目前,我们在项目方的 twitter 上注意到,项目方已经暂停了一些项目的存取款功能,并商讨安全修复方案和赔偿计划。如果有新的进展,实验室会在第一时间跟进和分析,请持续关注!