Update nexus: fix conflicts and sync local changes

This commit is contained in:
Shen Wei
2026-04-26 12:06:50 +08:00
parent 191797c01b
commit f09834b5a5
2443 changed files with 254323 additions and 255154 deletions

View File

@@ -1,47 +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 ProxyProxy 合约部署后未正确初始化或关闭初始化权限
- Supply Chain Attack部署流程的安全缺陷等同于代码漏洞
## 关联页面
- [[blockchain-security-auditor]] — 区块链安全审计 Agent将 Nomad Bridge 作为关键记忆模式收录
- [[blockchain-security-auditor#Access Control Audit Checklist]] — 审计清单中包含代理初始化检查项
---
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 ProxyProxy 合约部署后未正确初始化或关闭初始化权限
- Supply Chain Attack部署流程的安全缺陷等同于代码漏洞
## 关联页面
- [[blockchain-security-auditor]] — 区块链安全审计 Agent将 Nomad Bridge 作为关键记忆模式收录
- [[blockchain-security-auditor#Access Control Audit Checklist]] — 审计清单中包含代理初始化检查项