損失超過 4000 萬美元,GMX 攻擊原理分析
GMX 遭黑客利用可重入漏洞攻擊,槓桿機制設計缺陷致損失超 4000 萬美元,核心問題在於贖回邏輯對 AUM 信任過高。
作者:BlockSec
GMX 遭遇黑客攻擊,損失超過 4000 萬美元。攻擊者利用了一個可重入漏洞,並在合約啟用槓桿功能的情況下開空頭頭寸,實施了攻擊。
問題的根源在於 executeDecreaseOrder 函數被錯誤使用。該函數的第一個參數本應是外部賬戶(EOA),但攻擊者傳入了一個智能合約地址。這使得攻擊者可以在贖回過程中重新進入系統,操縱內部狀態,最終贖回的資產遠超其實際持有的 GLP 價值。
GLP正常贖回機制
在 GMX 中,GLP 是流動性提供者代幣,代表對金庫資產(如 USDC、ETH、WBTC)的份額。當用戶調用 unstakeAndRedeemGlp 時,系統使用以下公式計算應返還的資產數量:
redeemamount = (userGLP / totalGLPsupply) * AUM
其中 AUM(管理資產總額)的計算方式為:
AUM = 所有 token 池的總價值 + 全局空頭未實現虧損 - 全局空頭未實現盈利 - 已預留金額 - 預設扣減(aumDeduction)
該機制保證了 GLP 持有者按比例獲得金庫的實際資產份額。
槓桿開啟後的問題
當 enableLeverage 開啟後,用戶可以開設槓桿倉位(多頭或空頭)。攻擊者在贖回 GLP 前,開設了大額的 WBTC 空頭頭寸。
由於空頭一開倉便增加了全局空頭規模,價格尚未變動的情況下系統默認該空頭是虧損的,而這部分未實現虧損會被計為金庫的"資產",導致 AUM 人為上升。儘管金庫並未實際獲得額外價值,但贖回計算會基於這個虛高的 AUM,從而使攻擊者獲得了遠超其應得的資產。
攻擊流程
攻擊交易
https://app.blocksec.com/explorer/tx/arbitrum/0x03182d3f0956a91c4e4c8f225bbc7975f9434fab042228c7acdc5ec9a32626ef?line=93
寫在結尾
此次攻擊暴露了 GMX 在槓桿機制與可重入保護設計上的嚴重缺陷。核心問題在於資產贖回邏輯對 AUM 的信任過高,未對其組成部分(如未實現虧損)進行足夠審慎的安全校驗。同時,關鍵函數對調用者身份的假設(EOA vs 合約)也缺乏強制性驗證。該事件再次提醒開發者,在涉及資金敏感操作時,必須確保系統狀態不可被操縱,尤其是在引入複雜金融邏輯(如槓桿、衍生品)時,更需嚴防重入與狀態污染帶來的系統性風險。
免責聲明:文章中的所有內容僅代表作者的觀點,與本平台無關。用戶不應以本文作為投資決策的參考。
您也可能喜歡
關於 Bitget 上架 MSTR, COIN, HOOD, DFDV RWA 指數永續合約的公告
關於 Bitget 統一帳戶支援部分幣種借貸和保證金功能的公告
【首發上架】Camp Network (CAMP) 將在 Bitget 創新區和 Public Chain 區上架
關於 Bitget 上架 AAPL, GOOGL, AMZN, META, MCD RWA 指數永續合約的公告
加密貨幣價格
更多








