
BlockSec:GMX 攻撃の原理分析
TechFlow厳選深潮セレクト

BlockSec:GMX 攻撃の原理分析
今回の攻撃は、GMXのレバレッジメカニズムおよび再入防止設計における重大な欠陥を露呈した。
執筆:BlockSec
GMXはハッキングを受け、4000万ドル以上の損失を被りました。攻撃者は再入可能(リエントランシー)の脆弱性を悪用し、レバレッジ機能が有効な状態で空売りポジションを開くことで攻撃を実行しました。
問題の根本原因は、executeDecreaseOrder関数の誤った使用にあります。この関数の最初の引数は本来外部アカウント(EOA)であるべきところ、攻撃者はスマートコントラクトのアドレスを渡しました。これにより、償還プロセス中に攻撃者がシステムに再入でき、内部状態を操作することで、実際に保有するGLP価値をはるかに上回る資産を引き出すことに成功しました。
GLPの正常な償還メカニズム
GMXにおいて、GLPは流動性提供者トークンであり、金庫内の資産(USDC、ETH、WBTCなど)に対する持分を表します。ユーザーがunstakeAndRedeemGlpを呼び出すと、以下の式に基づいて返却される資産額が計算されます:
redeem_amount = (user_GLP / total_GLP_supply) × AUM
ここでAUM(運用資産総額)は以下のように算出されます:
AUM = すべてのトークンプールの総価値 + 全体の空売り未実現損失 - 全体の空売り未実現利益 - 予約済み金額 - 事前設定減算値(aumDeduction)
この仕組みにより、GLP保有者は金庫の実際の資産に対して公正な割合で分配を受けられます。
レバレッジ有効時の問題点
enableLeverageが有効になると、ユーザーはレバレッジをかけたポジション(ロングまたはショート)を開けるようになります。攻撃者はGLPの償還前に、大量のWBTCショートポジションを建てました。
ショートポジションの建玉により即座に全体のショート規模が増加し、価格がまだ変動していない状態では、システムはそのショートが損失状態にあると見なします。この未実現損失は金庫の「資産」として計上され、結果としてAUMが人為的に膨らみます。実際には金庫に追加価値があるわけではありませんが、償還計算はこの過大評価されたAUMに基づいて行われるため、攻撃者は本来得るべき額を大きく上回る資産を取得できたのです。
攻撃の流れ
攻撃トランザクション
https://app.blocksec.com/explorer/tx/arbitrum/0x03182d3f0956a91c4e4c8f225bbc7975f9434fab042228c7acdc5ec9a32626ef?line=93


まとめ
今回の攻撃は、GMXにおけるレバレッジメカニズムと再入防止設計の重大な欠陥を露呈しました。根本的な問題は、資産償還ロジックがAUMに対して過度に信頼しており、その構成要素(特に未実現損益)に対する十分なセキュリティチェックが行われていなかったことです。また、重要な関数が呼び出し元の身元(EOAかコントラクトか)について前提を置いていたにもかかわらず、それを強制的に検証していなかった点も問題でした。本件は開発者に改めて警告しています。資金に関わる操作では、いかなる条件下でもシステム状態が操作不能であることを保証しなければならず、特にレバレッジやデリバティブといった複雑な金融ロジックを導入する際には、再入攻撃や状態汚染によるシステミックリスクを厳重に防ぐ必要があるということです。
TechFlow公式コミュニティへようこそ
Telegram購読グループ:https://t.me/TechFlowDaily
Twitter公式アカウント:https://x.com/TechFlowPost
Twitter英語アカウント:https://x.com/BlockFlow_News














