Jarvis Networkはフラッシュローンによる再入攻撃を受け、66.3万MATICの損失を被りました。

robot
概要作成中

Jarvis Networkプロジェクトがフラッシュローン再入攻撃を受けた分析

2023年1月15日、Jarvis_NetworkプロジェクトがPolygonネットワークで攻撃を受け、約66.3万MATICの損失を被りました。分析によると、攻撃者はフラッシュローンと再入攻撃の脆弱性を利用して攻撃を行いました。

! ジャービスネットワークフラッシュローン再入攻撃インシデント分析

攻撃トランザクションのコールスタック分析により、再入中に同じコントラクトの同じ関数を呼び出す際、渡されるパラメーターは同じであるにもかかわらず、戻り値には著しい差異があることが示されました。再入前後の戻り値はそれぞれ次のとおりです:

  • プレエントリー:1002157321772769944名
  • 再入国後:10091002696492234934

! ジャービスネットワークフラッシュローン再入攻撃インシデント分析

再入はremove_liquidity関数で発生します。この関数は流動性を削除する際にユーザーが追加したトークンを返します。PolygonはEVM互換のため、MATICがコントラクトに送信されると再入がトリガーされました。

! ジャービスネットワークフラッシュローン再入攻撃インシデント分析

深入分析が示すように、問題はgetUnderlyingPrice関数の実装にあります。この関数は一連の内部計算と外部呼び出しを含んでおり、その中で重要なのはget_virtual_price関数の戻り値です。この関数の戻り値はself.D変数の影響を受け、self.Dの更新はトークンの転送後に行われます。

! ジャービスネットワークフラッシュローン再入攻撃インシデント分析

攻撃者は流動性を削除する際に、MATICが攻撃契約に移動した後、コールバックを通じてトークンの価格を先に照会しました。self.Dがまだ更新されていなかったため、価格の取得が誤っていました。攻撃者はこの時間差を利用して、再入時に借入価格を約10倍に引き上げました。

! ジャービスネットワークフラッシュローン再入攻撃インシデント分析

remove_liquidity関数は@nonreentrant('lock')デコレーターを使用して再入を防いでいますが、攻撃者はクロスコントラクト再入を通じてこの保護メカニズムを回避しました。

! ジャービスネットワークフラッシュローン再入攻撃インシデント分析

この攻撃は、いくつかの重要な問題を暴露しました:

  1. 変数の変更ロジックが外部呼び出しの後に位置しているため、価格取得に異常が生じます。
  2. クロスコントラクト再入によって再入ロックが無効になります。
  3. "チェック-エフェクト-インタラクション"(Checks-Effects-Interactions)パターンに従っていない。

! ジャービスネットワークフラッシュローン再入攻撃インシデント分析

類似の攻撃を防ぐために、プロジェクト側に提案します:

  • 厳格なセキュリティ監査を行う
  • 変数の変更を外部呼び出しの前に置く
  • 複数のデータソースを使用して価格を取得する
  • "チェック-適用-インタラクション"のコーディング規範に従う

これらの措置を通じて、プロジェクトの安全性と安定性を大幅に向上させることができます。

! ジャービスネットワークフラッシュローン再入攻撃インシデント分析

! ジャービスネットワークフラッシュローン再入攻撃インシデント分析

! ジャービスネットワークフラッシュローンリエントランシー攻撃インシデント分析

! ジャービスネットワークフラッシュローン再入攻撃インシデント分析

! ジャービスネットワークフラッシュローン再入攻撃インシデント分析

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • コメント
  • リポスト
  • 共有
コメント
0/400
コメントなし
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)