2.4 KiB
2.4 KiB
title, type, tags, sources, last_updated
| title | type | tags | sources | last_updated | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Nomad Bridge | entity |
|
|
2026-04-25 |
基本信息
- 时间:2022 年 8 月 1-2 日(链上攻击持续约 2 小时)
- 平台:Ethereum ↔ 多链跨链桥
- 损失:1.9 亿美元
- 根本原因:未初始化代理合约(Uninitialized Proxy)
- 特点:这是 DeFi 历史上极少数不需要区块链/密码学知识即可完成攻击的漏洞——攻击者只需要调用合约中已有的函数
攻击原理
Nomad Bridge 使用代理模式部署合约,但新部署的代理合约在初始化前,initialize() 函数允许任何人设置消息跨链的"根"(root)。攻击者只需要调用:
// 攻击调用(简化)
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 — 审计清单中包含代理初始化检查项