# 瞬态存储漏洞导致价值30万美元资产被盗2025年3月30日,以太坊链上的杠杆交易项目遭受攻击,损失超过30万美元的资产。安全团队对此事件进行了深入分析,现将结果分享如下:## 背景Solidity 0.8.24版本引入了基于EIP-1153的瞬态存储特性。这是一种新的数据存储位置,旨在为开发者提供低成本、交易期间有效的临时存储方式。瞬态存储通过TSTORE和TLOAD两个新的EVM指令实现,具有低gas成本、交易内持久性和自动清除等特点。## 攻击原因本次事件的根本原因是,函数中使用tstore进行瞬态存储的值在函数调用结束后没有被清空。攻击者利用这个特性构造特定的恶意地址,绕过权限检查转出代币。## 攻击步骤1. 攻击者创建两个恶意代币A和B,并在某DEX上为这两个代币创建池子并注入流动性。2. 攻击者调用Vault合约的initialize函数,以A代币为抵押品代币,B代币为债务代币创建杠杆交易市场。3. 攻击者调用Vault合约的mint函数,存入债务代币B铸造杠杆代币。在这个过程中,DEX池子地址和铸造数量被瞬态存储。4. 攻击者创建一个恶意合约,其地址与第二次瞬态存储的值相同。5. 攻击者通过恶意合约调用Vault合约的回调函数转出代币。由于瞬态存储的值未被清空,导致身份检查被错误通过。6. 最后,攻击者通过攻击合约(A代币)调用Vault合约的回调函数,将其他代币(如WBTC、WETH)转出获利。## 资金流向分析攻击者盗取了约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两个新的EVM指令实现,具有低gas成本、交易内持久性和自动清除等特点。
攻击原因
本次事件的根本原因是,函数中使用tstore进行瞬态存储的值在函数调用结束后没有被清空。攻击者利用这个特性构造特定的恶意地址,绕过权限检查转出代币。
攻击步骤
攻击者创建两个恶意代币A和B,并在某DEX上为这两个代币创建池子并注入流动性。
攻击者调用Vault合约的initialize函数,以A代币为抵押品代币,B代币为债务代币创建杠杆交易市场。
攻击者调用Vault合约的mint函数,存入债务代币B铸造杠杆代币。在这个过程中,DEX池子地址和铸造数量被瞬态存储。
攻击者创建一个恶意合约,其地址与第二次瞬态存储的值相同。
攻击者通过恶意合约调用Vault合约的回调函数转出代币。由于瞬态存储的值未被清空,导致身份检查被错误通过。
最后,攻击者通过攻击合约(A代币)调用Vault合约的回调函数,将其他代币(如WBTC、WETH)转出获利。
资金流向分析
攻击者盗取了约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)清除瞬态存储中的值。同时,应加强合约代码审计与安全测试,以防类似情况发生。