20250918 - NGP Token 攻擊事件:價格維持機制為攻擊者做了嫁衣
背景信息
- Alert:https://x.com/TenArmorAlert/status/1968502320645177731
- TX:https://app.blocksec.com/explorer/tx/bsc/0xc2066e0dff1a8a042057387d7356ad7ced76ab90904baa1e0b5ecbc2434df8e1
Trace 分析
攻擊者先從不同的地址收集資金

隨后通過多個 flashloan 籌集 BUSD

最終獲得約 21.1M 的 BUSD

在多層嵌套的閃電貸中定位到攻擊點
- Swap1:攻擊者將所有 BUSD 兌換成 NGP,并發送到 0 地址中
- Swap2:攻擊者將 NGP 兌換成 BUSD,獲利 2212888 BUSD

代碼分析
漏洞的成因是當用戶賣出 NGP 代幣時,會觸發價格更新機制。pair 中的 NGP 代幣會被按照比例轉移到 treasuryAddress 和 rewardPoolAddress 中,然后更新 pair 的價格。最終目的就是抬高 pair 里面 NGP 代幣的價格。
如果 poolAmount 的大小接近于 burnAmount 的大小,執行完回購機制后 NGP 的價格將會變得很高,此時只需要少量的 NGP 就能夠把 pair 中的 BUSD 全部兌換出來。

Swap1
攻擊者第一次 swap 的目的是盡可能地減少 pair 中 NGP 代幣的數量,為第二次 swap 的獲利做準備

在這里攻擊者利用了 0 地址在 whitelisted 中的特點,直接繞過了代幣對購買金額和購買時間的限制。

Swap2
在 Swap2 中,攻擊者觸發價格更新機制,pair 中的 NGP 代幣被大量轉出后,pair 中 NGP 的 reverse1 數量縮小為為原來的 0.00000007 倍。

在 NGP 價格被抬高后,繼續執行攻擊者向 pair 的 NGP 轉賬操作,并以操控后的價格完成 swap,最終完成獲利。

隨后就是攻擊者歸還閃電貸,將部分獲利的 BUSD 換成 BNB 后,進行資金轉移。


浙公網安備 33010602011771號