This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Ethereumプロジェクトが30万ドルの攻撃を受け、一時的なストレージの欠陥が主な原因となる
瞬時ストレージの欠陥によりEthereumプロジェクトが30万ドルの攻撃を受ける
2025年3月30日、あるセキュリティ監視システムがEthereumチェーン上のレバレッジ取引プロジェクトが攻撃を受け、30万ドル以上の資産が損失したことを監視しました。セキュリティチームはこの事件の分析を行い、結果を以下の通り共有します:
背景
Solidity 0.8.24バージョンは瞬間ストレージ(transient storage)機能を導入しました。これは新しいデータストレージの場所です。その核心的な特徴は、データが現在のトランザクション実行中のみ有効であり、トランザクションが終了すると自動的にクリアされることです。アクセスと変更はTSTOREとTLOADの2つの新しいEVM命令を通じて実現されます。
瞬時ストレージには以下の特徴があります:
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
脆弱性の原因
今回の事件の根本的な原因は、関数内でtstoreを使用して瞬時に保存された値が、関数の呼び出し終了後にクリアされなかったことです。これにより、攻撃者はこの特性を利用して特定の悪意のあるアドレスを構築し、権限チェックを回避してトークンを転送することができました。
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
攻撃プロセス
攻撃者は二つの悪意のあるトークンAとBを作成し、あるDEX上でこれらのトークンのプールを作成して流動性を注入します。その中で、Aトークンは攻撃契約です。
攻撃者はVaultコントラクトのinitialize関数を呼び出し、Aトークンを担保トークンとして、Bトークンを債務トークンとしてレバレッジ取引市場APE-21を作成します。
攻撃者はVault契約のmint関数を呼び出し、債務トークンBを預けてレバレッジトークンAPEを鋳造します。この過程で、DEXプールのアドレスと鋳造数量が順次一時保存されます。
攻撃者は、2回目の一時ストレージの値と同じアドレスを持つ悪意のある契約を作成します。
攻撃者はこの悪意のあるコントラクトを通じてVaultコントラクトのコールバック関数を直接呼び出してトークンを引き出します。一時ストレージ内の値がクリアされていないため、身元確認が誤って通過してしまいます。
最後に、攻撃者は攻撃契約(Aトークン)を通じてVault契約のコールバック関数を呼び出し、Vault契約内の他のトークン(WBTC、WETH)を転送して利益を得る。
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
マネーフロー分析
オンチェーン分析によると、攻撃者は約30万ドルの資産を盗み、17,814.8626 USDC、1.4085 WBTC、119.871 WETHを含んでいます。
攻撃者の初期資金は、あるミキシングサービスから送られた0.3 ETHに由来しています。
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/webp-social/moments-904133c007422770dd55372438c3d257.webp0192837465674839201
! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗])https://img-cdn.gateio.im/webp-social/moments-c2206fe20197a3835ddb92319314e4eb.webp(
まとめと提案
今回の攻撃の核心は、一時的なストレージを利用して、取引の期間中に値を保持する特性を利用し、コールバック関数の権限検証を回避したことです。プロジェクトチームは、ビジネスロジックに基づいて、関数呼び出しが終了した後に直ちにtstore)key, 0(を使用して、一時的なストレージ内の値をクリアすることをお勧めします。また、同様の事態を避けるために、契約コードの監査とセキュリティテストを強化する必要があります。