Bybit 事件:一次 Web2 入侵如何造就史上最大加密货币黑客案

#2 Bybit 事件:一次 Web2 入侵如何造就史上最大加密货币黑客案

原文标题: #2 Bybit Incident: A Web2 Breach Enables the Largest Crypto Hack in History
原文链接: https://blocksec.com/blog/bybit-incident-a-web2-breach-enables-the-largest-crypto-hack-in-history
作者 / 机构: BlockSec
原文发布日期: 2026-02-09
分类: Code Auditing(代码审计)
译文说明: 全文简体中文翻译(非摘要)。IOC、哈希、合约地址、交易哈希、函数名、URL、代码等保持英文原文。
翻译日期: 2026-09-16(Asia/Shanghai)

免责声明: 本译文为非官方简体中文翻译,仅供安全研究与防御学习参考。版权归 BlockSec 及原作者所有。如有歧义,以英文原文为准。

封面图

图:Bybit 事件分析封面


2025 年 2 月 21 日,攻击者通过社会工程(social engineering)攻陷一名 Safe{Wallet} 开发者的机器后,Bybit 损失约 15 亿美元。攻击者将恶意 JavaScript 注入 Safe{Wallet} 的 AWS S3 存储桶,并专门针对 Bybit 的交易。注入代码在签名过程中篡改交易内容:Safe{Wallet} 界面显示的是一笔合法交易,而实际发送到签名者 Ledger 设备的载荷,会将 Bybit 的 Safe 合约升级为恶意实现,从而让攻击者获得完全控制权。一旦签名并执行,攻击者抽干了合约中的全部资产。更详细的技术拆解见我们此前的报告 [1]。

背景

Safe{Wallet}(又名 GnosisSafe)是一种采用 n-of-m 模型的多签(multisig)钱包基础设施:执行一笔交易至少需要 m 名签名者中的 n 个签名。

每个 Safe 钱包部署为代理合约(proxy contract)。与本次事件密切相关的两个存储变量是:

masterCopy 与 threshold 示意

图:Safe 代理中的 masterCopy(slot 0)与 threshold(slot 4)

由于代理使用 delegatecall,任何在 masterCopy 上调用的函数都会在代理自身的存储上下文中执行。这意味着 delegatecall 目标可以直接覆写 slot 0 处的 masterCopy,从而在单笔交易中替换整个实现。

漏洞分析

攻击路径贯穿系统的三层,每一层都存在攻击者可利用的结构性条件:

前端服务模型。 Safe{Wallet} 前端 JavaScript 由 AWS S3 存储桶提供。在此架构下,任何对存储桶具备写权限的人都可以修改为签名者构造交易的代码。子资源完整性(SRI)哈希或代码签名等完整性校验机制可以缓解该风险,但它们对大多数 dApp 前端尚未成为标准实践。攻击者通过被攻陷的开发者机器获得写权限,并静默修改了所服务的 JavaScript。

界面展示与签名载荷之间的鸿沟。 注入的 JavaScript 在 Safe{Wallet} UI 上展示看似合法的交易,同时向 Ledger 硬件钱包发送不同的载荷。Ledger 屏幕上显示的交易细节本应与 UI 不同,但在硬件钱包小屏上解读原始交易数据并不容易,尤其是对复杂的多签操作。这一鸿沟使攻击者得以收集到针对恶意载荷的三个有效签名。

代理升级模型。 如背景所述,delegatecall 在代理的存储上下文中执行目标代码。Safe 代理架构将所有调用经由 slot 0 处的单一 masterCopy 指针路由。覆写该指针会将代理重定向到完全不同的实现——包括其签名验证逻辑——且只需一笔交易。n-of-m 模型约束的是谁可以发起交易,但一旦交易被批准并执行,它可以改写实现本身。若新实现移除签名验证,则后续所有交易的多签保护实质上失效。

攻击分析

攻击分为三步:恶意代码注入、实现替换、资产窃取。

步骤 1:恶意代码注入

攻击者攻陷 Safe{Wallet} 开发者机器,并将恶意 JavaScript 注入服务于前端的 AWS S3 存储桶。注入代码专门针对来自 Bybit Safe 地址的交易。据 Bybit CEO Ben Zhou [2] 所述,Safe{Wallet} UI 显示的是合法交易,而发送到签名者 Ledger 设备的却是不同载荷。签名者按 UI 所示批准了交易,从而让攻击者获得针对恶意载荷的三个有效签名。

步骤 1:恶意代码注入

图:步骤 1 — 恶意 JavaScript 注入与 UI/签名载荷不一致

步骤 2:实现替换

攻击者带着收集到的三个签名提交恶意交易。Safe 代理将调用委托给 masterCopy,其 execTransaction() 验证签名后执行交易载荷:对攻击者合约(0x962214...5c7242)的一次 delegatecall。由于该 delegatecall 在代理的存储上下文中运行,攻击者的 transfer() 函数将 slot 0 处的 masterCopy 覆写为恶意实现地址(0xbDd077...9516)。自此之后,对 Safe 合约的所有调用都被委托到攻击者代码。

步骤 2a:delegatecall 覆写 masterCopy

图:步骤 2 — 通过 delegatecall 覆写 masterCopy

步骤 2b:实现替换后的调用路径

图:步骤 2 — 实现替换后的委托路径

步骤 3:资产窃取

masterCopy 已指向攻击者实现后,多签要求不再适用。攻击者直接在 Safe 合约上调用 SweepERC20()SweepETH()。这些函数定义在攻击者实现合约中,在无任何签名验证的情况下转移全部持有资产。共执行五笔抽干交易,合计损失约 15 亿美元

步骤 3a:Sweep 函数抽干

图:步骤 3 — 调用 Sweep 函数抽干资产

步骤 3b:多笔抽干交易

图:步骤 3 — 多笔抽干交易概览

相关合约与交易

类型 描述 地址 / 哈希
Contract Bybit 的 Safe 合约 0x1Db92e2EeBC8E0c075a02BeA49a2935BcD2dFCF4
Contract 原始 masterCopy 合约 0x34CfAC646f301356fAa8B21e94227e3583Fe3F5F
Contract 恶意 masterCopy 合约 0xbDd077f651EBe7f7b3cE16fe5F2b025BE2969516
Contract 攻击者合约(即 transfer()) 0x96221423681A6d52E184D440a8eFCEbB105C7242
Transaction 替换 masterCopy 的交易 0x46deef0f52e3a983b67abf4714448a41dd7ffd6d32d32da69d62081c68ad7882
Transaction 抽干 15,000 cmETH 的交易 0x847b8403e8a4816a4de1e63db321705cdb6f998fb01ab58f653b863fda988647
Transaction 抽干 90,375 stETH 的交易 0xa284a1bc4c7e0379c924c73fcea1067068635507254b03ebbbd3f4e222c1fae0
Transaction 抽干 8,000 mETH 的交易 0xbcf316f5835362b7f1586215173cc8b294f5499c60c029a3de6318bf25ca7b20
Transaction 抽干 401,346 ETH 的交易 0xb61413c495fdad6114a7aa863a00b2e3c28945979a10885b12b30316ea9f072c
Transaction 抽干 90 USDT 的交易 0x25800d105db4f21908d646a7a3db849343737c5fba0bc5701f782bf0e75217c9

总结

本事件表明,链下基础设施的沦陷如何级联成灾难性的链上损失。攻击者将一次 Web2 入侵、前端篡改与代理升级串成单一攻击路径,在未利用任何链上漏洞的情况下绕过多签保护。

关键教训:

参考文献

  1. BlockSec: Bybit $1.5B Hack In-Depth Analysis
  2. Bybit CEO Ben Zhou X Broadcast

关于 BlockSec

BlockSec 是全栈区块链安全与加密合规服务提供商。我们构建产品与服务,帮助客户进行代码审计(包括智能合约、区块链与钱包)、实时拦截攻击、分析事件、追踪非法资金,并履行 AML/CFT 义务,覆盖协议与平台全生命周期。

BlockSec 已在权威会议发表多篇区块链安全论文,报告过多个 DeFi 应用的零日攻击,拦截多起黑客攻击并挽回超过 2000 万美元,并保障了数十亿美元规模的加密资产。