Public-incident studySolana · Ethereum复盘 v1.0Incident rating · Critical risk

Wormhole 跨链桥签名校验绕过事件复盘

基于公开披露资料的事后复盘,非 umibit 受托审计。2022-02-02,攻击者利用 Wormhole Solana 端 签名校验的一处账户校验缺失——使用了已弃用的 load_instruction_at、且未校验传入的 Sysvar 账户地址, 伪造出一个「已验签」的 SignatureSet,从而生成合法 VAA、无抵押铸出 120,000 wETH。Jump Crypto 在约 24 小时内补足全部 ETH,保住了 wETH 的偿付能力。

This is a public-incident case study, not a umibit engagement.

This page is a retrospective analysis of a real incident built from public disclosures, for security research and methodology — it does not imply any business relationship between umibit and Wormhole(Solana ↔ Ethereum 跨链桥). Every claim can be independently checked against the sources below.

Report number
WORMHOLE-2022
Affected project
Wormhole(Solana ↔ Ethereum 跨链桥)
Chain
Solana · Ethereum
Language
Rust(Solana program)
Loss
≈ $326M(120,000 wETH 无抵押铸出)
Report version
复盘 v1.0
Incident date
2022-02-02
Incident rating
Critical risk

Related contracts / on-chain objects

Contracts / on-chain objects involved, with their verifiable identity (address / commit), compiled from public disclosures.

NameTypecommitAddress
verify_signatures(Solana program)签名校验指令——
post_vaa / complete_wrappedVAA 处理 / 铸造——
攻击者地址(Ethereum)链上地址—0x629e7Da20197a5429d30da36E77d06CdF796b71A

Root causes & findings

Critical 3
IDTitleSeverityStatusCategory
WH-01使用已弃用的 load_instruction_at,未校验 Sysvar 指令账户地址CriticalResolvedSignature / credential check
WH-02攻击者传入伪造的 Sysvar 账户,绕过 Secp256k1 预编译验签CriticalResolvedSignature / credential check
WH-03伪造 SignatureSet 经 post_vaa 生成合法 VAA,complete_wrapped 无抵押铸币CriticalResolvedBusiness logic

公开事件复盘。 本页基于公开披露资料对一起真实安全事故做事后分析,用于安全研究与方法论说明, 并非 umibit 受托审计。文中数据请以「核验来源」所列公开资料为准。

事件概览

Wormhole 是连接 Solana、Ethereum 等多链的跨链桥,由一组「守护者(guardian)」对跨链消息(VAA)签名背书。 2022-02-02,攻击者在 Solana 端 无任何真实抵押 铸出 120,000 wETH(约 $3.26 亿),其中 93,750 ETH 被桥回以太坊,其余在 Solana 端变现。

根因:账户校验缺失导致验签被绕过

Solana 没有「合约直接调用」的概念,验签依赖 指令内省:verify_signatures 会读取「前一条指令」来确认 Secp256k1 预编译确实校验过守护者签名。问题出在两点叠加:

  1. 代码使用了 已弃用的 load_instruction_at,而非带地址校验的 load_instruction_at_checked;
  2. 因此 没有校验传入的 Sysvar 账户是否为真正的 Sysvar1nstructions 系统地址。

攻击者于是传入一个 伪造的 Sysvar 账户,让 verify_signatures 误以为「签名已被预编译验证」,凭空造出一个 合法的 SignatureSet。再经 post_vaa 生成「有效」VAA、调用 complete_wrapped 铸出 wETH。

修复方式正是把调用换成会校验账户地址的 load_instruction_at_checked。

samczsun(Paradigm)曾指出:修复提交在攻击前约 9 小时就已推到 Wormhole 的公开 GitHub,但尚未部署上线; 他同时评估这更可能是一次依赖版本升级的「附带修复」,而非有意的安全补丁。此点按其原始表述引用。

影响与处置

  • Jump Crypto 在约 24 小时内补足了全部 120,000 ETH,wETH 的偿付能力得以维持,普通用户未直接受损。
  • $10M 白帽招安未获回应,被盗资金最终未追回,于 2023 年初被转移。

AI 视角 · 为什么这类风险只会更多

Wormhole 是一个教科书级的 「验签看似做了,其实被绕过」:漏洞不在加密算法本身,而在 对‘谁在证明’这一前提账户的校验缺失。这类「信任了一个未经校验的输入/账户」的模式,跨语言、跨链反复出现, 且极易被自动化工具按模式批量发现——攻击者正用脚本与 AI 大规模扫描这类范式。

防御必须同等地自动化、前置:把「外部传入的关键账户/地址是否被校验」「是否误用了已弃用的不安全 API」当作 可规模化检测的清单项,在上线前对 全量路径 做覆盖,而不是依赖人工恰好读到那一行。

Sources

The public material this page relies on; every data point and claim can be checked against it.

How to verify this study

Cross-check the official root-cause analyses, security-firm reports and block explorers in Sources above to independently verify the incident date, loss, root cause and on-chain addresses.

← Back to incident studies