Musyg/erc4626-inflation-audit

GitHub: Musyg/erc4626-inflation-audit

该项目演示了 ERC-4626 首次存款膨胀攻击的完整安全审查流程,包含可复现的 Foundry PoC 和经过验证的修复方案。

Stars: 0 | Forks: 0

# ERC-4626 通货膨胀,演示安全审查 ![tests](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/0062b9b8b6095123.svg) 这是一个智能合约安全审查的自包含演示:一个故意设计存在漏洞的 ERC-4626 风格的 vault,它允许的首次存款份额膨胀攻击(通过通过的 [Foundry](https://book.getfoundry.sh) 概念验证予以证明),以及一个相同的场景已被中和的 `fixed` 分支。 ## 为什么会有这个 repo 任何人都可以在个人简介中写下“我审计智能合约”。这个 repo 展示了实际的工作:一个目标,一个具体的发现,一个可执行的证明,以及一个经过验证的修复。如果不能重现,就不算完成。 ## 仓库布局 本次审查存在于两个分支中: | 分支 | 内容 | `forge test` 显示通过意味着什么 | |--------|----------|---------------------------------| | `master` | 存在漏洞的 vault 和利用该漏洞的 PoC | 攻击成功,受害者被抢劫 | | `fixed` | 修复后的 vault 和相同的场景 | 攻击无利可图,受害者得到全额补偿 | - `src/MiniVault.sol`,正在接受审查的 vault - `test/MiniVault.poc.t.sol`,概念验证 - `ERC4626_Inflation_Review.pdf`,完整的书面报告 ## 发现 | ID | 严重性 | 摘要 | |----|----------|---------| | H-01 | 高 | 首次存款份额膨胀。`totalAssets()` 读取实时 token 余额,因此首个存款者为 1 wei 铸造一个份额,直接捐赠资产以抬高份额价格,而下一个存款者向下舍入为尘埃。攻击者进行赎回并获取受害者的存款。 | `master` 分支上的 PoC 数据:攻击者注入 1 wei,捐赠 10,000 ether,受害者存入 20,000 ether 并收到一个份额,攻击者进行赎回并拿走受害者约 5,000 ether 的资金。在 `fixed` 分支上,同样的攻击会让攻击者损失约 5,000 ether,而受害者能恢复约 100% 的存款。 ## 重现步骤 需要 [Foundry](https://book.getfoundry.sh/getting-started/installation)。 ``` git clone https://github.com/Musyg/erc4626-inflation-audit.git cd erc4626-inflation-audit forge install # master:exploit 成功 forge test -vv # fixed:相同的攻击被 neutralised git checkout fixed forge test -vv ``` ## 修复方案 修复后的 vault 在每次转换中增加了虚拟份额和虚拟资产(小数位偏移)。虚拟金额吸收了直接捐赠,因此首个存款者无法再大幅度改变汇率,从而防止将后来的存款者的份额向下舍入为尘埃。 这是针对 ERC-4626 通货膨胀攻击的标准缓解措施。 ## 严重性评级标准 高:无特权攻击者直接、无条件地盗窃存款者的资金。唯一的前提条件是排序,即抢跑(front-running)首次真实存款。不需要特殊角色,没有外部依赖,没有链状态假设。
标签:Foundry, Solidity, 区块链安全, 智能合约, 漏洞分析, 路径探测