#6 コーク・プロトコル事件:二つの独立した脆弱性が組み合わさった壊滅的なエクスプロイトチェーン

#6 コーク・プロトコル事件:二つの独立した脆弱性が組み合わさった壊滅的なエクスプロイトチェーン

2025年5月28日、Ethereum上のCork Protocolが約1200万ドルの損失をもたらすエクスプロイトを受けました。根本原因は、満期までの履歴インプライド・イールド平均(HIYA)価格操作と、Uniswap v4フックコールバックにおけるアクセス制御の欠如の組み合わせでした。HIYAリスクプレミアムは満期までの時間がゼロに近づくにつれて指数関数的に増加するため、満期直前のスワップはHIYAを急増させ、新規に初期化された市場がCover Tokenを大幅に過小評価する原因となりました。同時に、CorkHook.beforeSwapにはmsg.sender認証が欠けており、不正に作成されたパラメータでの任意のコールを可能にしていました。両方の欠陥を悪用することで、攻撃者は大量のCTとDSを抽出し、それらをwstETHに変換してプロトコルの準備金を枯渇させました。

背景

0x1.1 トークノミクス

Cork Protocolは、トークン化されたリスクのための新しいプリミティブを導入し、ウォレットトークン、利回り付きステーブルコイン、流動性(リ)ステーキングトークンなどのオンチェーン資産のためのプログラム可能なリスクレイヤーとして機能します。基盤となるコンポーネントは、市場が構築されるメカニズムであるCork Poolです。各Cork Poolは、資産ペア「Redemption Asset(RA)」と「Pegged Asset(PA)」を中心に構築されています。

Cork PoolはRedemption Assetのデポジットを受け取り、それをロックします。その見返りに、2つのトークンがミントされ、デポジターに返却されます:「Depeg Swap(DS)」と「Cover Token(CT)」。設定された満期日前に、1 DS + 1 CT/PAは1 RAとスワップバックできます。満期後、1 CTはプールに残っているRA + PAに対して比例配分で償還できます。

PA+DS=RAPA + DS = RA

CT+DS=RACT + DS = RA

0x1.2 コントラクト実装

DSとCTは両方とも取引可能です。ユーザーは、CorkHookを介したカスタムAMMカーブに基づくNormalSwapを使用してCTとRAを取引できます。一方、DSとRAは、RouterCorkHookを介したFlashSwapを使用して取引されます。

NormalSwap [カスタムAMMカーブ]:

x1tyt=kx^{1-t} y^{t} = k

FlashSwap [FlashSwapRouter.swapDsforRa]:

  1. 購入者はRAをRouterに転送します。

  2. 最初のbeforeSwapコールで、RouterはスワップアウトされるDSの量を計算します。必要に応じて、Uniswap v4プールからRAとCTを借り入れ、借り入れたCTとプロトコルのDSをRAに変換し、必要なRAを保持し、借り入れたRAをUniswapプールに返却します。

  3. 2回目のbeforeSwapコールで、RouterdepositPsmを介してRAをCTとDSに分解し、すべてのDSをユーザーに転送し、借り入れたCTをUniswapプールに返済し、超過したCTを買い手に返金します。

発行後の資金分配:

RA+CT:AMMRA+CT: AMM

DS:RouterDS: Router

0x1.3 新規発行の価格設定メカニズム

プロトコルはHIYA(履歴インプライド・イールド平均)を採用しており、これはボリューム(vTv_T)×リスクプレミアム(rTr_T)の累積和として計算され、リスクプレミアムを測定し、満期時の初期価格を調整するために使用されます。HIYAが高い場合、プロトコルはより高いデペッグリスクを想定し、その結果、初期CT価格が低くなります。

Cumulative HIYA=TrTvTCumulative\ HIYA = \sum_T r_T v_T

リスクプレミアム(rTr_T)の計算は2つのコンポーネントで構成されています。高いCT価格は低いrTr_T値と相関します(これは直感的です)、そして満期時間Tは指数関数的な増幅効果を持ちます。満期が近づくと、Tはゼロに近づき、指数1/T1/Tが急速に増加します。これにより、わずかなCT価格の変動さえも大きなリスクプレミアム値に増幅されます。

rT=(F/pT)1/T1r_T = (F / p_T)^{1/T} - 1

  • FF は 1

  • PTP_T はCTの価格

  • TT は1から0の間に正規化された満期までの時間

脆弱性分析

影響を受けた市場は、以下のトークンを含みます。

役割 トークン 説明
RA wstETH Redemption Asset
PA weETH Pegged Asset
DS weETH8DS-2 Depeg Swap
CT weETH8CT-2 Cover Token

明確にするため、以降のレポートでは、具体的な名前ではなく抽象的な役割(RA、DS、CT)でトークンを参照します。ただし、区別が重要な場合は例外とします。

攻撃者は、2つの異なる方法を使用して、AMMとRouterからDSとCTの両方を抽出しました。DS + CTはRAに償還できるため、両方を入手することで直接的な利益抽出が可能になります。攻撃は2つのコンポーネントで構成されます。

0x2.1 Cover Token抽出:HIYA操作による市場初期化価格の人工的な低下

満期後の市場再初期化価格は、前の期間のaccumulatedHIYA値から導出されます。HIYAはスワップ中に更新され、リスクプレミアムを組み込んでいるため、攻撃者は満期直前にスワップを実行してaccumulatedHIYAを人工的に急増させることができます。

その結果、新しい市場は歪んだ価格比率で初期化され、AMMでCover Tokenが非常に低く価格設定される原因となり、攻撃者はRAを過剰な量のCTとスワップできるようになります。

0x2.2 Depeg Swap抽出:`CorkHook.beforeSwap`におけるアクセス制御の欠如

脆弱性は、CorkHook.beforeSwapにおける送信者検証の欠如によって引き起こされます。この関数はmsg.sender == PoolManagerを強制しないため、攻撃者は任意のパラメータで直接呼び出すことができます。

DSトークンをRAとして供給し、不正に作成されたコールデータでRouter.CorkCallをスプーフィングすることにより、攻撃者は不正な分割をトリガーし、悪意を持って初期化された市場から価値を抽出することができます。

攻撃分析

このインシデントは、準備トランザクション、初期化トランザクション、攻撃トランザクションの3つのフェーズで展開されます。

準備トランザクション

このトランザクションで、攻撃者はSwapRaForDs()を呼び出し、accumulatedHIYAを操作しました。

初期化トランザクション

このトランザクションで、市場は操作された価格比率で初期化され、AMMでCTの価格が非常に低くなりました。その後、攻撃者はRAを大量のCTとスワップしました。

攻撃トランザクション

攻撃トランザクションの主要なステップは次のとおりです。

このフェーズで、攻撃者は実際のDS(weETH8DS‑2)をそのRAとして扱う偽の市場を作成しました。この偽の市場内でミントされたすべてのトークンは、以下では偽CTおよび偽DSと呼ばれます。

  1. 攻撃者はまず、正当な市場でRAをDSとスワップしました。

  2. 攻撃者は、偽の市場をデプロイおよび初期化し、実際のDSを偽RAとして指定しました。

  3. 攻撃者は、アクセス制御の欠如をバイパスして、非空のhookDatabeforeSwapを直接呼び出し、FlashSwap実行パスをトリガーしました。

  4. hookData内で、攻撃者はpaymentTokenを偽CTとして指定したため、プロトコルは偽市場に対してRA分解ロジックを実行しました。

  5. プロトコルは、すべての偽RA(すなわち、実際のDS)を偽CTと偽DSに分解しました。偽DS全体が攻撃者に転送され、偽CT(最小のpaymentAmountを除く)は攻撃者に返金されました。

  6. 攻撃者は、抽出した偽CTと偽DSを偽市場内で偽RAにスワップし、実際のDSを回収しました。

  7. 最後に、攻撃者は回収したDSと以前に購入したCTを組み合わせてRAを構成し、それによって攻撃利益を実現しました。

まとめ

このインシデントは、単独では十分ではない2つの独立した欠陥を組み合わせて、単一のエクスプロイトチェーンでプロトコルから1200万ドルをドレインしました。

  • 満期近辺での指数関数的なリスクプレミアム。 HIYA価格設定式は、満期までの時間がゼロに近づくにつれてリスクプレミアムを増幅させ、満期直前のスワップを市場再初期化価格の操作ベクトルにしています。
  • フックコールバックにおける送信者検証の欠如。 CorkHook.beforeSwapは、msg.senderPoolManagerであることを強制せず、任意のパラメータでの直接呼び出しを可能にし、攻撃者がFlashSwap実行パスをスプーフィングできるようにしました。
  • モジュール間相互作用の盲点。 経済設計(HIYAベースの価格設定)とアクセス制御のギャップ(認証されていないフックコールバック)は、別々のモジュールに存在していました。それらの相互作用は、単一モジュール分析では検出されにくいエクスプロイト可能なパスを作成しました。

参考文献

  1. https://www.cork.tech/blog/post-mortem

  2. https://docs.cork.tech/core-concepts/cork-pool


BlockSecについて

BlockSecは、フルスタックのブロックチェーンセキュリティおよび暗号コンプライアンスプロバイダーです。当社は、顧客がコード監査(スマートコントラクト、ブロックチェーン、ウォレットを含む)、リアルタイムでの攻撃傍受、インシデント分析、不正資金の追跡、およびAML/CFT義務の遵守を、プロトコルおよびプラットフォームのライフサイクル全体にわたって実行できるようにする製品とサービスを構築しています。

BlockSecは、著名なカンファレンスで複数のブロックチェーンセキュリティ論文を発表し、DeFiアプリケーションのいくつかのゼロデイ攻撃を報告し、複数のハッキングをブロックして2000万ドル以上を救済し、数十億ドルの暗号通貨を確保しています。

Sign up for the latest updates