背景介绍

2024年5月7日,我们监测到一次BNB SmartChain链上攻击事件,

被攻击的项目是SATURN ,攻击总造成约 15 WBNB 的损失。

攻击及事件分析

攻击主要分为两个阶段:

阶段1

攻击者使用 0.15个BNB ,分10次在 PancakeSwap上兑换了 891,000.8910个 SATURN ,作为攻击的初始资金。交易hash 为:

阶段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的价值被大幅拉高。建议项目方在设计经济模型和代码运行逻辑时要多方验证,合约上线前审计时尽量选择多个审计公司交叉审计。

微信里点“发现”,扫一下二维码便可将本篇文章分享至朋友圈