**背景**SlowMist MistEye システムのセキュリティ警告によると、2023 年 10 月 7 日に、Avalanche チェーンのソーシャル プロトコルである Stars Arena が攻撃され、約 290 万米ドルの損失が発生しました。 SlowMist セキュリティ チームは攻撃インシデントを簡単に分析し、その結果を次のように共有しました。# **関連情報**攻撃者のアドレス:攻撃契約:攻撃トランザクション:# **アタックコア**攻撃者は、再入可能性の脆弱性を悪用して、自分の預金シェアに対応する価格を改ざんします。その後、販売時にも、悪意のある操作による価格計算の依存性により、同様の価格操作が発生しました。攻撃者は、再エントリー時に更新された株価を正確に計算することで、契約から資金を盗みます。# **トランザクション分析**攻撃トランザクションに再入可能な呼び出しがあることがわかり、コードを逆コンパイルすることで呼び出しメソッドを徐々に分析します。攻撃者はまず攻撃コントラクト (0x7f283 および 0xdd9af) を作成し、Stars Arena: Shares コントラクトの 0xe9ccf3a3 メソッドを攻撃コントラクトを通じて呼び出し、次に 1 AVAX トークンをデポジットしました。逆コンパイルされたコードの段階的な追跡によると、攻撃者が最初に使用した 0xe9ccf3a3 メソッドは、0x326c メソッドと 0x2058 メソッドを呼び出す、デポジットに似た関数です。 0x326c メソッドはパラメータとして返される呼び出しのみですが、0x2058 メソッドは特定のトークンの購入または交換を処理する関数に似ており、このメソッドは 0xe9ccf3a3 で渡された AVAX トークンの量とアドレスを使用して次の操作を実行します、シェアと手数料を計算します。0x2058 メソッドの 92 行目の呼び出しロジックに従うと、0x1a9b メソッドは計算関数であることがわかります。計算結果は価格に類似した値であり、その戻り値は新しく計算された v24 / 0xde0b6b3a7640000 または \_initialPrice です。行 109、110、および 116 の 0x307c および 0x30ef メソッドには低レベルの呼び出しがあり、0x30ef の呼び出しは依然として g1 (受信 0xdd9af 攻撃コントラクト アドレス) への外部呼び出しです。この関数には再入防止ロック制約はなく、外部呼び出しが実行された後、このメソッドは後続の if 判定を実行して、field0.length および field0 パラメーターを更新します。ここでリエントランシーが発生することは疑いの余地がありません。攻撃者がリエントラント呼び出しで構築したデータを見てみましょう。リエントラントな外部呼び出しは 0x5632b2e4 メソッドで、攻撃者が構築した 4 つのパラメータが渡されます。これらのパラメータは 16 進数変換により 91000000000 に変換されます。前述したように、0x5632b2e4 メソッドの外部呼び出しは、if (g0 == \_getMyShares[address(g1)][msg.sender]) 判定の前に実行されます。この時点では、field0.length の値は 0 であり、更新されていません。攻撃者は、このメソッドを使用して 0x5632b2e4 メソッドの判定を回避し、攻撃コントラクト 0xdd9af である msg.sender の以下の 4 つのパラメータ状態を、外部呼び出し時に構築されたデータに変更しました。上記の操作の後、攻撃者は sellShares に電話して自分の株式を売却し、266,102.97278 AVAX を取得しました。sellShares 関数を詳しく見てみると、この関数は最初に 0x1a9b メソッドを呼び出し、その前の 0x2058 メソッドの呼び出しがありました。これは、特定のトークンの購入または交換を処理する関数です。 0x1a9b メソッドの 0x2329 メソッドが owner\_9f を更新することがわかります。 [g0] 、このパラメータは、再突入時に攻撃者によって構築された 91000000000 に変更されました。0x1a9b メソッドに戻り、以前に悪意を持って構築された値に基づいて再計算します (計算量についてはコメントを参照してください)。上記の計算後、新たに計算された株式に対応する価格が変更され、計算結果は 274,333.061476814e18 となります。一連の手数料徴収の後、攻撃者は悪意のある構造を使用して株式を変更せずに価格を操作し、株式を売却して利益を上げることに成功しました。# **要約**この攻撃の核心は、リエントランシー攻撃によって引き起こされる価格計算の依存関係の更新にあり、これが同様の悪意のある価格操作につながります。 SlowMist セキュリティ チームは、プロジェクト当事者が、契約を展開してリリースする前に複数のセキュリティ会社による監査を受けるよう最善を尽くし、同時に、コーディング時に Checks-Effects-Interactions コーディング仕様を可能な限り満たす必要があると推奨しています。そして再突入防止ロックを追加する必要があります。
スローミスト: ハッキングされた Stars Arena の簡単な分析
背景
SlowMist MistEye システムのセキュリティ警告によると、2023 年 10 月 7 日に、Avalanche チェーンのソーシャル プロトコルである Stars Arena が攻撃され、約 290 万米ドルの損失が発生しました。 SlowMist セキュリティ チームは攻撃インシデントを簡単に分析し、その結果を次のように共有しました。
# 関連情報
攻撃者のアドレス:
攻撃契約:
攻撃トランザクション:
アタックコア
攻撃者は、再入可能性の脆弱性を悪用して、自分の預金シェアに対応する価格を改ざんします。その後、販売時にも、悪意のある操作による価格計算の依存性により、同様の価格操作が発生しました。攻撃者は、再エントリー時に更新された株価を正確に計算することで、契約から資金を盗みます。
トランザクション分析
攻撃トランザクションに再入可能な呼び出しがあることがわかり、コードを逆コンパイルすることで呼び出しメソッドを徐々に分析します。
攻撃者はまず攻撃コントラクト (0x7f283 および 0xdd9af) を作成し、Stars Arena: Shares コントラクトの 0xe9ccf3a3 メソッドを攻撃コントラクトを通じて呼び出し、次に 1 AVAX トークンをデポジットしました。
逆コンパイルされたコードの段階的な追跡によると、攻撃者が最初に使用した 0xe9ccf3a3 メソッドは、0x326c メソッドと 0x2058 メソッドを呼び出す、デポジットに似た関数です。 0x326c メソッドはパラメータとして返される呼び出しのみですが、0x2058 メソッドは特定のトークンの購入または交換を処理する関数に似ており、このメソッドは 0xe9ccf3a3 で渡された AVAX トークンの量とアドレスを使用して次の操作を実行します、シェアと手数料を計算します。
0x2058 メソッドの 92 行目の呼び出しロジックに従うと、0x1a9b メソッドは計算関数であることがわかります。計算結果は価格に類似した値であり、その戻り値は新しく計算された v24 / 0xde0b6b3a7640000 または _initialPrice です。
行 109、110、および 116 の 0x307c および 0x30ef メソッドには低レベルの呼び出しがあり、0x30ef の呼び出しは依然として g1 (受信 0xdd9af 攻撃コントラクト アドレス) への外部呼び出しです。この関数には再入防止ロック制約はなく、外部呼び出しが実行された後、このメソッドは後続の if 判定を実行して、field0.length および field0 パラメーターを更新します。ここでリエントランシーが発生することは疑いの余地がありません。
攻撃者がリエントラント呼び出しで構築したデータを見てみましょう。
リエントラントな外部呼び出しは 0x5632b2e4 メソッドで、攻撃者が構築した 4 つのパラメータが渡されます。これらのパラメータは 16 進数変換により 91000000000 に変換されます。
前述したように、0x5632b2e4 メソッドの外部呼び出しは、if (g0 == _getMyShares[address(g1)][msg.sender]) 判定の前に実行されます。この時点では、field0.length の値は 0 であり、更新されていません。攻撃者は、このメソッドを使用して 0x5632b2e4 メソッドの判定を回避し、攻撃コントラクト 0xdd9af である msg.sender の以下の 4 つのパラメータ状態を、外部呼び出し時に構築されたデータに変更しました。
上記の操作の後、攻撃者は sellShares に電話して自分の株式を売却し、266,102.97278 AVAX を取得しました。
sellShares 関数を詳しく見てみると、この関数は最初に 0x1a9b メソッドを呼び出し、その前の 0x2058 メソッドの呼び出しがありました。これは、特定のトークンの購入または交換を処理する関数です。 0x1a9b メソッドの 0x2329 メソッドが owner_9f を更新することがわかります。 [g0] 、このパラメータは、再突入時に攻撃者によって構築された 91000000000 に変更されました。
0x1a9b メソッドに戻り、以前に悪意を持って構築された値に基づいて再計算します (計算量についてはコメントを参照してください)。
上記の計算後、新たに計算された株式に対応する価格が変更され、計算結果は 274,333.061476814e18 となります。一連の手数料徴収の後、攻撃者は悪意のある構造を使用して株式を変更せずに価格を操作し、株式を売却して利益を上げることに成功しました。
要約
この攻撃の核心は、リエントランシー攻撃によって引き起こされる価格計算の依存関係の更新にあり、これが同様の悪意のある価格操作につながります。 SlowMist セキュリティ チームは、プロジェクト当事者が、契約を展開してリリースする前に複数のセキュリティ会社による監査を受けるよう最善を尽くし、同時に、コーディング時に Checks-Effects-Interactions コーディング仕様を可能な限り満たす必要があると推奨しています。そして再突入防止ロックを追加する必要があります。