損失超4000萬美元,GMX駭客事件原理分析

  • GMX 遭遇駭客攻擊,損失超過4,000萬美元,攻擊者利用可重入漏洞與槓桿功能進行攻擊。

  • 攻擊原理:

    • 攻擊者錯誤使用 executeDecreaseOrder 函數,傳入智慧合約地址而非外部帳戶(EOA),導致系統在贖回過程中可被重入操作。
    • 攻擊者在贖回GLP前開設大額WBTC空頭部位,利用系統計算AUM(管理資產總額)時將未實現虧損計為「資產」,虛增AUM值。
    • 贖回公式基於虛高AUM計算,使攻擊者獲取遠超實際GLP價值的資產。
  • GLP正常贖回機制:

    • GLP為流動性提供者代幣,贖回時按比例分配金庫資產,公式為:贖回量 = (用戶GLP / 總GLP供應) * AUM
    • AUM計算包含代幣池總價值、未實現虧損/盈利等,但未實現虧損被錯誤視為實際資產。
  • 系統缺陷:

    • 槓桿功能開啟後,空頭部位未實現虧損被計入AUM,但未對其真實性進行校驗。
    • 關鍵函數缺乏對呼叫者身分(合約 vs EOA)的強制驗證,導致重入攻擊可能。
  • 事件啟示:

    • 需嚴格審查金融邏輯中AUM的計算方式,避免信任虛假狀態。
    • 敏感操作應禁止合約調用或加強重入保護,並驗證關鍵參數的合理性。
總結

GMX 遭遇駭客攻擊,損失超過4,000 萬美元。攻擊者利用了一個可重入漏洞,並在合約啟用槓桿功能的情況下開空頭頭寸,實施了攻擊。

問題的根源在於executeDecreaseOrder函數被錯誤使用。此函數的第一個參數本應是外部帳戶(EOA),但攻擊者傳入了一個智慧合約位址。這使得攻擊者可以在贖回過程中重新進入系統,操縱內部狀態,最終贖回的資產遠超過其實際持有的GLP 價值。

GLP正常贖回機制

在GMX 中,GLP 是流動性提供者代幣,代表對金庫資產(如USDC、ETH、WBTC)的份額。當使用者呼叫unstakeAndRedeemGlp時,系統會使用下列公式計算應返還的資產數量:

redeem_amount = (user_GLP / total_GLP_supply) * AUM

其中AUM(管理資產總額)的計算方式為:

AUM = 所有token 池的總價值+ 全局空頭未實現虧損- 全局空頭未實現盈利- 已預留金額- 預設扣減(aumDeduction)

此機制保證了GLP 持有者按比例獲得金庫的實際資產份額。

槓桿開啟後的問題

當enableLeverage開啟後,使用者可以開設槓桿部位(多頭或空頭)。攻擊者在贖回GLP 前,開設了大額的WBTC 空頭部位。

由於空頭一開倉便增加了全局空頭規模,價格尚未變動的情況下系統默認該空頭是虧損的,而這部分未實現虧損會被計為金庫的“資產”,導致AUM 人為上升。儘管金庫並未實際獲得額外價值,但贖回計算會基於這個虛高的AUM,從而使攻擊者獲得了遠超其應得的資產。

攻擊流程

攻擊交易

https://app.blocksec.com/explorer/tx/arbitrum/0x03182d3f0956a91c4e4c8f225bbc7975f9434fab042228c7acdc5ec9a32626ef?line=93

損失超4000萬美元,GMX駭客事件原理分析

損失超4000萬美元,GMX駭客事件原理分析

寫在結尾

這次攻擊暴露了GMX 在槓桿機制與可重入保護設計上的嚴重缺陷。核心問題在於資產贖回邏輯對AUM 的信任過高,未對其組成部分(如未實現虧損)進行足夠審慎的安全校驗。同時,關鍵函數對呼叫者身分的假設(EOA vs 合約)也缺乏強制性驗證。此事件再次提醒開發者,在涉及資金敏感操作時,必須確保系統狀態不可被操縱,尤其是在引入複雜金融邏輯(如槓桿、衍生性商品)時,更需嚴防重入與狀態污染帶來的系統性風險。

分享至:

作者:BlockSec

本文為PANews入駐專欄作者的觀點,不代表PANews立場,不承擔法律責任。

文章及觀點也不構成投資意見

圖片來源:BlockSec如有侵權,請聯絡作者刪除。

關注PANews官方賬號,一起穿越牛熊
推薦閱讀
1小時前
2小時前
2小時前
3小時前
4小時前
5小時前

熱門文章

行業要聞
市場熱點
精選讀物

精選專題

App内阅读