背景介紹
監控到一起的針對SATX Token的鍊上攻擊事件https://bscscan.com/tx/0x7e02ee7242a672fb84458d12198fae4122d7029ba64f3673e7800d811a8de93f
黑客總共發起了兩次攻擊:
第一次攻擊https://bscscan.com/tx/0x3c6eb46bc7203c4996ed0886f25bec3d806000506dea2f2778df374380014105
失敗,因為在調用攻擊合約的時候沒有轉入BNB ,導緻在執行BNB兌換為WBNB失敗交易復原。
第二次攻擊成功。
黑客的初始資金均來自于TornadoCash,
有趣的是攻擊者的攻擊合約函數名為f***you。
攻擊及事件分析
首先,攻擊者通過PancakeSwap将0.001 WBNB兌換為13.397690168956297175 SATX。随後,利用PancakeSwap Pair WBNB-CAKE 兌換60 WBNB。
接着,在回調函數中再用0.0001 WBNB兌換 350018.558642186154111639 SATX(在回調函數中又轉入了52 WBNB)。
接着,又将兌換來的350018.558642186154111639 SATX轉入PancakeSwap Pair WBNB-SATX ,導緻資金不平衡。然後,攻擊者通過調用skim和sync平衡資金的同時進而完成對漏洞的利用。
由上圖可以看到,通過skim本應從 PancakeSwap Pair中轉出350018.558642186154111639 SATX來平衡資金,但是卻多轉了一倍的SATX 。
通過檢視SATX Token合約的代碼,我們可以看到transfer中的這段代碼。首先,将amount轉給了_tokenOwner,
接下來,将amount的2.99%轉給了SATX Token合約,将amout的97.01%除以1000000的10%,9%和8.3%分别轉給了三個EOA。
相當于額外轉出了約一倍的SATX ,導緻PancakeSwap Pair WBNB-SATX中的SATX 驟減,由于PancakeSwapV2使用的CPMM作為AMM算法,是以相當于SATX的價值飙升。
執行skim前,1 WBNB=13844 SATX,執行 skim後,1 WBNB=33 SATX。導緻SATX價值飙升600多倍。
随後,攻擊者就用手中的SATX通過swap兌換為WBNB。通過此次攻擊,攻擊者共獲利約50BNB。