背景介绍
2024年5月7日,我们监测到一次BNB SmartChain链上攻击事件,
https://bscscan.com/tx/0x948132f219c0a1adbffbee5d9dc63bec676dd69341a6eca23790632cb9475312
被攻击的项目是SATURN ,攻击总造成约15 WBNB的损失。
攻击及事件分析
攻击主要分为两个阶段:
阶段1
攻击者使用0.15个BNB,分10次在 PancakeSwap上兑换了891,000.8910个 SATURN,作为攻击的初始资金。交易hash 为:
https://bscscan.com/tx/0x948132f219c0a1adbffbee5d9dc63bec676dd69341a6eca23790632cb9475312
阶段2
攻击开始,攻击者首先从PancakeSwap中利用flash闪电贷贷了3,300 WBNB,
随后,利用PancakeSwap(WBNB-SATURN)使用3,200 WBNB兑换了101,030,461 SATURN,此时,1 WBNB=6418081 SATURN
其中兑换的SATURN转到的地址为0xc8ce1ecdfb7be4c5a661deb6c1664ab98df3cd62,这个地址是项目方的地址,此操作是为了消耗PancakeSwap(WBNB-SATURN)中 SATURN的数量。选择项目方的地址是为了绕过普通地址每天买卖上限的(上限均为50,000 SATURN),而特定地址
(_excludedFees中的地址)不受此限制。
随后,攻击者又向PancakeSwap(WBNB-SATURN)转入228,832 SATURN,由于此时转入和转出地址均不在_excludedFees中,且to为PancakePair,执行以下操作。首先,将手续费转给了0x6f8d958c4dba9cdd734bb1c435f23cd6aa35534a,随后执行了autoLiquidityPairTokens
接下来,我们看一下autoLiquidityPairTokens的操作,首先,burn了一部分token,接着再通过sync同步PancakeSwap(WBNB-SATURN)的Reserves信息。
我们注意到,在SATURN Token的transfer逻辑中,首先burn PancakeSwap(WBNB-SATURN)池子中的SATURN Token,再sync,最后才会给PancakeSwap(WBNB-SATURN)的池子中转账。这就导致,攻击者可以通过操纵转账的数量,将池子中的SATURN Reserves操纵到很低的值,从而大幅拉高SATURN Token的价值。
我们可以看到,此时SATURN的价值已经被抬升到了1 SATURN=147,376,380,331,789,115
WBNB,最后攻击者将PancakePair中的 WBNB掏空,还清了闪电贷的贷款,且获利15 WBNB。
总结
本次漏洞的成因是在PancakeSwap(WBNB-SATURN)收到转账的Token前就进行sync操作,导致PancakeSwap(WBNB-SATURN)的池子中的Reserves失真,SATURN Token的价值被大幅拉高。建议项目方在设计经济模型和代码运行逻辑时要多方验证,合约上线前审计时尽量选择多个审计公司交叉审计。