# 瞬時ストレージの脆弱性により30万ドル相当の資産が盗まれた2025年3月30日、イーサリアムチェーン上のレバレッジ取引プロジェクトが攻撃を受け、30万ドル以上の資産が失われました。セキュリティチームはこの事件を詳しく分析し、結果を以下の通り共有します:## 背景Solidity 0.8.24バージョンでは、EIP-1153に基づく瞬時ストレージ機能が導入されました。これは、開発者に低コストで、取引中に有効な一時的なストレージ方法を提供するための新しいデータストレージ位置です。瞬時ストレージは、TSTOREおよびTLOADという2つの新しいEVM命令を通じて実現され、低ガスコスト、取引内持続性、自動クリアなどの特徴があります。! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-3e4b0d4747de5f167298db78f28251e2)## 攻撃の理由今回の事件の根本原因は、関数内でtstoreを使用して一時的に保存された値が関数呼び出しの終了後にクリアされなかったことです。攻撃者はこの特性を利用して特定の悪意のあるアドレスを構築し、権限チェックを回避してトークンを転送しました。! [致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗](https://img-cdn.gateio.im/social/moments-17317f8c1ab5c8cafd379315695be34c)## 攻撃ステップ1. 攻撃者は2つの悪意のあるトークンAとBを作成し、あるDEX上でこれら2つのトークンのプールを作成し流動性を注入します。2. 攻撃者はVault契約のinitialize関数を呼び出し、Aトークンを担保トークンとして、Bトークンを債務トークンとしてレバレッジ取引市場を作成します。3. 攻撃者はVaultコントラクトのmint関数を呼び出し、債務トークンBを預けてレバレッジトークンを発行します。このプロセスでは、DEXプールアドレスと発行数量が一時的に保存されます。4. 攻撃者は、2回目の一時ストレージの値と同じアドレスを持つ悪意のあるコントラクトを作成します。5. 攻撃者は悪意のあるコントラクトを介してVaultコントラクトのコールバック関数を呼び出し、トークンを引き出します。瞬時ストレージの値がクリアされていないため、身元確認が誤って通過します。6. 最後に、攻撃者は攻撃契約(Aトークン)を通じて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)! [致命的な残留物:一時的なストレージによって引き起こされた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(## 資金の流れの分析攻撃者は約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でした。## サマリー今回の攻撃の核心は、攻撃者がトランザクションの全期間中に不変である瞬時ストレージの特性を利用し、コールバック関数の権限検証を回避したことです。プロジェクトチームは、ビジネスロジックに従って、関数呼び出しの終了後に直ちにtstore)key, 0(を使用して瞬時ストレージ内の値をクリアすることをお勧めします。同時に、同様の事態が発生しないように、契約コードの監査とセキュリティテストを強化する必要があります。
瞬時ストレージの脆弱性により、イーサリアム信用取引プロジェクトが30万ドルの損失を被った
瞬時ストレージの脆弱性により30万ドル相当の資産が盗まれた
2025年3月30日、イーサリアムチェーン上のレバレッジ取引プロジェクトが攻撃を受け、30万ドル以上の資産が失われました。セキュリティチームはこの事件を詳しく分析し、結果を以下の通り共有します:
背景
Solidity 0.8.24バージョンでは、EIP-1153に基づく瞬時ストレージ機能が導入されました。これは、開発者に低コストで、取引中に有効な一時的なストレージ方法を提供するための新しいデータストレージ位置です。瞬時ストレージは、TSTOREおよびTLOADという2つの新しいEVM命令を通じて実現され、低ガスコスト、取引内持続性、自動クリアなどの特徴があります。
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
攻撃の理由
今回の事件の根本原因は、関数内でtstoreを使用して一時的に保存された値が関数呼び出しの終了後にクリアされなかったことです。攻撃者はこの特性を利用して特定の悪意のあるアドレスを構築し、権限チェックを回避してトークンを転送しました。
! 致命的な残留物:一時的なストレージによって引き起こされた300,000ドルのオンチェーン強盗
攻撃ステップ
攻撃者は2つの悪意のあるトークンAとBを作成し、あるDEX上でこれら2つのトークンのプールを作成し流動性を注入します。
攻撃者はVault契約のinitialize関数を呼び出し、Aトークンを担保トークンとして、Bトークンを債務トークンとしてレバレッジ取引市場を作成します。
攻撃者はVaultコントラクトのmint関数を呼び出し、債務トークンBを預けてレバレッジトークンを発行します。このプロセスでは、DEXプールアドレスと発行数量が一時的に保存されます。
攻撃者は、2回目の一時ストレージの値と同じアドレスを持つ悪意のあるコントラクトを作成します。
攻撃者は悪意のあるコントラクトを介してVaultコントラクトのコールバック関数を呼び出し、トークンを引き出します。瞬時ストレージの値がクリアされていないため、身元確認が誤って通過します。
最後に、攻撃者は攻撃契約(Aトークン)を通じて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ドルのオンチェーン強盗
! 致命的な残留物:一時的なストレージによって引き起こされた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(
資金の流れの分析
攻撃者は約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でした。
サマリー
今回の攻撃の核心は、攻撃者がトランザクションの全期間中に不変である瞬時ストレージの特性を利用し、コールバック関数の権限検証を回避したことです。プロジェクトチームは、ビジネスロジックに従って、関数呼び出しの終了後に直ちにtstore)key, 0(を使用して瞬時ストレージ内の値をクリアすることをお勧めします。同時に、同様の事態が発生しないように、契約コードの監査とセキュリティテストを強化する必要があります。