dgoni97/codehawks-findings
GitHub: dgoni97/codehawks-findings
一个智能合约安全审计漏洞报告精选集,收录六份 High 级别漏洞的完整分析及可运行的概念验证漏洞利用。
Stars: 0 | Forks: 0
# CodeHawks 报告 — 精选报告
我提交给 **CodeHawks First Flights** 的智能合约安全漏洞报告,发布为
包含可运行的概念验证漏洞利用的完整报告。
**个人资料:** [profiles.cyfrin.io/u/augustwh11](https://profiles.cyfrin.io/u/augustwh11)
| | |
|---|---|
| 有效漏洞 | **17** — 8 个 High,7 个 Medium,2 个 Low |
| 排名 | #281 |
| 比赛 | 3 (Thunder Loan, Snowman Merkle Airdrop, Rust Fund) |
### 简述 First Flights 是什么
First Flights 是 CodeHawks 的**教育性**比赛:小型的代码库中故意
植入了漏洞,旨在让人们学习审计工作流。在其中发现 bug 并不等同于在真实的协议中发现漏洞,我也不会将其粉饰为后者。
这个代码仓库真正的用途是审计工作中的**另一半**:提出怀疑,
用代码证明它,衡量它给协议造成的损失,并将其记录下来,让开发者能够采取行动。无论代码库是训练项目还是主网部署,这一部分都是相同的
—— 而且这也是你从外部可以进行评判的部分。
## 精选漏洞报告
十二个 High 级别提交中的六个,之所以入选是为了涵盖**不同的漏洞
类型**,而不是为了凑数。Thunder Loan 的两个经典 bug(通过 `deposit` 结算贷款,
以及 `deposit` 抬高汇率)被刻意排除了 —— 它们是广为人知的漏洞,无法体现我的工作方式。
| 漏洞 | 类型 | 比赛 |
|---|---|---|
| [嵌套闪电贷为每一层记录费用,但实际只支付了一层](thunderloan/H-04-nested-flashloan-reentrancy-rate-inflation.md) | 重入 → 账目虚增 | Thunder Loan |
| [升级时的存储冲突导致收取 100% 闪电贷费用](thunderloan/H-03-storage-collision-on-upgrade.md) | 可升级性 / 代理存储布局 | Thunder Loan |
| [费用是以 WETH 计价的值,但却以 token 单位收取](thunderloan/H-06-fee-denominated-in-weth-value.md) | 单位与计价混淆 | Thunder Loan |
| [单个全局收益计时器,可免费重置,剥夺所有人的挖矿收益](snowman-merkle-airdrop/H-03-global-earn-timer-free-dos.md) | 恶意破坏 / DoS,零价值边界情况 | Snowman |
| [申领标志被写入但从未读取,导致证明可重放](snowman-merkle-airdrop/H-02-claim-flag-never-read-replay.md) | 重放 / 未强制执行的状态标志 | Snowman |
| [贡献金额从未被记录,导致每次退款都返回零](rustfund/H-01-contribution-amount-never-recorded.md) | 状态未持久化 (Rust / Anchor, Solana) | Rust Fund |
## 每份报告的构建方式
每份漏洞报告都遵循相同的结构,因为这样才能让报告变得实用:
- **描述** — 根本原因,标注确切的代码行,并逐步详细说明
其机制,而非仅仅是断言。
- **风险** — 分别论证可能性和影响,用数字说明攻击者的需求
以及协议的损失。
- **概念验证** — 一个完整的 Foundry(或 Anchor)测试文件,能够
针对项目自身的测试环境编译和运行,并附带其**实际输出**。
- **建议的缓解措施** — 具体的 diff,以及在单一修复不足之处,
需配套进行的独立二次更改。
我坚持两个习惯:PoC 衡量损失,而不仅仅是触发 bug(例如,
嵌套闪电贷报告将一个资金池抽干至 42 wei,并报告了其消耗的 gas);此外,如果某个数值可能被误解为比实际更大,报告中会明确指出,
而不是任由其产生歧义。
## 方法
我主导研究工作 —— 提出假设、规划攻击路径,并判断其真实性 —— 同时使用
AI 扩大搜索范围并检验我的推理。这里的每一项漏洞发现都经过编写可运行的
漏洞利用程序验证,凡是无法重现并逐行解释的内容,都不会出现在报告中。
相关内容:[postmortem-key-compromise-collateral-trust](https://github.com/dgoni97/postmortem-key-compromise-collateral-trust) ·
[technique-eth-call-state-override](https://github.com/dgoni97/technique-eth-call-state-override)
标签:Foundry, Solidity, Web3安全, 区块链安全, 可视化界面, 智能合约审计, 漏洞分析, 路径探测