瞬态存储漏洞导致以太坊项目遭30万美元黑客攻击

robot
摘要生成中

一场由瞬态存储引发的链上劫案:30万美元损失的背后

2025年3月30日,一个名为SIR.trading的以太坊链上杠杆交易项目遭受攻击,导致超过30万美元的资产损失。安全团队对此事件进行了深入分析,揭示了攻击的细节和原因。

致命残留:一场由瞬态存储引发的30万美元链上劫案

事件背景

攻击者利用了Solidity 0.8.24版本引入的瞬态存储特性。这种新的数据存储位置旨在提供低成本、交易期间有效的临时存储方式。瞬态存储的主要特点包括:

  1. 低gas成本:操作费用固定为100 gas。
  2. 交易内持久性:数据在整个交易期间保持有效。
  3. 自动清除:交易结束后,存储自动重置为零。

致命残留:一场由瞬态存储引发的30万美元链上劫案

攻击根源

攻击的根本原因在于,函数中使用tstore进行瞬态存储的值在函数调用结束后并未被清空。这使得攻击者能够构造特定的恶意地址,绕过权限检查并转出代币。

致命残留:一场由瞬态存储引发的30万美元链上劫案

攻击过程

  1. 攻击者创建两个恶意代币A和B,并在某DEX上为这两个代币创建池子并注入流动性。

  2. 攻击者调用Vault合约的initialize函数,以A代币为抵押品,B代币为债务代币创建杠杆交易市场。

  3. 攻击者调用Vault合约的mint函数,存入债务代币B铸造杠杆代币。在这个过程中,DEX池子地址和铸造数量被瞬态存储。

  4. 攻击者创建一个恶意合约,其地址与之前瞬态存储的铸造数量相同。

  5. 攻击者通过恶意合约调用Vault合约的回调函数,由于瞬态存储中的值未被清空,成功绕过了权限检查。

  6. 最后,攻击者直接通过攻击合约调用Vault合约的回调函数,将其他代币(如WBTC、WETH)转出获利。

致命残留:一场由瞬态存储引发的30万美元链上劫案

致命残留:一场由瞬态存储引发的30万美元链上劫案

致命残留:一场由瞬态存储引发的30万美元链上劫案

致命残留:一场由瞬态存储引发的30万美元链上劫案

致命残留:一场由瞬态存储引发的30万美元链上劫案

致命残留:一场由瞬态存储引发的30万美元链上劫案

致命残留:一场由瞬态存储引发的30万美元链上劫案

致命残留:一场由瞬态存储引发的30万美元链上劫案

致命残留:一场由瞬态存储引发的30万美元链上劫案

致命残留:一场由瞬态存储引发的30万美元链上劫案

致命残留:一场由瞬态存储引发的30万美元链上劫案

致命残留:一场由瞬态存储引发的30万美元链上劫案

致命残留:一场由瞬态存储引发的30万美元链上劫案

资金流向分析

根据链上分析工具的数据,攻击者盗取了约30万美元的资产,包括:

  • 17,814.8626 USDC
  • 1.4085 WBTC
  • 119.871 WETH

这些资产随后被转换为WETH,并最终转入了某匿名化工具。攻击者的初始资金来源是从该工具转入的0.3 ETH。

致命残留:一场由瞬态存储引发的30万美元链上劫案

安全建议

为防止类似攻击,项目方应:

  1. 在函数调用结束后立即使用tstore(key, 0)清除瞬态存储中的值。
  2. 加强合约代码审计和安全测试。
  3. 谨慎使用新引入的语言特性,充分了解其潜在风险。

这起事件再次强调了在区块链项目开发中,安全性与新技术应用之间需要保持平衡的重要性。随着技术的不断演进,开发者和安全专家需要保持警惕,及时识别和应对新的安全挑战。

ETH2.19%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 7
  • 转发
  • 分享
评论
0/400
MemeTokenGeniusvip
· 08-07 07:48
蠢蠢惹人爱啊 连测都不测就上线?
回复0
quiet_lurkervip
· 08-07 07:48
又一个项目被摁在地上摩擦
回复0
PumpBeforeRugvip
· 08-07 07:48
听说这回转头就跑啦~智能合约小漏洞
回复0
MEV猎手vip
· 08-07 07:48
这30w也太便宜了 闪电贷都懒得跑
回复0
合约自动投降vip
· 08-07 07:44
老项目梭哈新特性 凉凉...
回复0
难道我又错过空投vip
· 08-07 07:42
呵 小打小闹的30w罢了
回复0
末曾在场vip
· 08-07 07:27
这么低级的漏洞都能中招?
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)