
GoldPesaのGPXHooksから約11.4万ドル流出
ユニスワップv4(Uniswap v4)向けフック「GPXHooks」が、ベース(Base)上で展開するゴールドペサ(GoldPesa)で悪用され、約11万4,000ドル(約1,800万円)相当の資産が流出したことが明らかになった。分散型金融(DeFi)セキュリティ監視サービスのディファイモン・アラーツ(Defimon Alerts)が10月3日に報告した。被害は10月2日に発生しており、ディファイモンは原因を「ロジックエラー」としている。
ゴールドペサは、ベース上でトークン「GPX」や流動性プロトコルなどを展開しているプロジェクトだ。同プロジェクトはユニスワップv4上にGPXと米ドル連動型ステーブルコイン「USDC」の流動性プールを構築している。流動性プールとは、利用者がトークンを交換できるよう、複数の資産をあらかじめプールしておく仕組みだ。今回被害を受けたのは、ゴールドペサが管理する「プロトコル保有流動性」だった。
今回のインシデントには、ユニスワップv4の「フック(Hooks)」と呼ばれる仕組みが関係している。フックは、ユニスワップv4の流動性プールに開発者が独自の処理を追加するためのスマートコントラクトだ。具体的には、トークン交換の前後や流動性の追加・削除時などに、開発者が設定した処理を実行できる。
ゴールドペサはこの仕組みを利用し、GPXHooksを通じてプロトコルが保有するGPX/USDCの流動性を自動的にリバランスしていた。リバランスとは、流動性として供給している資産のポジションを調整する処理を指す。ディファイモンによると、GPXHooksでは前回のリバランスから1時間が経過すると、GPXプールで行われるスワップによってリバランス処理を発生させることができたという。
今回の攻撃では、このリバランス処理と、ユニスワップv4の「フラッシュアカウンティング(Flash Accounting)」と呼ばれる仕組みとの組み合わせが悪用された。フラッシュアカウンティングでは、一連の処理による資産の受け払いを「差額(delta)」として内部的に記録し、最終的な差額について実際のトークン移転を行う。
具体的には、攻撃者はまず、レンディングプロトコルのモルフォ(Morpho)からフラッシュローンを利用して17万5,000 USDCを借り入れた。フラッシュローンは、1回の取引処理の中で借り入れと返済を完了することを条件に、担保なしで暗号資産(仮想通貨)を借りられる仕組みだ。
その後、攻撃者はWETH/USDCの流動性ポジションを作成したものの、必要なUSDCを支払わず、流動性ポジションを管理する「PositionManager」に約11万5,000 USDCの未精算の債務を残した。さらに攻撃者は、その状態でGPXプールのスワップを行い、GPXHooksのリバランスを発生させた。
これによりGPXHooksは自身の流動性ポジションを解消し、約14万8,900 USDCの受け取り分を発生させた。このとき、同じ一連の処理ではPositionManager上の差額が共有されるため、GPXHooksの受け取り分と攻撃者が残した未払い分が分離されなかった。このため、GPXHooksが実際に受け取ったのは約3万3,900 USDCだったとのことだ。
ディファイモンは、この処理によってGPXHooksが実質的に攻撃者のポジションの代金を支払う形になったと説明している。一方、攻撃者は自身の流動性ポジションを解消して約11万5,000 USDCを取得し、モルフォから借り入れた資金を返済した。
オンチェーンセキュリティ企業のオクル(Oculr)による分析では、攻撃者はGPXHooksが管理するプロトコル保有流動性から約11万4,400 USDCを流出させたという。また攻撃に使用されたアドレスには、それ以前の取引履歴がなく、攻撃の約8分前にクロスチェーンブリッジのアクロス(Across)を通じて資金が送られていたとのことだ。
その後、攻撃者は11万4,428.5 USDCを流動性の薄いユニスワップv3(Uniswap v3)のプールで9万6,389 USDTに交換した。さらにディファイモンは、その後USDTがソラナ(Solana)へブリッジされ、BNBスマートチェーン(BNB Smart Chain:BSC)へ送られたと報告している。ブリッジとは、異なるブロックチェーン間で資産を移動する仕組みだ。
なお今回報告された問題は、ユニスワップv4自体の脆弱性ではなく、ゴールドペサがフック機能を利用して構築したGPXHooksのロジックに関するものだ。フックによってユニスワップv4の流動性プールの動作をカスタマイズできる一方、フックに追加する独自の処理は各開発者が実装する。
本稿執筆時点で、ゴールドペサの公式Xアカウントでは今回のインシデントに関する発表は確認できていない。
— Defimon Alerts (@DefimonAlerts) October 3, 2026
@Goldpesatoken – Loss $114K (2026-10-02) Network: Base Type: Logic Error GoldPesa’s Uniswap v4 hook (GPXHooks) rebalances its protocol-owned GPX/USDC liquidity inside beforeSwap, and any swap can trigger it once an hour has passed since the last rebalance. reBalance() calls PositionManager.modifyLiquiditiesWithoutUnlock with BURN_POSITION + TAKE_PAIR. TAKE_PAIR collects the PositionManager’s full net credit, and that delta is shared by every caller in the same PoolManager unlock. The attacker borrowed 175K USDC from Morpho. Inside its own unlock, it minted a WETH/USDC position through the PositionManager and never paid for it, leaving roughly 115K USDC of debt on the PositionManager. It then swapped on the GPX pool to trigger the rebalance. The hook burned its position for 148.9K USDC, but TAKE_PAIR netted that against the attacker’s debt, so the hook received only 33.9K. In effect the hook paid for the attacker’s position. The attacker burned that position for 115K USDC, repaid the loan and swapped the profit to USDT. The stolen USDT was bridged to Solana and then to BSC to hide traces. TX: https://t.co/SIJWjYyajn Attacker: https://t.co/u4szRoUcJB Laundered to: https://t.co/R30yWjkw2g Vulnerable GPXHooks: https://t.co/wyQ6U60DIR Detected with https://t.co/X9cKWDVOJz
GoldPesa’s Uniswap V4 hook just paid off an attacker’s debt. $114k gone. An unlabelled attacker EOA (0x4a5f…899f, 0 prior txs, funded about 8 minutes earlier through the Across Base SpokePool) called its own contract 0x3d69…4e86. That contract was funded with a 175,000 USDC Morpho flash loan. It drained about 114.4k USDC of protocol-owned liquidity from the GoldPesa (GPX) Uniswap V4 pool, which is managed by the GPXHooks contract (0x4519…eaa8). The attacker repaid the loan, swapped 114,428.5 USDC for 96,389 USDT in a thin Uniswap V3 pool and sent the USDT to the attacker EOA. Tx: https://t.co/IuXZnS07W4 Attacker EOA: https://t.co/sWdNNr9g5a Attack contract: https://t.co/Ub2LHQMWgL Victim (GPXHooks): https://t.co/nlndk2dX4H Full breakdown: https://t.co/897wQhTgwN https://t.co/897wQhTgwN
— Oculr (@oculrxyz) October 3, 2026
参考:ベーススキャン
画像:PIXTA
関連ニュース
- ニアの「NEAR Intents」でセキュリティインシデント、約380万ドル損失。全額補償へ
- メタマスクでセキュリティインシデント発生、バリデータを予防的に退出
- シンビオーシス、ビットコイン・ブリッジのインシデントに関する事後報告公開。ユーザー損失総額は9.97BTCに
- カルダノの「SecondFi」でセキュリティインシデント、約1600万ADA流出
- レイヤーゼロ、KelpDAO「rsETH」インシデント詳細レポート公開。単独DVN構成での署名拒否へ
参照元:ニュース – あたらしい経済
@Goldpesatoken – Loss $114K (2026-10-02) Network: Base Type: Logic Error GoldPesa’s Uniswap v4 hook (GPXHooks) rebalances its protocol-owned GPX/USDC liquidity inside beforeSwap, and any swap can trigger it once an hour has passed since the last rebalance. reBalance() calls PositionManager.modifyLiquiditiesWithoutUnlock with BURN_POSITION + TAKE_PAIR. TAKE_PAIR collects the PositionManager’s full net credit, and that delta is shared by every caller in the same PoolManager unlock. The attacker borrowed 175K USDC from Morpho. Inside its own unlock, it minted a WETH/USDC position through the PositionManager and never paid for it, leaving roughly 115K USDC of debt on the PositionManager. It then swapped on the GPX pool to trigger the rebalance. The hook burned its position for 148.9K USDC, but TAKE_PAIR netted that against the attacker’s debt, so the hook received only 33.9K. In effect the hook paid for the attacker’s position. The attacker burned that position for 115K USDC, repaid the loan and swapped the profit to USDT. The stolen USDT was bridged to Solana and then to BSC to hide traces. TX: https://t.co/SIJWjYyajn Attacker: https://t.co/u4szRoUcJB Laundered to: https://t.co/R30yWjkw2g Vulnerable GPXHooks: https://t.co/wyQ6U60DIR Detected with https://t.co/X9cKWDVOJz

コメント