# 瞬時ストレージの欠陥によりEthereumプロジェクトが30万ドルの攻撃を受ける2025年3月30日、あるセキュリティ監視システムがEthereumチェーン上のレバレッジ取引プロジェクトが攻撃を受け、30万ドル以上の資産が損失したことを監視しました。セキュリティチームはこの事件の分析を行い、結果を以下の通り共有します:## 背景Solidity 0.8.24バージョンは瞬間ストレージ(transient storage)機能を導入しました。これは新しいデータストレージの場所です。その核心的な特徴は、データが現在のトランザクション実行中のみ有効であり、トランザクションが終了すると自動的にクリアされることです。アクセスと変更はTSTOREとTLOADの2つの新しいEVM命令を通じて実現されます。瞬時ストレージには以下の特徴があります:- 低ガスコスト:TSTOREとTLOADのガスコストは固定で100です。- 取引内の持続性:データは取引全体の間有効に保たれます- 自動クリア:取引終了後に自動的にゼロにリセット! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-3e4b0d4747de5f167298db78f28251e2)## 脆弱性の原因今回の事件の根本的な原因は、関数内でtstoreを使用して瞬時に保存された値が、関数の呼び出し終了後にクリアされなかったことです。これにより、攻撃者はこの特性を利用して特定の悪意のあるアドレスを構築し、権限チェックを回避してトークンを転送することができました。! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-17317f8c1ab5c8cafd379315695be34c)## 攻撃プロセス1. 攻撃者は二つの悪意のあるトークンAとBを作成し、あるDEX上でこれらのトークンのプールを作成して流動性を注入します。その中で、Aトークンは攻撃契約です。2. 攻撃者はVaultコントラクトのinitialize関数を呼び出し、Aトークンを担保トークンとして、Bトークンを債務トークンとしてレバレッジ取引市場APE-21を作成します。3. 攻撃者はVault契約のmint関数を呼び出し、債務トークンBを預けてレバレッジトークンAPEを鋳造します。この過程で、DEXプールのアドレスと鋳造数量が順次一時保存されます。4. 攻撃者は、2回目の一時ストレージの値と同じアドレスを持つ悪意のある契約を作成します。5. 攻撃者はこの悪意のあるコントラクトを通じてVaultコントラクトのコールバック関数を直接呼び出してトークンを引き出します。一時ストレージ内の値がクリアされていないため、身元確認が誤って通過してしまいます。6. 最後に、攻撃者は攻撃契約(Aトークン)を通じてVault契約のコールバック関数を呼び出し、Vault契約内の他のトークン(WBTC、WETH)を転送して利益を得る。! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-fde2d0d89b221f239b5ad5d0fd586d42)! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-30320e0697136205e69772f53122d5be)! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-e977f8452ae48dea208426db15adab36)! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-0ef4c8b460905daddd99060876917199)! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-193da5915e9140a4cf26cc1a04c39260)! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-c12acde84f6df58e57eb10d68c487d6b)! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-653adef89663df141d377b583f5566bfc)! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-2b2f646b8ee78e58f3df2076ed62be99)! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-b342e46fb86369b5bd082591bbe741fa)! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-e7fed078646f6800505eb85ae09e65bf)! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-7317876b8e2a3a592abcaf1e21b62f46)## マネーフロー分析オンチェーン分析によると、攻撃者は約30万ドルの資産を盗み、17,814.8626 USDC、1.4085 WBTC、119.871 WETHを含んでいます。- WBTCは63.5596 WETHに交換されました- USDCは9.7122 WETHに交換されました- 193.1428 WETHがある混合通貨サービスに転送されました攻撃者の初期資金は、あるミキシングサービスから送られた0.3 ETHに由来しています。! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-8197999b1965f36c7584c2aba320257b)! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-636a5fb9c992ef97cbe75e22fac0d331)! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-904133c007422770dd55372438c3d2570192837465674839201! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗])https://img-cdn.gateio.im/social/moments-c2206fe20197a3835ddb92319314e4eb(## まとめと提案今回の攻撃の核心は、一時的なストレージを利用して、取引の期間中に値を保持する特性を利用し、コールバック関数の権限検証を回避したことです。プロジェクトチームは、ビジネスロジックに基づいて、関数呼び出しが終了した後に直ちにtstore)key, 0(を使用して、一時的なストレージ内の値をクリアすることをお勧めします。また、同様の事態を避けるために、契約コードの監査とセキュリティテストを強化する必要があります。
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(を使用して、一時的なストレージ内の値をクリアすることをお勧めします。また、同様の事態を避けるために、契約コードの監査とセキュリティテストを強化する必要があります。