2023年10月18日北京時間19:48:59に、Hope.moneyの貸付プールがフラッシュローンに基づいて攻撃されました。Hope.moneyは、HopeLend貸付プラットフォーム、HopeSwap分散型取引所、ステーブルコイン$HOPE、ガバナンストークン$LTを含むフルスタックの分散型金融サービスを構築しました。攻撃に関与するプロトコルは、ユーザーがプロトコルに流動性を提供したり、過剰担保して収入を得たりできる分散型貸付プラットフォームであるHopeLendです。## イベントの開始と終了HopeLendのコード実装では、預金証明書を破棄する際の誤った整数除算の問題により、貸付プールに悪用可能な脆弱性があり、小数点が切り捨てられ、予想よりも少ない証明書の破棄を達成し、期待どおりの同じ値のトークンを取得しました。攻撃者はこの欠陥を悪用して、Hope.moneyの複数の貸付プールを空にしました。hEthWbtcレンディングプールは73日前に展開されましたが、資金がなかったため、ハッカーは貸付プールに多額の資金を注入して割引率を劇的に急上昇させ、ブロックトランザクションで他のすべての貸付プールをすばやく空にしました。さらに劇的に、悪用されたハッカーはエクスプロイトの資金を受け取らず、彼の攻撃トランザクションは、彼の攻撃を模倣し、すべての攻撃収益資金(527 ETH)を盗むことに成功したスナッチャーによって発見され、最終的に攻撃収益資金の50%(263 ETH)は、ブロック(ペイロード)を梱包した鉱夫に賄賂を贈るために強盗によって使用されました。脆弱性を発見した最初のハッカーは、ブロック18377039で攻撃コントラクトを作成し、ブロック18377042でコントラクトを攻撃するために呼び出し、その時点でスナッチャーはメモリプール内のトランザクションを監視し、その攻撃コントラクトをスナッチングコントラクトの入力としてシミュレートし、同じ18377042ブロックで悪用し、ブロック18377042の最初のハッカーのトランザクションはスナッチャの後ろにソートされたため失敗しました。! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-420dceb701-dd1a6f-69ad2a)## お金の行き先スナッチャーが収益を受け取ってから1時間後、資金は次の場所に送金されます0x9a9122Ef3C4B33cAe7902EDFCD5F5a486792Bc3A! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-2bec7812fd-dd1a6f-69ad2a)10月20日13:30:23に、疑わしい公式チームがアドレスに連絡し、ランナーが報酬として26 ETH(10%の利益)を残し、ランナーから返信を受け取ることができました。! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-b3c8715e62-dd1a6f-69ad2a)最終的な資金は、1時間の通信の後、GnosisSafeのマルチシグボールトに送金されました。! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-a7c1f91d1a-dd1a6f-69ad2a)以下に、実際の脆弱性と悪用するハッカーの詳細を示します。## 事前情報*HopeLendの融資プロトコルはAaveからのフォークを実装しているため、脆弱性に関連するコアビジネスロジックはAaveのホワイトペーパーで参照されています。0x00 預金・貸付Aaveは純粋なDeFiであり、貸付事業は流動性プールを通じて実現され、ユーザーはAave預金が流動性を提供するときに借入からの収入を受け取ることを期待しています。ローン収入はユーザーに完全に分配されず、利息収入のごく一部がリスクリザーブに含まれ、この部分はより少ない割合であり、ローン収入のほとんどは流動性を提供するユーザーに分配されます。Aaveで預金貸付を行う場合、Aaveは割引によって流動性プールの初期時点での預金数のシェアに異なる時点での預金数を変換するため、各株式数の原資産に対応する元本と利息の合計を金額\*インデックスで直接計算できるため、計算と理解が大幅に容易になります。これは、資金の購入と同様のプロセスとして理解することができ、ファンドの初期正味価値は1であり、ユーザーは100元を投資して100株を取得し、利益期間の後、正味価値は1.03になり、この時点でユーザーは再び100元を投資し、得られたシェアは97であり、ユーザーの総シェアは197です。これは実際にはインデックスに従って資産を割引しています。 これは、ユーザーの実際の元本と利息の合計に現在のインデックスに残高が乗算されるためです。 2回目の入金の場合、ユーザーの正しい元本と利息の合計は100 \* 1.03 + 100 = 203でなければならず、割引されない場合、2番目のユーザーは元本と利息の合計が(100 + 100)\* 1.03 = 206になった後に100を入金し、割引した場合、元本と利息の合計は(100 + 100 / 1.03)\* 1.03 = 103 + 100 = 203、203の結果は正しいです。## 攻撃プロセス0x25126......403907(hETHWBTC pool)0x5a63e...... 844e74 (攻撃契約 - キャッシュアウト)加害者:### 1. 最初のフラッシュローン資金を貸し出し、それらを誓約します攻撃者は最初にAave Lightningから2300 WBTCを借り、2000 WBTCの預金をHopeLendに賭け、資金はHopeLendeのhEthWbtc契約(0x251に送金されます... 907)、対応する2000 hETHWBTCも取得します。! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-39c44b60e7-dd1a6f-69ad2a)### 2. 空の貸出プールでの初期割引率(流動性指数)の操作フラッシュローンのためにホープレンドから2000WBTCを借ります。! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-493bd5cd96-dd1a6f-69ad2a)現在の値は 1 hETHWBTC = 1 WBTC です。ETHWBTCにアクセスしてWBTCに交換する通常の操作によると、交換比率には影響しません(利息が得られた場合にのみ交換比率に影響を与え、1 hETHWBTCはより多くのWBTCを取得します)。この時点で、ハッカーは一連の複雑な操作を通じて割引率を操作し始めました。•ハッカーは2000年のWBTC資金をホープレンのhEthWbtc契約に直接送金しました(0x 251 ... 907)、このステップはローンを返済することではありません。•その後、ハッカーはWBTCの大部分(1999.999 ... ) であるため、前の手順では、プール内の資産を補充するために WBTC にロールバックする必要があります。•最後に、ハッカーはhEthWbtcの最小単位(1 e-8)のみを保持し、ここで完全に言及することはできませんが、流動性指数の計算として少し残す必要があるため、既存のプラス加算に基づいており、クリアされた場合、流動性指数が0になり、プール内の比率を不均衡にすることはできません。•前のステップでhEthWbtcと交換されたwBTCのほとんどを破壊し、前のフラッシュローンから残りのwBTCを追加し、貸し出されたフラッシュローンをHopeLendプールに返還し、合計2001.8WBTC(利息1.8wBTCを含む)を支払います。•上記のプロセスにより、hEthWbtcのほとんどが破壊され、ハッカーアカウントにhEthWbtcの最小単位が1つ(1 e-8)しか残らないため、hETHWBTCの合計量が削減され、貸付プールには2001.8 wBTCがあり、その時点で流動性指数は驚異的な126,000,000に達します。 これには、預金ユーザーの関心は基本的にプール内の流動性の成長から来ており、貸付プールは預金金利と利用率に応じて借入金利と預金金利を動的に調整するという知識が含まれます。! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-e386610ea7-dd1a6f-69ad2a)ここで、プールがフラッシュローンの利息(1.8 WBTC)から追加の流動性を受け取ると、70パーセント(126, 000, 000)が流動性指数(liquidityIndex)に含まれ、預金単位あたりの割引値(hEthWbt)の計算に使用されます。! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-56409cd0fd-dd1a6f-69ad2a)! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-96bcc3e14e-dd1a6f-69ad2a)! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-9a75762f1e-dd1a6f-69ad2a)ハック前はプールが空だったため、返済後のtotalLiquidityは1のみ、金額は126000000、初期流動性指数は1となり、126000001という結果になります。! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-c54ae6461b-dd1a6f-69ad2a)### 3. 割引率を増幅し続けるハッカーはフラッシュローンのためにHopeLendから2,000のWBTCを借り、毎回追加の1.8のWBTCを返し、各流動性インデックスが126,000,000を蓄積できるようにしました。ハッカーはこのプロセスを60回繰り返し、最終的に流動性インデックスは7, 560, 000, 001に達し、攻撃者が保有するhEthWBTCの最小単位1の割引値は75.6WBTC(約214万ドル)に達する可能性があります。これにより、ハッカーはhEthWBTCを操作して、その価値を歪めることができます。! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-7a6cfad314-dd1a6f-69ad2a)### 4. 収益を形成するための資金が存在する他のローンプールを空洞化するその後、攻撃者はhEthWBTCの最小ユニットを1つ賭け、HopeLondの他の5つのトークンプールから大量の資産を貸し出しました。含める:* 175.4 - ウェス* 145、522.220985 - USDT* 123, 406.134999 - USDC* 844、282.284002229528476039 - 希望* 220、617.821736563540747967 - stHOPE! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-8aa289f7db-dd1a6f-69ad2a)これらのトークンは、収益としてUniswapを通じてWBTCとWESと交換され、さまざまな手数料を差し引いた後、ハッカーは最終的に約263 WETH(ペイロードに賄賂を贈った263.9 WETHを除く)の利益を上げました。ハッカーが他のプールから多額のお金を借りることができる理由:預金を借りたり引き出したりするとき、貸付契約はユーザーの担保資産の状態をチェックして、貸付が担保を超えないようにします。割引率はハッカーによって操作されており、割引率は正規化された所得乗数の担保価値で計算されているため、彼の手にあるhEthWBTCの1ユニットの担保価値は75.6WBTCにもなります。! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-e21db310ea-dd1a6f-69ad2a)! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-9c0111bcf6-dd1a6f-69ad2a)彼らが他のプールからお金を借りるたびに、ハッカーは簡単に担保資産の検証に合格しました。! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-362c84f0ae-dd1a6f-69ad2a)この時点で、攻撃者は合計2000 + 1.8 \ * 60 WBTCをHopeLendに投資して流動性インデックスを操作し、hEtthWBTCを1ユニットだけ残しました。### 5. 重大な脆弱性ポイント(整数除算エラー)を悪用してキャッシュアウトする以前の投資wBTCを取り除くために、攻撃者は別の攻撃契約を展開しました:0x 5 a 63 e... 844 e 74 で withdrawAllBtc() メソッドを呼び出します! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-821db2a3ae-dd1a6f-69ad2a)脆弱性のプロセスは次のとおりです。(1)最初のデポジット151.20000002 wBTC、現在の流動性指数(1最小単位hEthWBTC = 75.6 wBTC)によると、攻撃者はhEthWBTCの最小単位を2つ取得します。(2)113.4 wBTCを取り出し(引き出し)、対応するhEthWBTCシェアを逆計算し、hEthWBTCをバーンします。(3)113.4 wBTCはhEthWBTCの最小単位1.9999999998を破壊する必要がありますが、div関数の精度により、hEthWBTCの最小単位は1つだけ破壊されるため、悪用可能な脆弱性になり、ハッカーはhEthWBTCの最小単位を1つ保持できます。## 重大な脆弱性! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-7ff70593aa-dd1a6f-69ad2a)hEthWBTCのバーンメソッドは、高精度の分割レイディビジョンを呼び出します。! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/resized-social/moments-7f230462a9-8ab92bd200-dd1a6f-69ad2a)ここは:a= 11340000000 (WBTC は削除される予定です)b = 7560000001000000000000000009655610336(割引率)(a\* 1e27+b/2)/b = 1.9999999998 ですが、Solidity の組み込み div メソッドは切り捨てて 1 を返しますが、これは除算後に小数点以下の桁数が切り捨てられる 113400000000 / 7560000001 に相当します。0x5a63(攻撃契約-キャッシュアウト)は、75.60000001 WBTCを正確に入金して、さらに1つの最小ユニットhEthWBTCを取得し、2つの最小ユニットhEthWBTCを保持し続けます。このループでは、113.400000000 wBTCが引き出され、75.60000001 wBTCが入金され、各攻撃者は薄い空気から37.8 wBTCを取得できます。58サイクル後、攻撃者は前払いで投資したすべてのwBTCを引き出し、Aaveのフラッシュローンをスムーズに返還しました。## まとめhEthWBTCレンディングプールは初期化されていないため、攻撃者は流動性インデックスを簡単に操作して最大に増やすことができ、引き出し率は除数として大幅に増幅され、整数除算の切り捨てエラーにより、ブロックへの以前の投資を取りやすくなります。うまく機能している貸付プールでは、プール内の既存の流動性による貸付利息のわずかな増加により、割引率を大幅に引き上げることは容易ではありません。
CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析
2023年10月18日北京時間19:48:59に、Hope.moneyの貸付プールがフラッシュローンに基づいて攻撃されました。
Hope.moneyは、HopeLend貸付プラットフォーム、HopeSwap分散型取引所、ステーブルコイン$HOPE、ガバナンストークン$LTを含むフルスタックの分散型金融サービスを構築しました。
攻撃に関与するプロトコルは、ユーザーがプロトコルに流動性を提供したり、過剰担保して収入を得たりできる分散型貸付プラットフォームであるHopeLendです。
イベントの開始と終了
HopeLendのコード実装では、預金証明書を破棄する際の誤った整数除算の問題により、貸付プールに悪用可能な脆弱性があり、小数点が切り捨てられ、予想よりも少ない証明書の破棄を達成し、期待どおりの同じ値のトークンを取得しました。
攻撃者はこの欠陥を悪用して、Hope.moneyの複数の貸付プールを空にしました。
hEthWbtcレンディングプールは73日前に展開されましたが、資金がなかったため、ハッカーは貸付プールに多額の資金を注入して割引率を劇的に急上昇させ、ブロックトランザクションで他のすべての貸付プールをすばやく空にしました。
さらに劇的に、悪用されたハッカーはエクスプロイトの資金を受け取らず、彼の攻撃トランザクションは、彼の攻撃を模倣し、すべての攻撃収益資金(527 ETH)を盗むことに成功したスナッチャーによって発見され、最終的に攻撃収益資金の50%(263 ETH)は、ブロック(ペイロード)を梱包した鉱夫に賄賂を贈るために強盗によって使用されました。
脆弱性を発見した最初のハッカーは、ブロック18377039で攻撃コントラクトを作成し、ブロック18377042でコントラクトを攻撃するために呼び出し、その時点でスナッチャーはメモリプール内のトランザクションを監視し、その攻撃コントラクトをスナッチングコントラクトの入力としてシミュレートし、同じ18377042ブロックで悪用し、ブロック18377042の最初のハッカーのトランザクションはスナッチャの後ろにソートされたため失敗しました。
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-420dceb701-dd1a6f-69ad2a.webp)
お金の行き先
スナッチャーが収益を受け取ってから1時間後、資金は次の場所に送金されます0x9a9122Ef3C4B33cAe7902EDFCD5F5a486792Bc3A
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-2bec7812fd-dd1a6f-69ad2a.webp)
10月20日13:30:23に、疑わしい公式チームがアドレスに連絡し、ランナーが報酬として26 ETH(10%の利益)を残し、ランナーから返信を受け取ることができました。
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-b3c8715e62-dd1a6f-69ad2a.webp)
最終的な資金は、1時間の通信の後、GnosisSafeのマルチシグボールトに送金されました。
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-a7c1f91d1a-dd1a6f-69ad2a.webp)
以下に、実際の脆弱性と悪用するハッカーの詳細を示します。
事前情報
*HopeLendの融資プロトコルはAaveからのフォークを実装しているため、脆弱性に関連するコアビジネスロジックはAaveのホワイトペーパーで参照されています。
0x00 預金・貸付
Aaveは純粋なDeFiであり、貸付事業は流動性プールを通じて実現され、ユーザーはAave預金が流動性を提供するときに借入からの収入を受け取ることを期待しています。
ローン収入はユーザーに完全に分配されず、利息収入のごく一部がリスクリザーブに含まれ、この部分はより少ない割合であり、ローン収入のほとんどは流動性を提供するユーザーに分配されます。
Aaveで預金貸付を行う場合、Aaveは割引によって流動性プールの初期時点での預金数のシェアに異なる時点での預金数を変換するため、各株式数の原資産に対応する元本と利息の合計を金額*インデックスで直接計算できるため、計算と理解が大幅に容易になります。
これは、資金の購入と同様のプロセスとして理解することができ、ファンドの初期正味価値は1であり、ユーザーは100元を投資して100株を取得し、利益期間の後、正味価値は1.03になり、この時点でユーザーは再び100元を投資し、得られたシェアは97であり、ユーザーの総シェアは197です。
これは実際にはインデックスに従って資産を割引しています。 これは、ユーザーの実際の元本と利息の合計に現在のインデックスに残高が乗算されるためです。 2回目の入金の場合、ユーザーの正しい元本と利息の合計は100 * 1.03 + 100 = 203でなければならず、割引されない場合、2番目のユーザーは元本と利息の合計が(100 + 100)* 1.03 = 206になった後に100を入金し、割引した場合、元本と利息の合計は(100 + 100 / 1.03)* 1.03 = 103 + 100 = 203、203の結果は正しいです。
攻撃プロセス
0x25126......403907(hETHWBTC pool)
0x5a63e...... 844e74 (攻撃契約 - キャッシュアウト)
加害者:
1. 最初のフラッシュローン資金を貸し出し、それらを誓約します
攻撃者は最初にAave Lightningから2300 WBTCを借り、2000 WBTCの預金をHopeLendに賭け、資金はHopeLendeのhEthWbtc契約(0x251に送金されます... 907)、対応する2000 hETHWBTCも取得します。
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-39c44b60e7-dd1a6f-69ad2a.webp)
2. 空の貸出プールでの初期割引率(流動性指数)の操作
フラッシュローンのためにホープレンドから2000WBTCを借ります。
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-493bd5cd96-dd1a6f-69ad2a.webp)
現在の値は 1 hETHWBTC = 1 WBTC です。
ETHWBTCにアクセスしてWBTCに交換する通常の操作によると、交換比率には影響しません(利息が得られた場合にのみ交換比率に影響を与え、1 hETHWBTCはより多くのWBTCを取得します)。
この時点で、ハッカーは一連の複雑な操作を通じて割引率を操作し始めました。
•ハッカーは2000年のWBTC資金をホープレンのhEthWbtc契約に直接送金しました(0x 251 ... 907)、このステップはローンを返済することではありません。
•その後、ハッカーはWBTCの大部分(1999.999 ... ) であるため、前の手順では、プール内の資産を補充するために WBTC にロールバックする必要があります。
•最後に、ハッカーはhEthWbtcの最小単位(1 e-8)のみを保持し、ここで完全に言及することはできませんが、流動性指数の計算として少し残す必要があるため、既存のプラス加算に基づいており、クリアされた場合、流動性指数が0になり、プール内の比率を不均衡にすることはできません。
•前のステップでhEthWbtcと交換されたwBTCのほとんどを破壊し、前のフラッシュローンから残りのwBTCを追加し、貸し出されたフラッシュローンをHopeLendプールに返還し、合計2001.8WBTC(利息1.8wBTCを含む)を支払います。
•上記のプロセスにより、hEthWbtcのほとんどが破壊され、ハッカーアカウントにhEthWbtcの最小単位が1つ(1 e-8)しか残らないため、hETHWBTCの合計量が削減され、貸付プールには2001.8 wBTCがあり、その時点で流動性指数は驚異的な126,000,000に達します。 これには、預金ユーザーの関心は基本的にプール内の流動性の成長から来ており、貸付プールは預金金利と利用率に応じて借入金利と預金金利を動的に調整するという知識が含まれます。
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-e386610ea7-dd1a6f-69ad2a.webp)
ここで、プールがフラッシュローンの利息(1.8 WBTC)から追加の流動性を受け取ると、70パーセント(126, 000, 000)が流動性指数(liquidityIndex)に含まれ、預金単位あたりの割引値(hEthWbt)の計算に使用されます。
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-56409cd0fd-dd1a6f-69ad2a.webp)
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-96bcc3e14e-dd1a6f-69ad2a.webp)
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-9a75762f1e-dd1a6f-69ad2a.webp)
ハック前はプールが空だったため、返済後のtotalLiquidityは1のみ、金額は126000000、初期流動性指数は1となり、126000001という結果になります。
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-c54ae6461b-dd1a6f-69ad2a.webp)
3. 割引率を増幅し続ける
ハッカーはフラッシュローンのためにHopeLendから2,000のWBTCを借り、毎回追加の1.8のWBTCを返し、各流動性インデックスが126,000,000を蓄積できるようにしました。
ハッカーはこのプロセスを60回繰り返し、最終的に流動性インデックスは7, 560, 000, 001に達し、攻撃者が保有するhEthWBTCの最小単位1の割引値は75.6WBTC(約214万ドル)に達する可能性があります。
これにより、ハッカーはhEthWBTCを操作して、その価値を歪めることができます。
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-7a6cfad314-dd1a6f-69ad2a.webp)
4. 収益を形成するための資金が存在する他のローンプールを空洞化する
その後、攻撃者はhEthWBTCの最小ユニットを1つ賭け、HopeLondの他の5つのトークンプールから大量の資産を貸し出しました。
含める:
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-8aa289f7db-dd1a6f-69ad2a.webp)
これらのトークンは、収益としてUniswapを通じてWBTCとWESと交換され、さまざまな手数料を差し引いた後、ハッカーは最終的に約263 WETH(ペイロードに賄賂を贈った263.9 WETHを除く)の利益を上げました。
ハッカーが他のプールから多額のお金を借りることができる理由:
預金を借りたり引き出したりするとき、貸付契約はユーザーの担保資産の状態をチェックして、貸付が担保を超えないようにします。
割引率はハッカーによって操作されており、割引率は正規化された所得乗数の担保価値で計算されているため、彼の手にあるhEthWBTCの1ユニットの担保価値は75.6WBTCにもなります。
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-e21db310ea-dd1a6f-69ad2a.webp)
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-9c0111bcf6-dd1a6f-69ad2a.webp)
彼らが他のプールからお金を借りるたびに、ハッカーは簡単に担保資産の検証に合格しました。
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-362c84f0ae-dd1a6f-69ad2a.webp)
この時点で、攻撃者は合計2000 + 1.8 \ * 60 WBTCをHopeLendに投資して流動性インデックスを操作し、hEtthWBTCを1ユニットだけ残しました。
5. 重大な脆弱性ポイント(整数除算エラー)を悪用してキャッシュアウトする
以前の投資wBTCを取り除くために、攻撃者は別の攻撃契約を展開しました:0x 5 a 63 e... 844 e 74 で withdrawAllBtc() メソッドを呼び出します
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-821db2a3ae-dd1a6f-69ad2a.webp)
脆弱性のプロセスは次のとおりです。
(1)最初のデポジット151.20000002 wBTC、現在の流動性指数(1最小単位hEthWBTC = 75.6 wBTC)によると、攻撃者はhEthWBTCの最小単位を2つ取得します。
(2)113.4 wBTCを取り出し(引き出し)、対応するhEthWBTCシェアを逆計算し、hEthWBTCをバーンします。
(3)113.4 wBTCはhEthWBTCの最小単位1.9999999998を破壊する必要がありますが、div関数の精度により、hEthWBTCの最小単位は1つだけ破壊されるため、悪用可能な脆弱性になり、ハッカーはhEthWBTCの最小単位を1つ保持できます。
重大な脆弱性
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-7ff70593aa-dd1a6f-69ad2a.webp)
hEthWBTCのバーンメソッドは、高精度の分割レイディビジョンを呼び出します。
! [CertiK:分散型貸付プラットフォームHopeLendに対する貸付攻撃の分析] (https://img-cdn.gateio.im/webp-social/moments-7f230462a9-8ab92bd200-dd1a6f-69ad2a.webp)
ここは:
a= 11340000000 (WBTC は削除される予定です)
b = 7560000001000000000000000009655610336(割引率)
(a* 1e27+b/2)/b = 1.9999999998 ですが、Solidity の組み込み div メソッドは切り捨てて 1 を返しますが、これは除算後に小数点以下の桁数が切り捨てられる 113400000000 / 7560000001 に相当します。
0x5a63(攻撃契約-キャッシュアウト)は、75.60000001 WBTCを正確に入金して、さらに1つの最小ユニットhEthWBTCを取得し、2つの最小ユニットhEthWBTCを保持し続けます。
このループでは、113.400000000 wBTCが引き出され、75.60000001 wBTCが入金され、各攻撃者は薄い空気から37.8 wBTCを取得できます。
58サイクル後、攻撃者は前払いで投資したすべてのwBTCを引き出し、Aaveのフラッシュローンをスムーズに返還しました。
まとめ
hEthWBTCレンディングプールは初期化されていないため、攻撃者は流動性インデックスを簡単に操作して最大に増やすことができ、引き出し率は除数として大幅に増幅され、整数除算の切り捨てエラーにより、ブロックへの以前の投資を取りやすくなります。
うまく機能している貸付プールでは、プール内の既存の流動性による貸付利息のわずかな増加により、割引率を大幅に引き上げることは容易ではありません。