ingest: Blockchain Security Auditor + 4 entities + 2 concepts
- Source: blockchain-security-auditor.md (The Agency Specialized, smart contract security audit agent) - Entities: The-DAO-2016, Euler-Finance, Nomad-Bridge, Curve-Finance - Concepts: Reentrancy, Oracle-Manipulation - Updated: index.md (消除了source missing标记), overview.md, log.md
This commit is contained in:
41
wiki/entities/Curve-Finance.md
Normal file
41
wiki/entities/Curve-Finance.md
Normal file
@@ -0,0 +1,41 @@
|
||||
---
|
||||
title: "Curve Finance"
|
||||
type: entity
|
||||
tags: [blockchain, defi, amm, exploit, compiler-bug]
|
||||
sources: [blockchain-security-auditor]
|
||||
last_updated: 2026-04-25
|
||||
---
|
||||
|
||||
## 基本信息
|
||||
- **时间**:2023 年 7 月 30 日
|
||||
- **平台**:Ethereum(多链,影响 ETH、ARB、CRV、MSRP 等池)
|
||||
- **损失**:超过 7,000 万美元
|
||||
- **根本原因**:Vyper 0.3.0 编译器的重入锁(Reentrancy Guard)实现 bug
|
||||
- **特点**:这是 DeFi 历史上罕见的**编译器 bug 导致的安全事件**,而非业务逻辑漏洞
|
||||
|
||||
## 攻击原理
|
||||
|
||||
Curve Finance 使用 Vyper 语言编写合约,Vyper 0.3.0 的 `nonreentrant` 修饰符存在 bug:当合约存在多个相同名称的回调函数(如 `receive()` 和 `fallback()`)时,重入锁未能正确生效。
|
||||
|
||||
攻击者利用此漏洞对多个 Curve 池发起攻击:
|
||||
1. 在 AMM 池中进行兑换(swap)
|
||||
2. 触发 `receive()` 回调
|
||||
3. 在回调中调用池的敏感函数(添加流动性/移除流动性)
|
||||
4. 由于重入锁失效,攻击者可以在单笔交易内重复执行操作
|
||||
5. 操纵池子的虚拟价格后执行大额提款,获取超额资产
|
||||
|
||||
CRV 池的流动性枯竭(攻击者大量提取 CRV)导致 Curve 创始人 Michael Egorov 的健康仓位差点被清算,引发 CRV 价格闪崩。
|
||||
|
||||
## 关键教训
|
||||
- **编译器不等于安全**:开发者通常信任编译器后端,但 Vyper 0.3.0 的 bug 打破了这一假设
|
||||
- **语言级安全机制不可信**:即使合约使用了 `nonreentrant` 修饰符,编译器实现 bug 可使其完全失效
|
||||
- **多池风险传染**:Curve 的池共享相同的合约模板,一个漏洞影响多条链上的多个池
|
||||
- **DeFi 可组合性放大风险**:CRV 池的风险传导至借贷协议(Aave),引发连环清算风险
|
||||
|
||||
## 关联漏洞类型
|
||||
- [[Reentrancy]] — 核心漏洞类型,虽然是编译器 bug 导致,但最终表现为重入攻击
|
||||
- AMM Invariant Violation(AMM 不变量破坏):攻击者在交易中操纵价格
|
||||
|
||||
## 关联页面
|
||||
- [[blockchain-security-auditor]] — 区块链安全审计 Agent,将 Curve Finance 作为关键记忆模式收录于 Pattern Library
|
||||
- [[The-DAO-2016]] — 同为重入攻击案例,但前者是智能合约逻辑漏洞,后者是编译器 bug
|
||||
42
wiki/entities/Euler-Finance.md
Normal file
42
wiki/entities/Euler-Finance.md
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: "Euler Finance"
|
||||
type: entity
|
||||
tags: [blockchain, defi, exploit, lending, eoa-donation]
|
||||
sources: [blockchain-security-auditor]
|
||||
last_updated: 2026-04-25
|
||||
---
|
||||
|
||||
## 基本信息
|
||||
- **时间**:2023 年 3 月 13 日
|
||||
- **平台**:Ethereum
|
||||
- **损失**:1.97 亿美元(Euler Finance 无辜用户存款几乎全损)
|
||||
- **根本原因**:donate-to-reserves 操纵攻击(Euler 白帽事后命名)
|
||||
- **攻击者**:关联 Lazarus Group(朝鲜黑客组织)
|
||||
- **白帽救援**:攻击者后归还全部资金(通过协商)
|
||||
|
||||
## 攻击原理
|
||||
|
||||
Euler Finance 的 `donateToReserves()` 函数允许任意用户将自己的 ETH 转入储备池。当攻击者先存款、后捐赠、后借款时,其健康因子(health factor)在 `eToken.balanceOf()` 更新前被错误计算,导致超额借款:
|
||||
|
||||
1. 攻击者存入 30 ETH(获得 30 eETH)
|
||||
2. 攻击者调用 `donateToReserves(30 ETH)`,将 30 eETH 转入储备
|
||||
3. 此时攻击者的真实余额(3000 ETH)远高于名义余额(0),但清算逻辑基于名义余额
|
||||
4. 攻击者以极低抵押率(10 倍杠杆)借入 10 倍存款规模的资产
|
||||
5. 抵押品价值下跌时,清算机器人按错误健康因子执行清算,攻击者获超额清算收益
|
||||
|
||||
关键漏洞:`donateToReserves()` 的实现没有考虑对内部 accounting 的影响,健康因子计算依赖于可被操纵的 `eToken.balanceOf()` 而非内部余额追踪。
|
||||
|
||||
## 关键教训
|
||||
- **不要相信任何"管理员"函数是安全的**:看似无害的 `donateToReserves()` 影响了整个清算引擎
|
||||
- **协议不变量必须考虑所有代码路径**:包括看似无害的辅助函数
|
||||
- **白帽救援**:最终攻击者归还资金(否则 1.97 亿无法追回),成为 DeFi 历史上最大白帽救援案例
|
||||
|
||||
## 关联漏洞类型
|
||||
- [[Flash-Loan-Attack]] — 攻击使用闪电贷提供初始资金
|
||||
- [[Oracle-Manipulation]] — 健康因子计算依赖可操纵的内部状态
|
||||
- 经济攻击(Economic Exploit):利用 DeFi 协议的会计逻辑错误
|
||||
|
||||
## 关联页面
|
||||
- [[blockchain-security-auditor]] — 区块链安全审计 Agent,将 Euler Finance 作为关键记忆模式收录于 Exploit Pattern Library
|
||||
- [[The-DAO-2016]] — 同为 DeFi 安全史上的里程碑事件,但攻击类型不同
|
||||
- [[Curve-Finance]] — 2023 年另一大 DeFi 安全事件
|
||||
47
wiki/entities/Nomad-Bridge.md
Normal file
47
wiki/entities/Nomad-Bridge.md
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: "Nomad Bridge"
|
||||
type: entity
|
||||
tags: [blockchain, defi, bridge, exploit, uninitialized-proxy]
|
||||
sources: [blockchain-security-auditor]
|
||||
last_updated: 2026-04-25
|
||||
---
|
||||
|
||||
## 基本信息
|
||||
- **时间**:2022 年 8 月 1-2 日(链上攻击持续约 2 小时)
|
||||
- **平台**:Ethereum ↔ 多链跨链桥
|
||||
- **损失**:1.9 亿美元
|
||||
- **根本原因**:未初始化代理合约(Uninitialized Proxy)
|
||||
- **特点**:这是 DeFi 历史上极少数**不需要区块链/密码学知识即可完成攻击**的漏洞——攻击者只需要调用合约中已有的函数
|
||||
|
||||
## 攻击原理
|
||||
|
||||
Nomad Bridge 使用代理模式部署合约,但新部署的代理合约在初始化前,`initialize()` 函数允许任何人设置消息跨链的"根"(root)。攻击者只需要调用:
|
||||
|
||||
```solidity
|
||||
// 攻击调用(简化)
|
||||
function initialize(
|
||||
address _owner,
|
||||
address _messenger,
|
||||
bytes32 _localDomain
|
||||
) public {
|
||||
require(_owner == address(0)); // 检查所有者为 0x0...(未初始化标记)
|
||||
// 任何人可以调用,设置任意的 root
|
||||
}
|
||||
```
|
||||
|
||||
2022 年 6 月,Nomad 团队将合约升级时使用了 `0x0000000000000000000000000000000000000001` 作为临时所有者(而非 `address(0)`),导致所有已部署代理的 `initialize()` 权限未关闭。由于该函数没有额外的访问控制,**攻击者只需调用 `process()` 函数即可伪造跨链消息,将 ERC-20 代币跨链转移**。
|
||||
|
||||
## 关键教训
|
||||
- **代理模式必须关闭初始化权限**:升级后需确保 `initialize()` 无法再次调用(`_disableInitializers()`)
|
||||
- **供应链攻击风险**:DevOps/部署脚本的错误与代码漏洞等效
|
||||
- **跨链桥是高风险目标**:消息验证逻辑复杂,攻击面远超单链合约
|
||||
- **任何人都可以攻击**:与需要 Flash Loan 或 MEV 知识的攻击不同,未初始化代理漏洞"傻瓜式"可利用
|
||||
|
||||
## 关联漏洞类型
|
||||
- [[Access-Control]](访问控制)— 缺少对 `initialize()` 的访问控制
|
||||
- 未初始化代理(Uninitialized Proxy):Proxy 合约部署后未正确初始化或关闭初始化权限
|
||||
- Supply Chain Attack:部署流程的安全缺陷等同于代码漏洞
|
||||
|
||||
## 关联页面
|
||||
- [[blockchain-security-auditor]] — 区块链安全审计 Agent,将 Nomad Bridge 作为关键记忆模式收录
|
||||
- [[blockchain-security-auditor#Access Control Audit Checklist]] — 审计清单中包含代理初始化检查项
|
||||
47
wiki/entities/The-DAO-2016.md
Normal file
47
wiki/entities/The-DAO-2016.md
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: "The DAO (2016)"
|
||||
type: entity
|
||||
tags: [blockchain, defi, exploit, reentrancy, ethereum]
|
||||
sources: [blockchain-security-auditor]
|
||||
last_updated: 2026-04-25
|
||||
---
|
||||
|
||||
## Aliases
|
||||
- The DAO
|
||||
- Decentralized Autonomous Organization (the original)
|
||||
|
||||
## 基本信息
|
||||
- **时间**:2016 年 6 月 17 日
|
||||
- **平台**:Ethereum
|
||||
- **损失**:约 360 万 ETH(当时价值约 5,000 万美元)
|
||||
- **根本原因**:重入攻击(Reentrancy)
|
||||
- **历史地位**:以太坊历史上首次重大安全事件,直接导致以太坊硬分叉(ETH/ETC 分裂)
|
||||
|
||||
## 攻击原理
|
||||
|
||||
攻击者利用DAO合约的 `withdraw()` 函数,在向攻击者合约转账时触发 `receive()` 回调。由于状态更新(`balances[msg.sender] = 0`)在外部调用之后执行,攻击者合约可以在余额清零前回拨 `withdraw()` 重复提取资金:
|
||||
|
||||
```solidity
|
||||
// 漏洞代码(简化)
|
||||
function withdraw() external {
|
||||
uint256 amount = balances[msg.sender];
|
||||
// BUG: 外部调用在状态更新之前
|
||||
(bool success,) = msg.sender.call{value: amount}("");
|
||||
require(success);
|
||||
balances[msg.sender] = 0; // 攻击者在此行执行前已再次调用 withdraw()
|
||||
}
|
||||
```
|
||||
|
||||
## 关键影响
|
||||
- **技术层面**:开创了智能合约安全研究领域,Reentrancy 成为最经典的漏洞类型之一
|
||||
- **以太坊层面**:引发 ETH/ETC 硬分叉,Coinbase 等交易所拒绝支持 ETC 引发争议
|
||||
- **行业层面**:推动了安全审计行业(Trail of Bits、OpenZeppelin)的兴起,Solidity 编译器加强了对重入的检查
|
||||
|
||||
## 关联漏洞类型
|
||||
- [[Reentrancy]]:核心漏洞类型,The DAO 是该漏洞类型的"教科书案例"
|
||||
- Checks-Effects-Interactions Pattern:修复方案——先更新状态,再执行外部调用
|
||||
|
||||
## 关联页面
|
||||
- [[Reentrancy]] — 通用漏洞概念,The DAO 是其首个重大案例
|
||||
- [[blockchain-security-auditor]] — 区块链安全审计 Agent,将 The DAO 作为关键记忆模式
|
||||
- [[Curve Finance]] — 2023 年 Vyper 编译器 bug 导致类似重入攻击
|
||||
Reference in New Issue
Block a user