零时科技 || BTB 攻击事件分析

背景介绍

2024年11月18日,我们监控到 BNB Smart Chain 上的一起攻击事件,被攻击的项目为BTB。攻击交易为

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

本次攻击共造成约 5000 USD 的损失。

攻击及事件分析

首先,攻击者利用 flashloan 从 pancakeSwapV3 中贷款 100,000 BUSD

零时科技 || BTB 攻击事件分析

随后,攻击者利用 pancakeSwapV2 将贷到的 100,000 BUSD 兑换为 1,263,427 BTB

零时科技 || BTB 攻击事件分析

接着,攻击者利用 BTB 的 exchangeBTBToUSDT 将 3,052 BTB 兑换为 4,999 BUSD

零时科技 || BTB 攻击事件分析

我们看一下被攻击的智能合约的函数 exchangeBTBToUSDT 的代码

零时科技 || BTB 攻击事件分析

可以看到,兑换的价格是由 pancakeSwapV2 的 BTB 和 BUSD 的 pair 的 reserve 决定的。这样,攻击者就可以利用 pacakeSwap 兑换大额 BTB 或 BUSD 来操纵 BTB 的价格。我们可以看到,攻击者在用 flashloan 贷来的 100,000 BUSD 兑换了 BTB 。

因此,在攻击者使用 pancakeSwapV2 进行大额 BUSD 兑换 BTB 前

reserve0 为:

1,327,362,530,716,302,619,951,383 ,

reserve1 为:

5047758199614262100984 ,

兑换后 reserve0 为:

63934622394514316973499 ,

reserve1 为:

105047758199614262100984 。

零时科技 || BTB 攻击事件分析

通过 getPrice 中 getAmountOut 的实现,我们可以计算出攻击者兑换前和兑换后的 BTB 价格变化。

零时科技 || BTB 攻击事件分析

我们通过计算得到 BTB 的价格从 1BTB=0.00379143964708692 BUSD 拉升到了 1 BTB =1.6381204893766859 BUSD 。价格被拉升了 400 多倍。

因此,攻击者使用了 3052 BTB 兑换到了 4999 BUSD 。

零时科技 || BTB 攻击事件分析

最后,攻击者用剩下的 1260375 BTB 从 pancakeSwapV2 中兑换了 99,964 BUSD。

零时科技 || BTB 攻击事件分析

攻击者再归还 flashloan 的贷款及利息 100,100 BUSD 后,获利 4,863 BUSD 。

总结

本次漏洞的成因是项目方在完成兑换 BTB 到 BUSD 时,使用了过时的价格预言机,导致攻击者可以轻易操纵 BTB 的价格,先进行大笔买入 BTB ,拉高 BTB 的价格后再卖出。最后完成套利。建议项目方在设计价格预言机和代码运行逻辑时要多方验证,合约上线前审计时尽量选择多个审计公司交叉审计。