瞬態存儲殘留引發30萬美元鏈上資產損失 開發者需警惕新特性風險

致命殘留:瞬態存儲引發的30萬美元鏈上事件分析

2025年3月30日,某鏈上安全監控系統檢測到Ethereum網路上的一個槓杆交易項目遭受攻擊,造成超30萬美元的資產損失。安全團隊對此事件進行了深入分析,現將結果分享如下:

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

背景

Solidity 0.8.24版本引入了基於EIP-1153的瞬態存儲特性。這是一種新的數據存儲位置,爲開發者提供低成本、交易期間有效的臨時存儲方式。瞬態存儲的主要特點包括:

  1. 低gas成本:操作固定消耗100 gas,遠低於常規存儲操作。
  2. 交易內持久性:數據在整個交易期間保持有效。
  3. 自動清除:交易結束後,瞬態存儲自動重置爲零。

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

事件分析

此次事件的根本原因是,函數中使用tstore進行瞬態存儲的值在函數調用結束後未被清空,攻擊者利用這一特性構造特定的惡意地址,繞過權限檢查轉出代幣。

攻擊步驟如下:

  1. 攻擊者創建兩個惡意代幣A和B,並在某DEX上爲這兩個代幣創建流動性池。

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

  1. 調用目標合約的initialize函數,以A代幣爲抵押品,B代幣爲債務代幣創建槓杆交易市場。

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

  1. 調用mint函數,存入債務代幣B鑄造槓杆代幣。此過程中,DEX池子地址和鑄造數量被瞬態存儲。

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

  1. 創建一個地址與瞬態存儲中鑄造數量相同的惡意合約。

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

  1. 通過惡意合約調用目標合約的回調函數,利用瞬態存儲中殘留的數值繞過身分驗證。

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

  1. 最後,攻擊者通過攻擊合約直接調用目標合約的回調函數,將其中的其他代幣(如WBTC、WETH)轉出獲利。

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

資金流向

據鏈上分析工具的數據,攻擊者盜取了約30萬美元的資產,包括:

  • 17,814.8626 USDC
  • 1.4085 WBTC
  • 119.871 WETH

這些資產隨後被兌換成WETH,共計193.1428 WETH被轉入某匿名化工具。攻擊者的初始資金來源於該工具轉入的0.3 ETH。

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

安全建議

  1. 項目方應根據業務邏輯,在函數調用結束後立即使用tstore(key, 0)清除瞬態存儲中的值。

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

  1. 加強合約代碼審計與安全測試,特別關注新引入的語言特性及其潛在風險。

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

  1. 實施多重驗證機制,避免單一漏洞導致的大規模資產損失。

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

  1. 定期進行安全評估和漏洞掃描,及時修復潛在問題。

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

  1. 考慮引入安全監控系統,實時監測異常交易行爲。

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

此事件再次提醒我們,在採用新技術時需要格外謹慎,充分理解其特性和潛在風險。同時,持續的安全實踐和定期審計對於保障鏈上項目安全至關重要。

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

致命殘留:一場由瞬態存儲引發的30萬美元鏈上劫案

查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 5
  • 分享
留言
0/400
MemeTokenGeniusvip
· 07-22 16:28
30w刀就这么没了? 多少人搞死了
回復0
巨鲸跟踪者vip
· 07-21 21:55
又一个智能合约掉坑里了
回復0
GateUser-1a2ed0b9vip
· 07-19 16:59
又有人翻车了 谁让你贪便宜
回復0
委托书收集者vip
· 07-19 16:55
又被割30w,啧啧
回復0
智能合约捉虫人vip
· 07-19 16:50
真•捉虫手速MAX!
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)