# Jarvis Networkプロジェクトがフラッシュローンの再入攻撃に遭遇した分析2023年1月15日、Jarvis_Networkプロジェクトが攻撃を受け、663,101個のMATICが失われました。攻撃トランザクションのコールスタック分析を通じて、再入ロジックが存在することが発見されました。再入過程において、同じコントラクトの同じ関数呼び出しに同じ引数を渡しましたが、戻り値は大きく異なりました。! [ジャービスネットワークフラッシュローン再入攻撃インシデント分析](https://img-cdn.gateio.im/social/moments-4d8e15a518ca397b76a7e497617ab978)再入はremove_liquidity関数内で発生します。この関数は流動性を削除する際に、ユーザーが追加したトークンを返します。PolygonはEVMと同型であるため、MATICがコントラクトに転送されると再入が発生します。! [ジャービスネットワークフラッシュローン再入攻撃インシデント分析](https://img-cdn.gateio.im/social/moments-e8af1d7d09e86438ebf38ead98676d76)詳細な分析から、問題はgetUnderlyingPrice関数の実装にあることがわかりました。この関数は複数のコントラクト呼び出しに関与しており、最終的にget_virtual_price関数の返り値に影響を与えます。get_virtual_price関数の返り値はself.D変数に影響され、self.Dの更新は送金の後に行われます。! [ジャービスネットワークフラッシュローン再入攻撃インシデント分析](https://img-cdn.gateio.im/social/moments-723c5b4a39a2f19df12a1a8148314db0)攻撃者が流動性を削除する際、MATICが攻撃契約に移転された後に、fallback関数が価格を照会します。self.Dの更新が送金後に行われるため、以前の価格取得が誤ってしまいます。流動性を削除する方法の流れは次の通りです:1)ユーザーLPの破棄;2)ユーザーのステーキング資金の送信;3)self.Dの更新。! [ジャービスネットワークフラッシュローン再入攻撃インシデント分析](https://img-cdn.gateio.im/social/moments-9bab9c70334266f146fdb56281be3974)self.Dは価格計算に使用され、流動性を追加する際にも更新されます。攻撃者の流動性資金は大きく、通常はself.Dの値はずっと小さくなります。しかし、攻撃者はステップ2でリ入を行い、元の価格の10倍以上で借入を行います。これは、流動性を追加する際にself.Dの値が増加し、流動性を削除する際に適時更新されないためです。! [ジャービスネットワークフラッシュローン再入攻撃インシデント分析](https://img-cdn.gateio.im/social/moments-111047ecd9af84620f98df2f4dd67efa)remove_liquidityメソッドは、@nonreentrant('lock')を使用して再入を防止していますが、攻撃者は他のコントラクトに再入することで資金を借り入れ、再入ロックを無効にします。! [ジャービスネットワークフラッシュローン再入攻撃インシデント分析](https://img-cdn.gateio.im/social/moments-eec688a506ffd949bdb6891b97fabb6c)今回の攻撃の主な原因は、外部呼び出しの後に変数の変更ロジックが行われたことで、価格取得に異常が生じたことです。クロスコントラクトの再入が再入ロックを無効にしました。プロジェクトチームには厳格なセキュリティ監査を実施し、変数の変更を外部呼び出しの前に行い、複数のデータソースを用いた価格取得方法を採用することをお勧めします。「先に判断し、次に変数を書き込み、その後外部呼び出しを行う」というコーディング規範(Checks-Effects-Interactions)に従うことで、プロジェクトの安全性と安定性を向上させることができます。! [ジャービスネットワークフラッシュローン再入攻撃インシデント分析](https://img-cdn.gateio.im/social/moments-a0f03c13dd2d37ba67ccf538fec62aa0)! [ジャービスネットワークフラッシュローン再入攻撃インシデント分析](https://img-cdn.gateio.im/social/moments-fcd66f4cc03bb8e822c9414526681442)! [ジャービスネットワークフラッシュローン再入攻撃インシデント分析](https://img-cdn.gateio.im/social/moments-9b2de9b00c52d3ff96d5a361df65769a)! [ジャービスネットワークフラッシュローンリエントランシー攻撃インシデント分析](https://img-cdn.gateio.im/social/moments-88f9283ee0923cff2a22405715721cd2)! [ジャービスネットワークフラッシュローン再入攻撃インシデント分析](https://img-cdn.gateio.im/social/moments-d41ac025ee561569cce3b941d7e07967)! [ジャービスネットワークフラッシュローン再入攻撃インシデント分析](https://img-cdn.gateio.im/social/moments-2c4474781d661306bc8c432dad3942c0)
Jarvis Networkはフラッシュローンの再入攻撃を受け、663,101 MATICの損失を被りました。
Jarvis Networkプロジェクトがフラッシュローンの再入攻撃に遭遇した分析
2023年1月15日、Jarvis_Networkプロジェクトが攻撃を受け、663,101個のMATICが失われました。攻撃トランザクションのコールスタック分析を通じて、再入ロジックが存在することが発見されました。再入過程において、同じコントラクトの同じ関数呼び出しに同じ引数を渡しましたが、戻り値は大きく異なりました。
! ジャービスネットワークフラッシュローン再入攻撃インシデント分析
再入はremove_liquidity関数内で発生します。この関数は流動性を削除する際に、ユーザーが追加したトークンを返します。PolygonはEVMと同型であるため、MATICがコントラクトに転送されると再入が発生します。
! ジャービスネットワークフラッシュローン再入攻撃インシデント分析
詳細な分析から、問題はgetUnderlyingPrice関数の実装にあることがわかりました。この関数は複数のコントラクト呼び出しに関与しており、最終的にget_virtual_price関数の返り値に影響を与えます。get_virtual_price関数の返り値はself.D変数に影響され、self.Dの更新は送金の後に行われます。
! ジャービスネットワークフラッシュローン再入攻撃インシデント分析
攻撃者が流動性を削除する際、MATICが攻撃契約に移転された後に、fallback関数が価格を照会します。self.Dの更新が送金後に行われるため、以前の価格取得が誤ってしまいます。流動性を削除する方法の流れは次の通りです:1)ユーザーLPの破棄;2)ユーザーのステーキング資金の送信;3)self.Dの更新。
! ジャービスネットワークフラッシュローン再入攻撃インシデント分析
self.Dは価格計算に使用され、流動性を追加する際にも更新されます。攻撃者の流動性資金は大きく、通常はself.Dの値はずっと小さくなります。しかし、攻撃者はステップ2でリ入を行い、元の価格の10倍以上で借入を行います。これは、流動性を追加する際にself.Dの値が増加し、流動性を削除する際に適時更新されないためです。
! ジャービスネットワークフラッシュローン再入攻撃インシデント分析
remove_liquidityメソッドは、@nonreentrant('lock')を使用して再入を防止していますが、攻撃者は他のコントラクトに再入することで資金を借り入れ、再入ロックを無効にします。
! ジャービスネットワークフラッシュローン再入攻撃インシデント分析
今回の攻撃の主な原因は、外部呼び出しの後に変数の変更ロジックが行われたことで、価格取得に異常が生じたことです。クロスコントラクトの再入が再入ロックを無効にしました。プロジェクトチームには厳格なセキュリティ監査を実施し、変数の変更を外部呼び出しの前に行い、複数のデータソースを用いた価格取得方法を採用することをお勧めします。「先に判断し、次に変数を書き込み、その後外部呼び出しを行う」というコーディング規範(Checks-Effects-Interactions)に従うことで、プロジェクトの安全性と安定性を向上させることができます。
! ジャービスネットワークフラッシュローン再入攻撃インシデント分析
! ジャービスネットワークフラッシュローン再入攻撃インシデント分析
! ジャービスネットワークフラッシュローン再入攻撃インシデント分析
! ジャービスネットワークフラッシュローンリエントランシー攻撃インシデント分析
! ジャービスネットワークフラッシュローン再入攻撃インシデント分析
! ジャービスネットワークフラッシュローン再入攻撃インシデント分析