Files
nexus/wiki/entities/Nomad-Bridge.md

48 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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]] — 审计清单中包含代理初始化检查项