第 21 篇:Wormhole——没被验证的那个账户
2022 年 2 月,攻击者伪造了一组守护者签名,从 Wormhole 桥凭空铸出 12 万枚 wETH,约 3.26 亿美元。签名验证的代码是有的,密码学也是对的——缺的是一步:它没有确认「用来验证签名的那个系统账户」是不是真的。这一篇讲一条容易被漏掉的规则:作为地址传进来的东西,也是需要被验证的输入。
2022 年 2 月,攻击者伪造了一组守护者签名,从 Wormhole 桥凭空铸出 12 万枚 wETH,约 3.26 亿美元。签名验证的代码是有的,密码学也是对的——缺的是一步:它没有确认「用来验证签名的那个系统账户」是不是真的。这一篇讲一条容易被漏掉的规则:作为地址传进来的东西,也是需要被验证的输入。
2022 年 3 月,约 6.25 亿美元从 Ronin 桥流出。攻击者没有碰任何一行合约代码:他通过一份伪装成工作邀约的文件拿到了四把验证者私钥,第五把来自一项几个月前为应付流量高峰临时授予、事后从未撤销的代签权限。事故发生六天后才被发现——因为有用户提不出钱。
2024 年 7 月,约 2.35 亿美元从 WazirX 的多签钱包被转走。多签正常工作、硬件钱包正常工作、签名者本人也确实按了确认——问题是他们在屏幕上看到的交易内容,和他们实际签署的字节不是同一个东西。这一篇讲盲签:一个多签钱包在什么条件下会退化成一个单签钱包。
2024 年 10 月,Radiant Capital 损失约 5000 万美元。攻击手法和三个月前的 WazirX 几乎一样:多个签名者的设备被植入恶意软件,前端显示正常而签出的是攻击载荷。真正值得研究的是它的复盘里那句话——签名失败需要重签,在团队看来是「多签钱包的常见现象」。这一篇讲异常的常态化:安全事故最可靠的前兆,是一个被大家习惯了的小毛病。
2025 年 2 月,约 14.6 亿美元从 Bybit 的冷钱包被转走,是有记录以来单笔最大的加密资产盗窃。攻击者入侵的不是 Bybit,而是它使用的多签钱包服务的一台开发者机器,然后给特定的签名者推送了篡改过的前端。签名者批准的是一个替换钱包实现的 delegatecall。合约、密码学、多签门槛、硬件钱包——全部正常工作。
把六起「私钥没了」的事故放在一起看:Mt. Gox、Bitfinex、Harmony、Mixin、HTX/Heco、DMM。它们没有精巧的技术细节可讲,正因为如此更值得研究——它们合计的损失超过了这个档案里所有合约漏洞的总和,而每一起的根因都写不满三行。
把这个档案里 29 起事故压缩成一份可以逐条打勾的表。每一条后面都标着它对应哪一起事故——不是通用建议,是有人为它付过钱的教训。按「写代码时 / 部署前 / 上线后」三个阶段组织。
档案里用到的攻击手法、防御机制与安全概念,按七个漏洞类别组织,每条标注出处篇号。
写这个档案时用到的资料类型、可以自己动手复现的工具链,以及一份「读一份新复盘时该问什么」的流程。附本档案刻意没有覆盖的方向。