ChainSecurity/TSTORE-Low-Gas-Reentrancy
GitHub: ChainSecurity/TSTORE-Low-Gas-Reentrancy
演示 EIP-1153 瞬态存储引入的新型低 gas 重入攻击向量的教育性实验项目。
Stars: 15 | Forks: 0
# TSTORE 重入实验
当前 TSTORE 的规范(参见 [EIP-1153](https://eips.ethereum.org/EIPS/eip-1153))引入了一种利用 transient storage 的新的重入攻击向量。本仓库实现了一些示例来说明潜在的漏洞。因此,这些合约仅用于教育目的,不应被使用。
欲了解完整详情,请查看博客文章:https://chainsecurity.com/tstore-low-gas-reentrancy/
感谢我们的工程师 @ritzdorf 和 @kenijiva 准备了这些示例。
## 安装与运行
1. 我们使用 vyper 和 ape。请遵循 [ape 安装指南](https://docs.apeworx.io/ape/stable/userguides/quickstart.html#installation) 获取安装 ape 的建议。
2. 如有必要,使用 `pip install python-dotenv` 安装 dotenv
3. 你需要为 ape 准备好一个账户。在 `.env_template` 中,我们将账户别名定义为 `testing`。你可以根据需要进行更改。根据你的别名创建一个 `.env` 文件(或直接重命名)。不过,我们建议使用专门用于测试目的的账户。有关更多信息,请遵循 [ape 实时网络账户教程](https://docs.apeworx.io/ape/stable/userguides/accounts.html#live-network-accounts)。
4. 我们将在实时测试网络上运行脚本。从[这里](https://github.com/ethpandaops/dencun-testnet)获取最新的测试网网络。在撰写本文时,它是[这个](https://dencun-devnet-11.ethpandaops.io/),我们将在下面使用它。
5. 向你将使用的测试账户地址领取水龙头。
6. 运行脚本。将 `` 替换为你要运行的脚本。
ape run scripts/ --network https://rpc.dencun-devnet-11.ethpandaops.io
请注意,你将签署数据。请确保你理解脚本在做什么 —— 特别是因为 ape 的 "autosign" 标志将被设置为 true。因此,输入密码后你将收到以下警告:
```
WARNING: Danger! This account will now sign any transaction it's given.
```
## 示例
### 简单示例
这是一个简单的示例,展示了仅使用 2300 gas 的基本重入。
### EthLocker
这是一个管理 ETH 的锁定合约,它允许更节省 gas 的临时余额,结算发生在交易结束时。然而,重入是可能的。
### NewWETH
这是一个稍作修改的 Wrapped ETH 合约,其中实现了 EIP 中建议的 `temporaryApprove` 函数。然而,利用临时授权的 `withdrawAllTempFrom` 函数存在漏洞。
## 结果
### 简单示例
```
Logged value: 1234
```
### NewWeth
```
WETH.balance: 0
Callee.balance: 100000000000000000
WETH.balanceOf(Caller): 100000000000000000
[{'address': '0x0BF2074D83C16F0EcAB3671BA20a62C46217b69f', 'topics': [HexBytes('0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c'), HexBytes('0x000000000000000000000000f69c2ccac48189a25c4dfbca0053e3e190c0006a')], 'data': HexBytes('0x000000000000000000000000000000000000000000000000016345785d8a0000'), 'blockNumber': 56114, 'transactionHash': HexBytes('0x66e130f93bd2b3aba4ca607421156e008afaf8ba0fda38f0569049bc34c5b39c'), 'transactionIndex': 0, 'blockHash': HexBytes('0x554b6aeddfd8c31d3d163a12cad5b01353b481d70689eb33ca29218187855b10'), 'logIndex': 0, 'removed': False}, {'address': '0x0BF2074D83C16F0EcAB3671BA20a62C46217b69f', 'topics': [HexBytes('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'), HexBytes('0x000000000000000000000000f69c2ccac48189a25c4dfbca0053e3e190c0006a'), HexBytes('0x000000000000000000000000ddafb6eb07b57189d9c21b7fbc6db1dcff1c2fc7')], 'data': HexBytes('0x0000000000000000000000000000000000000000000000000000000000000000'), 'blockNumber': 56114, 'transactionHash': HexBytes('0x66e130f93bd2b3aba4ca607421156e008afaf8ba0fda38f0569049bc34c5b39c'), 'transactionIndex': 0, 'blockHash': HexBytes('0x554b6aeddfd8c31d3d163a12cad5b01353b481d70689eb33ca29218187855b10'), 'logIndex': 1, 'removed': False}, {'address': '0x0BF2074D83C16F0EcAB3671BA20a62C46217b69f', 'topics': [HexBytes('0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65'), HexBytes('0x000000000000000000000000ddafb6eb07b57189d9c21b7fbc6db1dcff1c2fc7')], 'data': HexBytes('0x0000000000000000000000000000000000000000000000000000000000000000'), 'blockNumber': 56114, 'transactionHash': HexBytes('0x66e130f93bd2b3aba4ca607421156e008afaf8ba0fda38f0569049bc34c5b39c'), 'transactionIndex': 0, 'blockHash': HexBytes('0x554b6aeddfd8c31d3d163a12cad5b01353b481d70689eb33ca29218187855b10'), 'logIndex': 2, 'removed': False}]
```
### ETHLocker
```
Attacker.balance: 100
ETHLocker.balanceOf(AttackerInit) 100
ETHLocker.balance 0
```
标签:Ape框架, Cancun升级, CISA项目, Dencun, EIP-1153, Transient Storage, TSTORE, Vyper, Web3安全, Web报告查看器, 以太坊, 低Gas攻击, 区块链安全, 安全漏洞, 智能合约, 智能合约审计, 概念验证, 测试网, 逆向工具, 重入攻击