Wormhole 跨链桥被黑事件:3.2 亿美元损失的始末
损失 3.2 亿美元。攻击者绕过了签名验证。24 小时内 Jump Crypto 注入等额资金把窟窿填上。
这是 2022 年 2 月 2 日 Wormhole 跨链桥被黑事件能用三句话概括的全部框架。它不是当年最大的一笔损失(Ronin 桥晚些时候的 6.25 亿美元才是),但在结果上是极少见的"用户没有实质损失"的大型攻击——不是因为 Wormhole 坚固,而是 Jump Crypto 极快用自家钱补了上来。
Wormhole 是干什么的
Wormhole 是连接 Solana 与多条 EVM 链(以太坊、BSC、Polygon 等)的"消息层 + 资产桥"。最常见的用法:你在以太坊上锁定 1 个 ETH,Wormhole 在 Solana 链上铸造 1 个 wETH 给你,反之亦然。本质是两条链上各有一份"凭证",由桥合约和验证者保证数量同步。
Wormhole 的验证者机制叫 Guardian Network,由当时 19 个独立节点组成,每笔跨链消息需要至少 13 个 Guardian 多签确认(13/19 阈值)。Guardians 把签名打包成 VAA(Verified Action Approval),交给 Solana 端的桥合约——合约验证 VAA 上的签名合规,才铸造 wETH。
这种结构和CEX 和 DEX 的差异一样,把"信任谁"明确化:你信任的不是某段代码,而是那一组验证者会诚实签名、那段合约会严格验证。两个环节任何一个出错,桥就破了。Wormhole 这次出错的,是后者。
(/uploads/20260529/1780055382673-46303.png)
漏洞机制:签名验证的一个"形式"判断
问题出在 Solana 端 verify_signatures 的前置——它依赖 Solana 系统指令 Secp256k1 做签名验证,但合约没有真正核对调用者用的是不是 Solana 官方的 Secp256k1 指令。
代码原意是"我让 Solana 帮我验签,验过的才放行";写出来却变成"我看到某个指令叫 Secp256k1,就当真"。攻击者只需构造一个伪造指令,让合约误以为前置验签已经完成。这种叫做 "signature verification bypass"的漏洞类型,事后被 Solana 社区写进了智能合约的必查清单里——它的危险性在于:单元测试和功能测试都会通过,因为程序逻辑在"正常调用"时表现正确,只有面对带恶意构造的指令时才会暴露。
这是典型的"形式验证 vs 实质验证"。代码相信了一个名字,没有核对那个名字来自哪里。结果是攻击者可以提交一组并未被 Guardians 真正签过的"VAA",桥照样放行铸币。
值得对照的是,Ronin 桥那次是验证者私钥被钓鱼,多签的"人"被攻破;Wormhole 这次是合约本身没正确校验签名,多签的"机制"被绕开。两种攻击都通向同一个结论——Ronin 事件复盘里那句话同样适用:跨链桥的安全 = 验证环节最弱那一段。
攻击是怎么完成的
攻击在链上的轨迹大致是:
第一,以太坊侧不存任何钱。攻击者没有锁定真实 ETH,目标是直接在 Solana 端"凭空"铸造 wETH。
第二,构造伪造的指令调用。攻击者把一个看起来像 Secp256k1 验签的指令塞进交易,传给 Wormhole 的桥合约。
第三,桥合约误以为签名已经验过,铸造了 12 万 wETH——在以太坊主网上根本没有对应抵押。按当时的 ETH 价格,约 3.25 亿美元。
第四,转出与换币。攻击者把铸出来的 wETH 一部分留在 Solana、一部分反向桥回以太坊换回真实 ETH 和 USDC。
从第一笔可疑交易到桥被发现,只有几个小时。和 Ronin 那次 6 天才被发现相比,Wormhole 这次反应算快——这也为后面的"快速补救"留出了关键窗口。
24 小时内的补窟窿与最终影响
Wormhole 的核心赞助方是 Jump Crypto(量化巨头 Jump Trading 的加密分部)。攻击发生后不到 24 小时,Jump 公开宣布用自有资金注入 12 万 ETH,把 Solana 端 wETH 的足额抵押重新撑起。对用户来说,真 ETH 还能正常赎回;持有 wETH 的项目方不会发生连锁清算。
为什么 Jump 愿意承担?Wormhole 是 Jump 的"嫡系"基础设施,Solana 生态当时正处上升期,桥失守意味着整个生态信用瞬间崩盘——Jump 在 Solana 的其他持仓远比 3.2 亿美元更值得保护。
团队同时做了几件事:暂停桥、修补合约、公开复盘和审计报告、把 Immunefi 赏金上限提到 1000 万美元。和DAO 黑客事件、Ronin 桥事件一起,构成了"跨链桥安全"最常被引用的三组教材。
(/uploads/20260529/1780055410905-75773.png)
普通用户能从中学到什么
第一,桥不是"自动的",它的安全等于背后团队的工程质量和救助意愿。Wormhole 这次能把损失"对用户屏蔽掉",是 Jump 选择承担的结果,不是桥本身的属性。下一座桥不一定有同样的赞助方。
第二,桥另一端的"封装币"(wXXX)始终带着对桥的信用风险。哪怕原链资产没问题,封装版被增发、贬值、脱锚,都会让"票据"瞬间贬值。这和稳定币的风险同源——你信任的不是底层资产,而是发行方。
第三,跨链动作要量化对待。把"跨 1 ETH 过去玩一下"看成"借给桥的验证者团队"。只跨当下用得到的金额、不长期把大额停在封装币里,几乎是唯一稳妥做法。和选交易所的标准一致。
跨链桥的安全 = 最弱一条链的安全
值得长期记住:跨链桥不会让两条链同时变得更安全,它只会把安全下限拉到同一个低点。Wormhole 这次不是 Solana 不安全,也不是以太坊不安全,而是连接它们的那座桥不安全——一个不到 200 行的形式校验失误,让 13/19 的多签机制变成了 0/19。13 个 Guardian 没有一个被攻破,但他们的存在在那笔被铸造出来的 wETH 面前没有任何意义。
下次看到一条新链宣传"我们和主流生态实现了跨链互通"时,多问一句:那座桥是谁建的、谁验证、谁兜底。答案不清楚的时候,资产留在自己更熟悉、更愿意承担的那条链上,永远是更保守、也更聪明的选择。Wormhole 之后行业里冒出了 LayerZero、Axelar、CCIP 这类号称"更安全"的新一代消息层,它们各自给出了不同的信任模型,但所有人都默认了同一件事:桥的安全是一个永远在被重新验证的问题,不是一次性能勾完的清单。
本文仅作科普,不构成投资建议。加密资产波动大、风险高——永远只投入你亏得起的钱。