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 的价值被大幅拉高。建议项目方在设计经济模型和代码运行逻辑时要多方验证,合约上线前审计时尽量选择多个审计公司交叉审计。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。