瞬态存储残留引发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)