Jarvis Networkはフラッシュローンの再入攻撃を受け、663,000 MATICを失いました

Jarvis Network はフラッシュローンの再入攻撃の分析を受けました

最近、Jarvis_Networkというプロジェクトがフラッシュローンの再入攻撃を受け、約66.3万MATICトークンの損失を被りました。この事件は2023年1月15日の夜に発生しました。

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

取引のコールスタックを深く分析することによって、攻撃者が再入脆弱性を利用していることがわかりました。再入の過程では、同じコントラクトの同じ関数が複数回呼び出されましたが、各呼び出しの戻り値には大きな差異がありました。この差異は主にremove_liquidity関数に見られます。

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

再入攻撃は流動性を除去する過程で発生します。PolygonとEVMが同型チェーンであるため、MATICが契約に転送されると、契約の再入ロジックがトリガーされます。呼び出しスタックを詳細に分析することで、問題がgetUnderlyingPrice関数にあることがわかりました。

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

さらに調査したところ、攻撃者は流動性を削除する際に、self.D変数の更新タイミングの脆弱性を利用していました。通常、remove_liquidity メソッドの流れは次のようになります:1) ユーザーの LP を破棄する;2) ユーザーにステーキング資金を送信する;3) self.D を更新する。しかし、攻撃者は2番目のステップで再入操作を行い、価格計算に重大なエラーが発生しました。

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

remove_liquidity 関数は、再入を防ぐために @nonreentrant('lock') デコレーターを使用していますが、攻撃者が他の契約に再入して資金を借りるため、この再入ロックは機能していません。

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

今回の攻撃は主に2つの問題を暴露しました:

  1. 変数の変更ロジックが外部呼び出しの後に位置しているため、価格取得に異常が発生しています。
  2. クロスコントラクト再入が再入ロックを無効にします。

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

類似の攻撃を防ぐために、プロジェクト側は以下の対策を講じることをお勧めします:

  1. コードが厳格なセキュリティ監査を受けていることを確認してください。
  2. 変数の変更を外部呼び出しの前に置きます。
  3. 複数のデータソースを使用して価格を取得します。
  4. "判断を先に行い、変数に書き込んでから外部呼び出しを行う"というコーディング規範(Checks-Effects-Interactions)に従う。

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

これらの措置を講じることで、プロジェクトはその安全性と安定性を大幅に向上させ、ユーザーにより信頼性の高いサービスを提供することができます。

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

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

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

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

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

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 2
  • 共有
コメント
0/400
WalletAnxietyPatientvip
· 4時間前
また下手で遊ぶのが好きな個人投資家は、私鍵を定期的にバックアップすることを忘れないでください

内容言語:中文

提供されたコメント:

契約監査を行わないでこの損失を被るのはおかしい~
原文表示返信0
LiquidatedNotStirredvip
· 4時間前
再び再入です、はは。早くロックすべきでしたね。
原文表示返信0
  • ピン
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)