值得信赖的区块链资讯!
致命残留|一场由瞬态存储引发的链上劫案
作者:九九 & Lisa
编辑:Sherry
背景
2025 年 3 月 30 日,根据慢雾 MistEye 安全监控系统监测,Ethereum 链上的杠杆交易项目 SIR.trading (@leveragesir) 遭攻击,损失价值超 30 万美元的资产。慢雾安全团队对该事件展开分析,并将结果分享如下:
(https://x.com/SlowMist_Team/status/1906245980770746449)
相关信息
攻击者地址:
https://etherscan.io/address/0x27defcfa6498f957918f407ed8a58eba2884768c
存在漏洞的合约地址:
https://etherscan.io/address/0xb91ae2c8365fd45030aba84a4666c4db074e53e7#code
攻击交易:
https://etherscan.io/tx/0xa05f047ddfdad9126624c4496b5d4a59f961ee7c091e7b4e38cee86f1335736f
前置知识
Solidity 0.8.24 版本(2024 年 1 月发布)引入了基于 EIP-1153 的瞬态存储(transient storage) 特性。这是一种新的数据存储位置,旨在为开发者提供一种低成本、交易期间有效的临时存储方式。
瞬态存储是一种与存储(storage)、内存(memory) 和调用数据(calldata) 并列的新数据位置。其核心特点是数据仅在当前交易执行期间有效,交易结束后会被自动清除。访问和修改瞬态存储通过两个新的 EVM 指令实现:
-
TSTORE(key, value):将 256 位的值 value 存储到瞬态存储的指定键 key 对应的内存中。
-
TLOAD(key):从瞬态存储的指定键 key 对应的内存中读取 256 位的值。
该特性主要有以下特点:
-
低 gas 成本:TSTORE 和 TLOAD 的 gas 成本固定为 100,相当于热存储访问(warm storage access)。相比之下,常规存储操作(SSTORE) 在首次写入(从 0 到非 0)时可能高达 20,000 gas,更新时也至少需要 5,000 gas。
-
交易内持久性:瞬态存储的数据在整个交易期间保持有效,包括所有函数调用和子调用,适合需要跨调用共享临时状态的场景。
-
自动清除:交易结束后,瞬态存储自动重置为零,无需手动清理,减少了开发者维护成本。
根本原因
本次被黑事件的根本原因是,在函数中调用 tstore 进行瞬态存储的值在函数调用结束后并没有被清空,导致攻击者可以利用这个特性构造特定的恶意地址来绕过权限检查转出代币。
攻击步骤
1. 攻击者首先创建两个恶意代币 A 和 B,之后在 UniswapV3 上为这两个代币创建池子并注入流动性,其中 A 代币为攻击合约。
2. 接着攻击者调用 Vault 合约的 initialize 函数,以 A 代币为抵押品代币,B 代币为债务代币创建一个杠杆交易市场 APE-21。
3. 紧跟着攻击者调用 Vault 合约的 mint 函数,存入债务代币 B 铸造杠杆代币 APE。
跟进到 mint 函数中,我们发现当需要存入债务代币 B 去铸造杠杆代币时,需要传入的 collateralToDepositMin 参数的值不能等于 0,之后会通过 UniswapV3 先将 B 代币兑换成抵押品代币 A 并转入 Vault 中,其中会将攻击者先前创建的 UniswapV3 池子的地址进行第一次瞬态存储。
当 UniswapV3 池子进行兑换操作时,会回调 Vault 合约的 uniswapV3SwapCallback 函数。可以看到:该函数首先会用 tload 从先前瞬态存储的指定键 1 对应的内存中取出值,来验证调用者是否是 UniswapV3 池子,接着从铸造者地址转出债务代币 B 并铸造杠杆代币 APE,最后将铸造的数量 amount 进行第二次瞬态存储,保存在指定键 1 对应的内存中,用作 mint 函数的返回值。这里需要铸造的数量是攻击者提前计算控制好的,其值为 95759995883742311247042417521410689。
4. 攻击者之后调用 Keyless CREATE2 Factory 合约的 safeCreate2 函数来创建一个恶意的合约,其合约地址 0x00000000001271551295307acc16ba1e7e0d4281,与第二次瞬态存储的值相同。
5. 接着攻击者通过该恶意合约去直接调用 Vault 合约的 uniswapV3SwapCallback 函数转出代币。
因为 uniswapV3SwapCallback 函数是通过 tload(1) 来获取验证调用者是否是 UniswapV3 池子,然而在先前的铸造操作中,指定键 1 对应内存中的值被保存为铸造的数量 95759995883742311247042417521410689,并且该内存中的值在 mint 函数调用后并没有进行清空,所以使得此刻 uniswapPool 的地址被获取为 0x00000000001271551295307acc16ba1e7e0d4281,导致对调用者的身份检查被错误地通过。
并且攻击者提前计算好了需要转出的代币数量,将最终铸造的数量 amount 构造为指定的值:1337821702718000008706643092967756684847623606640。同样的,在这一次调用 uniswapV3SwapCallback 函数的最后,会进行第三次的瞬态存储,将该值保存到指定键 1 对应内存中。这是需要让该值与攻击合约(A 代币)的地址的值 0xea55fffae1937e47eba2d854ab7bd29a9cc29170 相同,才能让之后对调用者的检查通过。
6. 最后,攻击者就可以直接通过攻击合约(A代币)去调用 Vault 合约的 uniswapV3SwapCallback 函数,将 Vault 合约中的其他代币(WBTC、WETH) 转出获利。
MistTrack 分析
据链上反洗钱与追踪工具 MistTrack 的分析,攻击者 (0x27defcfa6498f957918f407ed8a58eba2884768c) 盗取了约 30 万美元的资产,包括 17,814.8626 USDC, 1.4085 WBTC 和 119.871 WETH。
其中 WBTC 被兑换为 63.5596 WETH,USDC 被兑换为 9.7122 WETH:
接着,共 193.1428 WETH 被转入 Railgun:
此外,攻击者的初始资金来源于 Railgun 转入的 0.3 ETH:
总结
本次攻击的核心在于攻击者利用项目中瞬态存储不会在函数调用后将保存的值立即清空,而是会在整个交易期间中一直保存的特性,从而绕过了回调函数的权限验证来获利。慢雾安全团队建议项目方应该根据相应的业务逻辑在函数调用结束后立即使用 tstore(key, 0) 将瞬态存储中的值进行清除。此外,应当对项目的合约代码加强审计与安全测试,从而避免类似情况的发生。
比推快讯
更多 >>- CME警告:若美国政府介入石油期货市场将引发史诗级灾难
- 特朗普:鲍威尔应立即降息而非等到下次会议
- 持有 Binance Japan 40%股份的 PayPay IPO 首日大涨 15.6%
- 伊朗称特朗普几条推文结束不了战争
- Backpack 代币上线首日后 FDV 超 3 亿美元概率为 64%
- Santiment:BNB Chain 上 USDT 活跃地址飙升通常伴随比特币反弹
- 美国参议院通过法案条款拟禁止发行 CBDC,禁令或持续至 2030 年
- Backpack 宣布将于 3 月 23 日 TGE
- Claude 上线交互式图表和图形功能,聊天中即可构建
- Ethena 调整 sUSDe 解除质押机制:冷却期改为动态模式,最短缩至 1 天
- 分析:比特币守住 7 万美元,油价飙升与信用风险冲击美国股市
- 国际油价回吐涨幅,此前伊朗副外长称允许了部分船舶通过霍尔木兹海峡
- 数据:今日加密货币市值前 100 代币涨跌
- 某鲸鱼过去 2 小时向 Hyperliquid 存入 560 万枚 USDC 做空石油
- 身份验证基础设施 VeryAI 完成 1000 万美元融资,Polychain Capital 领投
- 伊朗新任最高领袖表态强硬,油价延续涨势、美股三大股指普跌
- 投资者担心中东冲突导致通胀再度抬头,市场不再完全押注美联储今年将降息
- DNA Fund 关联钱包 2 小时前从 Kraken 提取 11,067 枚 ETH
- 油价延续涨势,WTI 原油 4 月期货日内涨超 10%
- BTC OG 内幕巨鲸代理人:油价突破,风险资产或迎剧烈重新定价
- 分析师:Circle 股价强势凸显 USDC 稳定币韧性与基础设施优势
- 交易员调整对 2026 年美联储降息预期
- Lido 整合 Earn 产品并推出首个稳定币金库 EarnUSD
- 美联储理事鲍曼:拟小幅下调大型银行资本要求
- 分析:比特币对黄金走势显现多头背离,机构流入增加暗示“风险中蕴藏机会”
- SEC 主席 Atkins 发表讲话,推动监管瘦身、支持股权代币化创新豁免
- Tether CEO:比特币链上用户 5.71 亿,USDT 约 5.5 亿
- 市场消息:特朗普政府拟暂停《琼斯法案》以平抑油价
- 美 SEC 主席:将考虑创新豁免以促进代币化证券交易
- 美 CFTC 发布预测市场咨询报告
- 美、布两油短线持续上扬,WTI 原油向上触及 96 美元/桶
- “龙虾安装热”带动相关硬件设备市场出现涨价和缺货
- 数据:PIVX 24 小时跌超 10%,CFX 涨超 7%
- 美国商品期货交易委员会发布有关预测市场的指导意见和初步规则
- 最具代表的加密托管赛道公司,Copper、BitGo 等领先
- Vitalik:以太坊本质为全球共享内存,仍需持续改进协议和基础设施
- 某巨鲸从 Binance 提出 348.3 枚 BTC,过去 9 日累计囤积 1,720.2 枚 BTC
- 伊朗伊斯兰革命卫队海军司令:将坚持关闭霍尔木兹海峡的战略
- Ark Invest:约三分之一比特币供应仍面临量子计算潜在威胁
- 伊方声明霍尔木兹海峡将维持关闭,ASTER 最大多头以 500 万规模入场做多原油
- 花旗上调油价预期:布伦特原油短期或上看 80–100 美元
- Vitalik:以太坊核心价值是全球共享“公告板”,智能合约与支付只是附加功能
- 做空 3474 万美元原油巨鲸目前浮亏 184 万美元
- 何一:散布 FUD 很容易,但清除它却总是很难
- 分析师:伊朗新任最高领袖表态强硬,没有任何让步迹象
- 收益型稳定币协议 Unitas 完成 1333 万美元种子轮融资,Amber Group 等参投
- 伊朗新最高领袖首次讲话总结:必要时开辟新战线,仍希望与邻国保持友好关系
- 伊朗新任最高领袖:若战争持续,或将开辟其他战线
- 美股三大股指大幅低开,道指跌 0.99%
- 道琼斯指数开盘下跌 528.41 点,标普 500 和纳斯达克均下跌
比推专栏
更多 >>- 当黄金被「困」在迪拜,是时候旗帜鲜明「唱多」香港了
- 東大、波斯、阿拉伯【第七次/進展/能源變量】|0310東3.5
- 从 HSK 到 USDGO:香港两大持牌机构,开始「脱钩」
- There is no new boss YET
- New situation and new games|0305 Asian
- B52 Were on the way to Iran|0304 Middle East
- 开放独角兽门票:从 Robinhood 到 MSX,一场 Pre-IPO 的链上平权实验
- Big player's 『Trigger moment』|0227Europe
- 简街有没有「操纵」BTC?拆解 AP 制度,读懂 ETF 申赎机制背后的定价权博弈
- Happy new year【Horse success】|0213Asian
观点
比推热门文章
- 特朗普:鲍威尔应立即降息而非等到下次会议
- Crypto的陨落,其实和割韭菜没什么关系
- 持有 Binance Japan 40%股份的 PayPay IPO 首日大涨 15.6%
- 伊朗称特朗普几条推文结束不了战争
- Backpack 代币上线首日后 FDV 超 3 亿美元概率为 64%
- Santiment:BNB Chain 上 USDT 活跃地址飙升通常伴随比特币反弹
- 美国参议院通过法案条款拟禁止发行 CBDC,禁令或持续至 2030 年
- Backpack 宣布将于 3 月 23 日 TGE
- Claude 上线交互式图表和图形功能,聊天中即可构建
- Ethena 调整 sUSDe 解除质押机制:冷却期改为动态模式,最短缩至 1 天
比推 APP



