安全深度复盘·卷二:DeFi、桥、治理与供应链(15 起)

阅读约定:本卷全部为"事后复盘",只讲发生了什么、为什么会发生、以及行业从中学到了什么,不提供任何可复现的攻击代码或操作步骤。金额一律采用"约 + 事发当时口径",因为加密资产价格波动剧烈,用今天的价格回看会严重失真。

归因等级图例(A–E): A 级 = 有法院判决、认罪或官方起诉书确认到具体自然人; B 级 = 官方声明 + 多家独立链上分析机构结论一致,指向特定组织(如某国家级黑客集团),但无司法终局; C 级 = 行业内高度共识(安全公司、协议方口径一致),但攻击者身份未被司法确认; D 级 = 存在指向性线索或内部人嫌疑,但证据不足以定性; E 级 = 身份不明,或攻击者主动现身却始终匿名。


复盘16:Parity 多签两连击(2017)

事件摘要。 2017 年,以太坊上最流行的多重签名钱包 Parity Multisig 在半年内被同一类问题击穿两次。7 月 19 日,攻击者利用钱包合约初始化函数的权限缺陷,从三个大额项目金库中卷走约 15.3 万枚 ETH(当时约合 3000 万美元);11 月 6 日,一名自称新手的用户在把玩合约时,误把公共库合约"据为己有"并随即销毁了它,导致所有依赖该库的钱包彻底瘫痪,约 51.3 万枚 ETH(当时约合 1.5 亿美元)被永久冻结至今。后一次没有任何人获利,却造成了远大于前一次的损失。

事发前系统结构。 Parity 为节省 gas,采用了"库合约 + 轻量代理"架构:每个用户部署的钱包只是一个很薄的壳,真正的逻辑放在一份全网共用的库合约里,壳通过 delegatecall 转发调用。这种设计本身是主流做法。问题出在库合约自身也保留了一套"初始化所有者"的入口,而这个入口在库合约实例上从未被调用过,也就一直处于"未初始化"状态。审计层面,Parity 是当时声誉最好的以太坊客户端团队之一,钱包代码经过内部评审并被大量项目直接复用,但库合约的"裸露初始化入口"没有被视为风险点。

时间线要点。 7 月 19 日,Edgeless Casino、Swarm City、æternity 三个正在做代币销售的项目金库被清空;以太坊社区自组织的白帽小组(White Hat Group)在数小时内用同一手法抢救出约 37.7 万枚 ETH,事后逐一归还原主。7 月底 Parity 发布修复版本,把初始化逻辑收紧。11 月 6 日,一个链上化名为 devops199 的账号在新版库合约上调用了初始化函数,成为库的所有者,随后调用了自毁函数。所有指向该库的钱包壳瞬间失去逻辑,资金既无法转出也无法升级。11 月至次年,社区提出通过硬分叉恢复冻结资金的方案,因"是否开先例"的争议巨大,最终未被采纳。

被利用机制(原理级)。 核心是"共享逻辑合约的状态归属"被搞混了。代理模式的正确心智模型是:逻辑合约只提供指令,状态永远存在于各自的代理里。但如果逻辑合约本身可以被当成一个普通合约直接调用,它就会拥有自己的一份状态;而一旦有人在这份状态里把自己写成所有者,再触发自毁,逻辑代码本身就从链上消失了。所有"借用"这段代码的代理,从此调用的是一个空地址——转账、换签名人、升级,全部失效。第一次事故与第二次事故的根因是同一个:可被外部任意调用的初始化入口,加上未初始化即等于无主。

资金流向与追回。 7 月被盗的 15.3 万 ETH 中,绝大部分未被追回,攻击者分批经交易所与混币渠道转移,身份至今不明;白帽小组抢救的 37.7 万 ETH 则全额返还。11 月冻结的 51.3 万 ETH 从未移动过一分,其中约 30.6 万 ETH 属于 Web3 基金会(Polkadot 早期募资),其余分散在数百个团队和个人手中。这笔钱在链上"看得见摸不着",成为以太坊历史上最著名的资产墓碑。

技术 vs 设计 vs 组织。 技术原因是初始化函数缺少"只能调用一次"和"只能由部署者调用"的双重防护;设计原因是把可自毁的合约当作全网共享的基础设施,等于给整个生态装了一个单点开关;组织原因则是第一次事故后的修复只堵住了外层洞口,没有系统性重审"库合约自身也是一个可被攻击的账户"这一前提,导致同一根因在四个月后以更惨烈的形式复发。

响应与补偿。 Parity 公开披露、发布事故报告,并推动了 EIP-999 等恢复提案;社区经过数月辩论后否决,理由是"代码即法律"的可信中立比救回一笔钱更重要。受损方没有获得任何补偿,Web3 基金会自行承担损失继续推进 Polkadot。这一决定的深远影响是:以太坊主网此后再未为任何单一项目的资金损失做过状态修改。

法律与归因。 7 月盗窃案归因等级 E:攻击者身份不明,无任何司法追责。11 月冻结事件归因等级 A/E 混合:触发者 devops199 主动现身并留下完整链上记录,行为性质被普遍认定为"无恶意的意外",未被起诉,但其真实身份始终未公开。这也留下一个法律难题——无获利、无恶意、却造成一亿五千万美元级损失的行为,现行法律几乎无从下手。

三方教训。 对开发者:初始化入口必须一次性锁死,逻辑合约要在部署时立即"自我封印";对项目方:不要把金库托付给一个你无法独立验证的共享库,升级路径要有备份;对用户:多签不等于安全,多签合约背后的实现同样是攻击面,大额资金应分散在不同实现的钱包中。

来源类型。 Parity 官方事故报告与安全公告、以太坊改进提案 EIP-999 讨论存档、白帽小组公开声明、多家安全审计机构的技术复盘、链上交易记录。


复盘17:bZx 连环闪电贷(2020)

事件摘要。 2020 年 2 月 15 日与 18 日,去中心化保证金交易协议 bZx 在四天内被两次攻击,分别损失约 35 万美元(约 1271 枚 ETH)和约 63 万美元(约 2378 枚 ETH)。金额不大,意义极大:这是"闪电贷"第一次被完整地当作攻击武器公开演示,从此 DeFi 安全模型被迫整体重写。同年 9 月和 11 月,bZx 又因代币记账缺陷和另一处逻辑问题分别损失约 800 万和约 830 万美元。

事发前系统结构。 bZx 的核心产品 Fulcrum 允许用户抵押资产做杠杆交易,杠杆头寸的开仓与清算依赖资产价格。价格来源直接取自链上去中心化交易所的即时报价,也就是"当前池子里两种资产的比例"。协议合约经过审计,但审计关注的是重入、溢出、权限这类传统问题,对"喂价来源可被同一笔交易操纵"没有形成结论。权限方面 bZx 保留了管理员暂停能力,这在后来救了它一命。

时间线要点。 2 月 15 日,攻击者在单笔交易内借出一大笔 ETH,分散到借贷市场、杠杆协议和现货交易所,先在流动性很薄的池子里制造出剧烈的价格偏移,再让 bZx 按这个被扭曲的价格结算头寸,交易结束时归还闪电贷并留下差额利润。当天 bZx 暂停协议、发布声明,称将自行承担损失。2 月 18 日,同类手法再次上演,这次针对的是另一种合成资产的报价路径。bZx 再度暂停,并宣布引入 Chainlink 作为价格源。事件之后数月,几乎所有主流 DeFi 协议都开始迁移预言机方案。

被利用机制(原理级)。 闪电贷让"资金规模"不再是攻击门槛——只要能在一笔交易内借入、使用、归还,任何人都可以临时拥有上亿美元的购买力。而当时很多协议把"某个交易池的瞬时价格"当作真实市价。这两件事叠加后,攻击的逻辑就变成:用巨额临时资金把某个薄流动性池子的价格推到极端,让依赖它报价的协议做出错误估值,从中套取差额,最后在同一笔交易里把一切还原。整个过程原子化完成,链上看到的只是一笔成功交易,没有任何中间状态可以被外部干预。

资金流向与追回。 两次攻击所得均未被追回。攻击者通过混币服务转移资金,链上分析公司曾一度追踪到疑似身份线索,但未有执法结果。bZx 用协议保险基金和团队资金填补了用户损失,用户资产账面上没有减少。

技术 vs 设计 vs 组织。 技术原因是价格读取函数直接使用了可被单笔交易操纵的数据源;设计原因更根本——协议假设"要移动市场价格需要真实的巨额资本",而闪电贷把这个假设彻底作废;组织原因在于 bZx 在半年内接连出事,说明团队的安全响应停留在"补被打中的那个洞",缺少一次自上而下的威胁模型重建。

响应与补偿。 bZx 两次都在小时级别暂停协议并公开完整技术分析,这份透明度在当时获得了不少认可。协议随后接入去中心化预言机网络,引入时间加权价格,并大幅提高了参数保守度。用户全额未受损,成本由协议自身承担。

法律与归因。 归因等级 E。两次攻击的执行者始终匿名,未被起诉。值得注意的是,事后行业内出现了长期争论:这类"完全在协议规则内完成的交易"到底算不算盗窃。这个争论在两年后的 Mango Markets 案里才真正被搬上法庭。

三方教训。 对开发者:任何用于结算、清算、铸造的价格,都必须假设它会被人用无限资金推动,要用时间加权、多源聚合、偏离熔断三重防线;对项目方:审计通过不等于经济模型安全,必须单独做一次"经济攻击面"评估;对用户:新协议上线初期的高收益,往往正在为尚未被发现的经济漏洞定价。

来源类型。 bZx 官方事故报告与推特声明、多家安全公司的交易级技术分析、以太坊链上交易记录、行业媒体的同期报道与后续综述。


复盘18:Harvest Finance(2020)

事件摘要。 2020 年 10 月 26 日,收益聚合器 Harvest Finance 的 USDC 与 USDT 机枪池在约七分钟内被反复套利,损失约 2400 万美元。攻击者在同一笔操作模式上循环执行了三十余次,事后主动退回约 247 万美元。这是 DeFi 史上第一起"针对稳定币池、以套利形式完成"的大规模攻击,也让"机枪池份额定价"成为审计必查项。

事发前系统结构。 Harvest 的模式是:用户把稳定币存入机枪池,协议把这些钱投到外部的稳定币兑换池中赚取手续费和挖矿奖励,用户拿到一份代表份额的凭证代币。份额的申购与赎回价格,由协议实时查询外部兑换池的资产比价来计算。协议合约做过审计,也设置了多签管理权限,但份额定价所依赖的外部池价格,被默认视为可信——因为那是几十亿美元规模的主流稳定币池,直觉上"不可能被推动"。

时间线要点。 10 月 26 日凌晨,攻击者借入巨额稳定币,在外部兑换池中做大额单向兑换,把池内两种稳定币的比价短暂推离 1:1;随即以被压低的估值向 Harvest 申购份额,再把外部池的价格推回原位,用恢复后的估值赎回份额,赚取每轮几十万美元的差额;如此循环三十余次。约七分钟后攻击结束。Harvest 团队随即暂停存款、发布声明,并悬赏 10 万美元征集线索。数小时内,攻击者向 Harvest 部署地址退回约 247 万美元,没有留言解释。

被利用机制(原理级)。 稳定币兑换池的定价曲线在接近 1:1 时非常平缓,但一旦被推到远离平衡点,价格会明显偏移。Harvest 的份额估值直接读取这个瞬时比价,等于把"池子被临时推歪的状态"当成了真实价值。攻击者所做的,本质上是在自己制造的短暂错价窗口里低买高卖,而这个窗口由他自己开启、自己关闭。每一轮的利润来自其他份额持有者被稀释的价值——所以从链上看,这不像"盗窃",更像一次极端的内部套利。

资金流向与追回。 扣除退回的约 247 万美元后,约 2150 万美元通过跨链渠道转为比特币类资产并进入混币服务。链上分析公司发现攻击者早期曾使用过一个中心化交易所的存款地址,理论上留下了 KYC 线索,Harvest 也据此公开点名,但最终没有公开的执法结果。资金未被追回。

技术 vs 设计 vs 组织。 技术原因是份额定价使用了可被单笔交易操纵的即时比价;设计原因是聚合器把"外部协议的内部状态"当作了自己的定价基准,等于把安全边界外包给了一个自己无法控制的系统;组织原因是团队对"大池子不可能被推动"这一直觉过度自信,没有在压力测试中模拟极端单边兑换。

响应与补偿。 Harvest 迅速暂停存款、公开完整分析,并推出补偿方案:用协议原生代币按比例赔付受损用户,同时把部分未来手续费收入用于回购。多数受损用户获得了部分补偿,但代币价格随后下跌,实际补偿率打了折扣。协议此后改用更保守的份额定价方式,并加入了存取款延迟与偏离阈值检查。

法律与归因。 归因等级 E。攻击者匿名,主动退款且未留下任何自述,行业普遍认为其行为兼具"套利者"与"攻击者"的模糊属性。无起诉、无判决。

三方教训。 对开发者:凡是"用外部协议状态计算自己资产价格"的地方,都要问一句"这个状态能否在一笔交易里被推动";对项目方:收益聚合器天然继承所有底层协议的风险,风险披露必须逐层写清;对用户:高年化的机枪池收益背后,往往是多层协议嵌套,任何一层出问题都会传导到你的本金。

来源类型。 Harvest Finance 官方事故报告与补偿提案、多家安全公司的交易级分析、链上追踪机构的资金流向报告、行业媒体同期报道。


复盘19:Cream Finance 累计三次(2021)

事件摘要。 借贷协议 Cream Finance 在 2021 年一年内被攻破三次,累计损失约 1.86 亿美元:2 月 13 日约 3750 万美元、8 月 30 日约 1870 万美元、10 月 27 日约 1.3 亿美元。三次的技术根因各不相同——分别是跨协议信任、代币标准回调、以及预言机操纵——但组织层面的根因高度一致:一个不断扩张资产列表、却没有同步扩张风控能力的协议。

事发前系统结构。 Cream 是 Compound 代码的分叉,主打"什么资产都能上架"的长尾借贷市场,并运营着面向协议的无抵押信贷平台 Iron Bank。上架新资产由治理投票决定,但实际执行速度很快,很多资产的流动性极薄。协议做过审计,核心借贷逻辑基本沿用了经过实战检验的原始代码,风险主要集中在"上架了什么"而非"代码怎么写"。管理权限由多签持有,具备暂停市场的能力。

时间线要点。 2 月 13 日,一个与 Cream 有信贷额度互通的合作协议出现记账缺陷,攻击者借助该缺陷凭空放大了自己的抵押品,进而从 Iron Bank 借空多个市场;Cream 本身代码无误,却承担了主要损失。8 月 30 日,攻击者利用某个上架代币在转账时会回调接收方的特性,在借款尚未记账完成时再次发起借款,构成重入式重复借出。10 月 27 日,攻击者用两笔巨额闪电贷同时操纵某收益代币的账面价格与借贷池的可用余额,把该代币的估值推高后借空协议,单次损失约 1.3 亿美元,是当年最大的 DeFi 攻击之一。每次事件后 Cream 都暂停相关市场并发布公告。

被利用机制(原理级)。 第一次的核心是"信任传递":借贷协议之间互相授信时,A 的记账错误会直接变成 B 的坏账。第二次的核心是"代币标准的隐藏回调":某些代币标准允许在转账过程中通知接收方,这就在借贷合约"先转账、后更新余额"的顺序里插入了一个可被利用的中间点。第三次的核心仍是预言机:一个收益型代币的价格由它所代表的底层资产总量除以份额数得出,而底层资产总量可以被临时捐赠拉高,份额数不变,价格就凭空翻倍。

资金流向与追回。 三次事件的资金几乎都通过混币服务转出,未被追回。第三次攻击的部分资金曾被链上分析追踪到与其他攻击事件相同的地址簇,暗示同一批人多次作案,但无公开执法结论。第一次事件中,出问题的合作协议方承担了主要赔付责任。

技术 vs 设计 vs 组织。 技术原因三次各异;设计原因是"无许可上架长尾资产 + 统一风险池"这一组合本身高危——任何一个薄流动性资产的估值失真,都会污染整个协议的偿付能力;组织原因最关键:连续被攻破却仍在扩张资产列表,说明增长目标压过了风控节奏,且缺少一个能对"上架新资产"说不的独立风险委员会。

响应与补偿。 Cream 在第一次事件后由合作方主导赔付;第二次和第三次通过发行债务凭证、用未来协议收入逐步回购的方式补偿用户,实际兑付进度缓慢。协议此后大幅削减资产列表、引入更保守的抵押率与借款上限,并接入了更稳健的价格源,但市场信心已难以恢复,规模再未回到高点。

法律与归因。 归因等级 E(三次均未有司法确认的身份)。链上分析对第二、三次给出了"同一攻击者簇"的 C 级推断,被行业广泛接受但未经法庭检验。

三方教训。 对开发者:接入任何新代币前,必须确认其转账行为是否包含回调、是否会改变余额语义;对项目方:长尾资产要单独隔离风险池,绝不能与主流资产共享偿付能力,并对每个市场设置独立的借款上限;对用户:一个被反复攻破的协议,其风险不会因为"这次修了这个洞"而下降,组织能力才是最终防线。

来源类型。 Cream Finance 官方公告与赔付提案、合作协议方的事故说明、多家安全公司的三份独立技术分析、链上分析机构的地址簇报告。


复盘20:BadgerDAO 前端注入(2021)

事件摘要。 2021 年 12 月 2 日,比特币收益协议 BadgerDAO 的用户在毫无察觉的情况下被批量清空钱包,损失约 1.2 亿美元。这次攻击一行智能合约代码都没碰——合约完好无损、审计全部通过——攻击者做的是往网站前端里塞了一段脚本,把用户本来要签的授权,悄悄换成了给攻击者的无限额度授权。这起事件把整个行业的注意力,第一次从"合约安全"拽到了"用户签的到底是什么"。

事发前系统结构。 BadgerDAO 的合约经过多家机构审计,金库由多签管理,链上部分被认为相当稳健。但网站前端托管在一个通用的内容分发与安全服务上,该服务的管理接口可以创建具备写入权限的 API 密钥。这个密钥的创建与使用没有额外的多因素约束,也没有对前端产物做完整性校验(例如子资源完整性校验或构建产物哈希比对)。换言之,链上防线很厚,链下发布链路几乎没有防线。

时间线要点。 2021 年 9 月中旬,攻击者通过某种方式获得了 BadgerDAO 在该托管服务上的账号权限,并创建了一个恶意 API 密钥。10 月起,恶意脚本开始被间歇性地注入到网站,且只对满足特定条件(如钱包余额较大)的访客生效,从而长期规避了被发现的风险。11 月底注入频率提高。12 月 2 日凌晨,用户开始在社区反馈"资产不见了",Badger 团队在数小时内暂停所有金库合约、下线前端。随后聘请链上分析公司与取证团队介入,12 月中旬发布详细事故报告,确认了托管服务 API 密钥泄露这一路径。

被利用机制(原理级)。 以太坊上的代币授权模型要求用户先"批准"某个合约可以动用自己多少代币。绝大多数钱包在弹出签名请求时,只能展示这笔请求的原始意图,而普通用户很难分辨"批准 100 USDC 给金库"和"批准无限额度给一个陌生地址"的区别。攻击者把前端里生成授权请求的那段逻辑改掉,用户点的还是"存入"按钮,钱包弹出的还是熟悉的确认框,但实际签下的是一张给攻击者的空白支票。攻击者随后在自己方便的时间统一执行提取。整个过程中,链上合约、审计报告、多签配置全部无懈可击。

资金流向与追回。 被盗资产以比特币锚定代币和以太坊资产为主,攻击者分批转移,部分经跨链桥转出。链上分析公司受聘全程追踪,锁定了若干中转地址,但绝大部分资金未被追回。少量被送入中心化平台的资金曾被冻结。

技术 vs 设计 vs 组织。 技术原因是前端托管账号权限被窃且无产物完整性校验;设计原因是无限额度授权这一模式本身对用户极不友好,把"看不懂的风险"转嫁给了最没有能力识别的一方;组织原因是团队把安全预算几乎全部投在合约审计上,对域名、DNS、CDN、构建流水线这条"链下攻击面"没有任何监控与轮换制度,以至于恶意脚本潜伏了近两个月才被发现。

响应与补偿。 Badger 暂停全部金库、公开完整取证报告,并通过治理提案启动补偿计划:动用协议金库与未来收入,分阶段向受损用户偿付,部分以协议代币和债权凭证形式发放。补偿执行了相当长的周期,覆盖了大部分损失。技术上,团队引入了前端产物签名校验、密钥轮换制度和链下变更的多方审批。

法律与归因。 归因等级 E。尽管有专业取证团队介入,攻击者身份始终未被公开确认,无起诉、无判决。

三方教训。 对开发者:把前端发布当作特权操作对待——产物哈希上链或公示、依赖锁定、密钥定期轮换、任何生产变更双人复核;对项目方:安全预算必须覆盖"从代码仓库到用户浏览器"的完整路径,只审合约等于只锁后门;对用户:养成检查授权额度的习惯,定期用授权管理工具撤销闲置授权,大额资产使用与日常交互隔离的钱包。

来源类型。 BadgerDAO 官方事故取证报告、受聘链上分析公司的追踪结论、社区治理提案与补偿方案存档、多家安全机构的独立复盘。


复盘21:Poly Network 6.1 亿全额归还奇案(2021)

事件摘要。 2021 年 8 月 10 日,跨链互操作协议 Poly Network 被转走约 6.11 亿美元资产(以太坊约 2.73 亿、BNB 链约 2.53 亿、Polygon 约 8500 万),刷新了当时的加密史最高纪录。更离奇的是结局:攻击者在链上与项目方公开对话,自称是为了"暴露漏洞"的白帽,随后在数天内分批全额归还了几乎所有资产。Poly Network 反过来给他发了 50 万美元赏金并邀请他出任首席安全顾问,这笔赏金也被拒收。

事发前系统结构。 Poly Network 的跨链模型依赖一组被称为 keeper 的守护者公钥:源链上锁定资产,跨链消息由 keeper 签名背书,目标链上的管理合约验证签名后放行资产。关键在于,负责验证并执行跨链交易的合约,同时也有权调用另一个存储合约去更换 keeper 公钥集合。这两项能力被放在了同一条调用路径上。协议经过审计,但审计未识别出"执行入口可以指向权限管理入口"这一组合风险。

时间线要点。 8 月 10 日下午,三条链上的资金池在短时间内被连续提空。安全公司迅速发布预警,交易所与稳定币发行方开始配合冻结。当晚,Poly Network 发布公开信,呼吁攻击者归还并称已联系执法机构。攻击者随即在交易备注中回复,自称"对钱不感兴趣",并开始通过链上问答与项目方沟通。8 月 11 日起分批归还,部分资产被存入一个需要双方共同签名的托管地址。8 月 13 日起大部分资产返还完毕,剩余部分在几天内陆续解锁。8 月下旬,全部资产基本归位。

被利用机制(原理级)。 跨链桥的核心是"把一条链上的事件证明给另一条链看"。Poly 的目标链合约在验证通过后,会按消息里指定的目标地址和函数去执行调用。而更换 keeper 公钥的那个管理函数,恰好也在这个合约有权调用的范围内。于是,一条格式合法、签名有效的跨链消息,就可以指挥合约去执行"把 keeper 换成攻击者指定的公钥"。一旦换成功,此后所有跨链消息都由攻击者自己签名背书——他不再需要绕过验证,因为他就是验证者。这属于典型的"权限边界与执行边界重叠"问题,而不是密码学或签名算法被破解。

资金流向与追回。 攻击者始终未使用混币服务,也未把资产转入任何中心化平台,只在几个自己控制的地址间移动。稳定币发行方在事发初期冻结了约 3300 万美元,客观上限制了变现空间。最终追回率接近 100%,这是加密史上罕见的全额归还案例。

技术 vs 设计 vs 组织。 技术原因是执行合约对可调用目标缺少白名单限制;设计原因是把"资产放行"与"信任根更换"两个安全等级完全不同的操作放在同一权限域内——正确的做法是让更换验证者集合走独立的、需时间锁与多方确认的治理路径;组织原因是审计范围聚焦在签名验证的正确性,而没有做跨合约的权限关系图审查。

响应与补偿。 Poly Network 采取了非常规但有效的策略:公开、克制、留出台阶。团队没有立刻定性为犯罪,而是称对方为"白帽先生",同时明确告知已联动交易所与执法机构,形成"变现无门 + 体面退出"的双重压力。资金全额归还后无用户损失。协议随后重构了权限模型,把关键管理操作移入独立时间锁,并进行了多轮复审。

法律与归因。 归因等级 E。攻击者身份从未被公开确认,也未被起诉。行业内曾出现关于其动机的多种推测,但缺乏证据。此案在业内的长期意义是它验证了一条现实规律:在公开账本上,大额资产的"偷得走"与"花得掉"完全是两件事。

三方教训。 对开发者:给跨链执行器加上严格的目标合约与函数白名单,永远不要让业务路径能触达治理路径;对项目方:应急沟通本身是一种安全能力,公开、快速、给出路的策略可以显著提高追回概率;对用户:跨链桥是整个行业风险最集中的位置,跨链资产不宜长期停留,用完即走。

来源类型。 Poly Network 官方公告与链上公开信、攻击者在交易数据中留下的公开留言、多家安全公司的技术分析、稳定币发行方的冻结声明、行业媒体的连续报道。


复盘22:Beanstalk 治理闪电贷(2022)

事件摘要。 2022 年 4 月 17 日,算法稳定币协议 Beanstalk 被一笔交易掏空,协议损失约 1.82 亿美元,攻击者净得约 7600 万美元。攻击手段不是找代码漏洞,而是用闪电贷临时买下了协议的绝对控制权,然后堂堂正正地"投票通过"了一份把金库转给自己的提案。这是治理攻击第一次以如此教科书的形式发生,也让"投票权 = 可租借的商品"这一隐患彻底暴露。

事发前系统结构。 Beanstalk 采用链上治理:持有协议治理凭证即拥有投票权,提案提交后需经过投票期方可执行。但协议同时保留了一条"紧急提交"通道,允许在提案提交满一定时长(约一天)后,若支持票超过绝对多数门槛,即可立即执行,跳过剩余等待期。这条通道的初衷是应对紧急情况。协议经过审计,代码层面没有已知缺陷,治理凭证可以通过向协议的流动性池注入资金即时获得——这是致命的一环。

时间线要点。 4 月 16 日,攻击者提交了两份提案,其中一份表面上是"向乌克兰捐款",实际内容是把协议全部储备转出。提案提交后,社区并未察觉异常。4 月 17 日凌晨,等待期刚满,攻击者在一笔交易内从借贷协议借出约 10 亿美元规模的资产,全部投入 Beanstalk 的流动性池换取治理凭证,瞬间获得远超绝对多数的投票权,立即调用紧急提交通道执行恶意提案,取走全部储备,偿还闪电贷,收工离场。整个过程在一个区块内完成,社区没有任何反应窗口。团队随后暂停协议、公开分析,稳定币脱锚归零。

被利用机制(原理级)。 链上治理默认"持币等于长期利益绑定",但如果治理凭证可以在同一笔交易里被瞬时获取并瞬时归还,这个假设就崩塌了。攻击者并不需要真正拥有十亿美元,他只需要在执行投票的那一瞬间"看起来"拥有。再加上紧急执行通道压缩了从"取得投票权"到"资金转出"的时间差,防守方连发现的机会都没有。这里的核心不是某行代码写错,而是治理制度的时间维度设计——投票权的快照时点、提案的强制冷却期、执行前的时间锁,这三道闸门当时一道都没有真正生效。

资金流向与追回。 攻击者将所得几乎全部经混币服务转出,未被追回。提案中那笔"捐赠"金额确实被发往了公开的乌克兰募捐地址,普遍认为这是为了在社区舆论上制造混淆。链上分析追踪到资金进入混币器后线索中断。

技术 vs 设计 vs 组织。 技术原因几乎不存在——代码严格按设计执行了;设计原因是治理权可即时获取且执行无时间锁,这是纯粹的制度漏洞;组织原因是恶意提案在链上公示了整整一天却无人审阅,说明协议既没有提案监控机制,也没有一个负责逐条读提案的安全角色,社区治理停留在形式上。

响应与补偿。 协议在事发后暂停并归零,团队公开了完整分析,随后通过社区众筹与新的代币分配方案重启,向受损者发放债务凭证,用协议未来收入分批偿还。重启后的版本引入了提案冷却期、执行时间锁、以及基于历史持仓的投票权快照机制。补偿是渐进式的,并未一次性覆盖全部损失。

法律与归因。 归因等级 E。攻击者身份未被确认,无起诉。此案在监管讨论中被反复引用,用以说明"去中心化治理"在缺乏制度设计时的脆弱性。

三方教训。 对开发者:投票权必须基于快照或锁仓时长计算,提案执行必须有不可绕过的时间锁,紧急通道要用独立的多签而非同一套投票逻辑;对项目方:链上提案必须配备自动化监控与人工审阅流程,"公示"不等于"被看见";对用户:参与算法稳定币这类高度依赖治理的协议时,要把治理攻击风险计入本金损失概率,而不是只看年化收益。

来源类型。 Beanstalk 官方事故分析与重启提案、多家安全公司的交易级复盘、链上治理提案存档与交易记录、行业媒体报道。


复盘23:Harmony Horizon(2022)

事件摘要。 2022 年 6 月 23 日,Harmony 公链的跨链桥 Horizon 被转走约 1 亿美元资产。攻击者没有攻破任何合约逻辑,而是直接拿到了控制桥资金的多签私钥中的两把——而这座桥的放行门槛,恰好就是"五个签名人中任意两个同意"。多家链上分析机构后来将此案归因于朝鲜关联的黑客组织。

事发前系统结构。 Horizon 桥采用 2/5 多签控制:五名签名者中任意两人签名,即可授权从桥合约中转出任意数量的锁定资产。这个门槛在部署时可能是出于运维便利的考量,但对于一座托管着上亿美元的桥来说,它意味着"攻破两个人 = 攻破整座桥"。签名密钥由团队成员管理,存储与使用方式未做严格的硬件隔离与多地分散。桥合约本身经过审计,代码没有被利用。

时间线要点。 6 月 23 日凌晨,桥合约在短时间内连续发出多笔大额转出交易,包括以太坊、稳定币和多种主流资产。安全监控机构率先在社交平台预警,Harmony 团队随后确认并暂停桥服务。团队在数日内公开悬赏,最初提出愿以 100 万美元换取资金归还并不予追究,后提高到 1000 万美元,均未获回应。6 月底至 7 月,被盗资金开始分批进入混币服务。链上分析公司陆续发布报告,指出资金转移模式、时间规律与已知的朝鲜关联组织高度吻合;美国执法机构后续在相关制裁与通报中也采纳了同类判断。

被利用机制(原理级)。 这是一起典型的"密钥管理"事故而非"智能合约"事故。跨链桥的安全本质上等于"谁能签发放行指令"的安全。当门槛设为 2/5,攻击者的目标就从"找到代码漏洞"变成了"拿下任意两名签名人",后者往往通过定向钓鱼、伪造招聘邀约、恶意软件植入等社会工程手段完成,成本远低于攻破密码学。一旦两把私钥到手,攻击者发出的每一笔转账在合约看来都是完全合法的,链上没有任何异常可供识别。

资金流向与追回。 被盗资产被兑换为以太坊后,分数千笔小额转入混币服务,这种"碎片化 + 长时间摊薄"的转移手法是该类组织的典型特征。绝大部分资金未被追回。少量流入受监管平台的资金被冻结。

技术 vs 设计 vs 组织。 技术原因是私钥的存储与使用未达到与资产规模匹配的隔离标准;设计原因是 2/5 门槛严重不足,且没有为大额转出设置时间锁、限额与二次确认;组织原因是团队在桥的资产规模增长了几十倍之后,没有同步上调签名门槛和运维安全等级,安全配置停留在项目早期状态。

响应与补偿。 Harmony 暂停桥、公开悬赏、聘请取证团队,并提出通过增发原生代币的方式补偿受损用户。该方案在社区引发强烈反对,被认为是把损失转嫁给全体持币者,最终未获通过。补偿方案几经修改,实际赔付有限。桥服务长期停摆,Harmony 生态元气大伤。

法律与归因。 归因等级 B。多家独立链上分析机构结论一致,并与执法机构的公开通报相互印证,指向朝鲜关联的国家级黑客组织,但没有具体个人被起诉或定罪。这类归因在行业内已被广泛接受,也直接推动了对混币服务的制裁行动。

三方教训。 对开发者:多签门槛必须随托管资产规模动态上调,并为大额转出加时间锁与限额熔断;对项目方:签名人必须使用硬件隔离设备、地理分散、且彼此不知晓全部名单,同时要把定向钓鱼演练纳入常规安全流程;对用户:跨链桥的真实安全等级取决于其签名门槛与密钥管理,这些信息应当公开可查,查不到就当作高风险。

来源类型。 Harmony 官方声明与补偿提案、多家链上分析公司的归因报告、执法机构关于相关组织与混币服务的公开通报、社区治理讨论存档。


复盘24:Nomad "人人可复制"混乱洗劫(2022)

事件摘要。 2022 年 8 月 1 日,跨链桥 Nomad 在几个小时内被搬空约 1.9 亿美元。这起事件在加密史上独一无二之处在于:它不是一个黑客干的,而是几百个人干的。最初的攻击者演示了取款方法后,围观者只需复制那笔交易、把收款地址改成自己的,就能照样提走资金。链上出现了数百个"复制粘贴式"的提款地址,形成了一场公开的、无门槛的哄抢。

事发前系统结构。 Nomad 采用乐观验证模型:跨链消息先被"承诺",经过一段挑战期若无人提出异议即视为有效。目标链上的合约保存着一份已确认消息根的记录,提款时需要提供证明,合约检查该证明对应的消息根是否已被确认。桥经过审计,架构在当时被认为是较为先进的设计。事故发生前不久,团队进行了一次例行的合约升级。

时间线要点。 升级过程中,合约中记录"已确认消息根"的映射被初始化为一个空值,而这个空值随后被当作"有效且已确认"处理。换言之,任何一条根本没有对应真实跨链消息的提款请求,只要证明字段为空,就能通过验证。8 月 1 日晚,第一笔异常提款出现;几十分钟内,链上观察者注意到了这笔交易的模式并开始模仿;随后模仿者呈指数级增长,包括大量此前从未有过攻击行为的普通地址。团队在数小时后才成功协调暂停,此时桥内资产已所剩无几。事后 Nomad 公开设立回收地址,呼吁参与者归还。

被利用机制(原理级)。 这里的关键是"零值被当成合法值"。在很多智能合约实现中,一个从未被赋值的映射项会返回零,而如果代码把零解释为"某个有效状态",那么所有未被赋值的查询都会返回"通过"。Nomad 的验证逻辑正好落入了这个陷阱:升级把可信根设成了零,而验证函数认为"零根是已确认的",于是所有提款证明都自动有效。事件的破坏力被放大,则是因为区块链的完全公开性——第一笔攻击交易的完整数据对所有人可见,复现它不需要任何技术能力,只需要把其中一个地址字段替换掉。

资金流向与追回。 参与者身份构成极其复杂:既有专业攻击者,也有主动抢救资金准备归还的白帽,还有大量临时起意的散户。Nomad 设立回收地址后,最初数日回收了约 3600 万美元,此后陆续有人归还,累计追回比例约在总额的两至三成。相当一部分资金被专业攻击者经混币服务转出,无法追回。

技术 vs 设计 vs 组织。 技术原因是"零值等于有效"的经典实现陷阱;设计原因是关键安全常量的初始化与验证逻辑耦合过紧,且缺少"根为零时必须拒绝"的显式兜底;组织原因最刺眼——一次常规升级修改了信任根,却没有触发任何专门的安全复审,也没有部署余额异常告警,以至于桥被搬空数小时才有人按下暂停键。

响应与补偿。 Nomad 公开事故分析、设立回收地址、承诺对主动归还者不予追究,并与执法机构合作追踪拒不归还的地址。协议长期停摆后重启,向受损用户按回收比例分配赔付,并对未来收入做了赔付安排。整体补偿率远低于损失。

法律与归因。 归因等级 C/E 混合。参与者数量众多且身份分散,链上分析可以清晰列出每个受益地址,但绝大多数未被起诉。此案在法律讨论中提出了一个尖锐问题:当漏洞使资金"对所有人开放",跟风提取者的行为该如何定性?行业内至今没有统一答案,也几乎没有相关判例。

三方教训。 对开发者:任何验证函数都要对零值、空值、未初始化状态做显式拒绝,升级脚本必须包含关键常量的赋值断言;对项目方:合约升级要按"新部署"标准做完整安全复审,并配备实时的资金异常监控与快速暂停演练;对用户:不要因为"大家都在拿"就参与,链上记录永久可查,跟风提取在多数司法辖区都存在明确的法律风险。

来源类型。 Nomad 官方事故报告与回收公告、多家安全公司的技术分析、链上交易与受益地址记录、行业媒体的实时追踪报道。


复盘25:BNB Token Hub(2022,链停机争议)

事件摘要。 2022 年 10 月 6 日,BNB Chain 的跨链组件 Token Hub 被伪造的跨链证明骗过,攻击者凭空铸出约 200 万枚 BNB,账面价值约 5.66 亿美元。但真正被转移出去的只有约 1.1 亿至 1.37 亿美元——因为验证者们在事发一小时内协调停掉了整条公链。这次"拔网线式"止损保住了大部分资金,也把 BNB Chain 的去中心化程度推到了聚光灯下。

事发前系统结构。 BNB Chain 的跨链桥依赖一套 Merkle 证明验证机制,把信标链上的状态证明给智能合约链上的合约看,验证通过即可解锁或铸造资产。这套证明库来自较早期的实现,存在已知的实现层面缺陷。共识层面,BNB Chain 当时的活跃验证者仅有二十余个(总注册数更多但轮换有限),且大量由基金会或关联方运营——这意味着"协调停机"在技术上是可行的,在治理上则极具争议。

时间线要点。 10 月 6 日晚,链上出现两笔异常的跨链提款,各铸出 100 万枚 BNB。攻击者随即把资金分散到多条链上的借贷协议中,试图抵押借出稳定币以便变现。安全监控机构发出预警,BNB Chain 官方在约一小时内宣布暂停整条链的出块,冻结了留在链上的约 4.3 亿美元资产。攻击者已转出的部分约 1.1 亿至 1.37 亿美元散布在多条链上。10 月 7 日,团队完成漏洞修复并通过硬分叉恢复网络,同时宣布将被冻结资产纳入治理处置流程。

被利用机制(原理级)。 跨链证明的本质是"用一份密码学证据说明某件事在另一条链上真的发生过"。若证明库在构造与校验路径时存在不一致,攻击者就有可能构造出一份"数学上能通过校验、但并不对应任何真实事件"的证据。此类缺陷通常出现在证明结构的边界处理上——比如某些特殊形状的证明路径未被正确约束。合约拿到这份证据后,会诚实地按"事件真的发生了"去铸造资产。这不是私钥泄露,也不是逻辑写反,而是密码学证明库自身实现不严谨造成的信任根塌陷。

资金流向与追回。 已转出的资金分布在多条链的借贷协议与跨链通道中,部分被相关协议方主动冻结,部分经混币渠道转出。冻结在 BNB Chain 上的约 4.3 亿美元通过硬分叉与治理决议被永久锁定,实际净损失约 1.3 亿美元量级。

技术 vs 设计 vs 组织。 技术原因是证明验证库的实现缺陷;设计原因是把整条链的资产安全押在单一证明库上,且缺少铸造额度上限与异常铸造熔断;组织原因则是双面的——一方面,能在一小时内叫停整条链体现了极强的应急能力;另一方面,这份能力恰恰说明网络的实际控制权高度集中,与"去中心化公链"的宣称存在张力。

响应与补偿。 BNB Chain 快速停机、修复、硬分叉恢复,并未产生普通用户资产损失,因此不涉及大规模赔付。事后官方推动了多项改进:引入跨链桥的铸造上限与延迟机制、扩大验证者数量、并提出用链上治理来决定被冻结资金的处置,试图把这次"人治式救援"制度化为可预期的规则。

法律与归因。 归因等级 E。攻击者身份未被确认,未见公开起诉。事件引发的主要不是法律讨论,而是治理讨论:一条链在什么条件下可以停机?谁有权决定?被冻结的资产归谁?这些问题此后成为公链治理白皮书的常规章节。

三方教训。 对开发者:跨链证明库必须经过专门的密码学审计与差分模糊测试,不能仅做业务逻辑审计;对项目方:为任何"可铸造资产"的路径设置硬性上限与速率限制,让单次事故的最大损失可预估;对用户:理解你所使用的链在紧急情况下的真实治理结构——能救你的能力,通常也是能限制你的能力。

来源类型。 BNB Chain 官方事故说明与硬分叉公告、多家安全公司的证明库技术分析、链上交易与冻结记录、行业媒体关于停机争议的评论与后续治理提案。


复盘26:Mango Markets 预言机操纵与 Eisenberg 案(2022)

事件摘要。 2022 年 10 月 11 日,Solana 生态的衍生品协议 Mango Markets 被掏空约 1.14 亿美元。操作者事后公开实名承认,并称这只是"一次高度盈利的交易策略",因为他所做的每一步都在协议规则之内。这句话让本案成为整个行业最重要的法律试金石:如果攻击完全由合法交易构成,它到底是不是犯罪?后来的司法过程给出了一个曲折而未完的答案。

事发前系统结构。 Mango 允许用户以持仓的账面价值作为抵押借出协议金库中的资产。这些持仓的估值取自平台原生代币在几个交易场所的现货价格,而该代币市值小、流动性薄。协议代码经过审计,风控参数由治理设定,但对"抵押品本身是自家代币且流动性极差"这一结构性风险没有设置足够的借款上限或折价系数。

时间线要点。 10 月 11 日,操作者用两个自控账户在平台上对倒该代币的永续合约,一方大量做多、一方大量做空,形成巨额头寸;随后在流动性稀薄的几个现货市场同时买入,把该代币价格在短时间内从约 0.03 美元推高至约 0.91 美元。多头账户的账面权益随之暴涨,他据此借空了协议金库中几乎所有其他资产。当晚协议被暂停。数日后,他在链上发起治理提案,用手中大量该代币投票通过——内容是归还部分资金、协议不予追究、不提交执法。最终他保留约 4700 万美元,退回约 6700 万美元。10 月中旬,他在社交平台实名承认全部操作。

被利用机制(原理级)。 这是"薄流动性资产 + 账面估值抵押"的组合失效。任何以市价计算的抵押品,其安全性上限等于操纵该市价的成本。当一个代币只需要几百万美元就能被推高三十倍,而推高后可以借出上亿美元时,攻击的期望收益远高于成本,理性市场参与者迟早会做这件事。治理环节的失效同理:用被操纵资产投票,等于让攻击者自己给自己开赦免令。整个过程没有一行代码被绕过。

资金流向与追回。 通过治理提案退回约 6700 万美元,其余约 4700 万美元被其保留并部分转移。协议后续通过赔付计划向用户返还部分资产,但并未覆盖全部缺口。

技术 vs 设计 vs 组织。 技术原因基本不存在;设计原因是风控模型允许用自家薄流动性代币作为高额抵押,且缺少持仓集中度限制、动态折价与借款上限;组织原因是治理权与受影响资产同源,导致危机处置机制在攻击者手中失效,且团队在事发后被迫接受了一份对自己极其不利的"和解"。

响应与补偿。 Mango 暂停协议、接受治理提案换取部分回款,随后启动重启与赔付流程,用协议金库与未来收入分批补偿用户。风控上引入了对低流动性抵押品的严格折价、单账户借款上限和更保守的清算参数。协议规模此后大幅萎缩。

法律与归因。 归因等级 A——身份明确、本人公开承认、并被正式起诉。但判决走向一波三折:他于 2022 年 12 月被捕;2023 年多家监管机构提起民事指控;2024 年联邦陪审团就商品欺诈、市场操纵与电汇欺诈相关指控作出有罪认定;此后辩方以"地点管辖不当"及"相关罪名不适用于该行为"为由提出动议,2025 年主审法官推翻了其中的核心定罪,检方随后放弃重新审理相关指控。需要说明的是,他还因一项与本案完全无关的另案(涉及儿童性剥削材料)被判处刑期,该刑罚独立于市场操纵指控。整体来看,本案的核心法律问题——"规则内的操纵是否构成欺诈"——并未获得终局性的判例结论。

三方教训。 对开发者:抵押品估值必须结合流动性深度,为薄币种设置指数级递增的折价与硬性借款上限;对项目方:治理代币不能同时是主要抵押品,危机处置机制必须独立于可被操纵的投票权;对用户:所谓"规则内的合法策略"可能让你的存款一夜归零,也可能让操作者面临刑事指控——两边的不确定性都很大,不要把资金放在这种模糊地带。

来源类型。 Mango Markets 官方公告与治理提案存档、操作者本人的公开声明、监管机构起诉文书与法院裁定文件、多家安全与链上分析公司的技术复盘、法律媒体的庭审跟踪报道。


复盘27:Multichain 创始人失联与资金异动(2023)

事件摘要。 2023 年 7 月,曾经是跨链桥龙头的 Multichain 在毫无预警的情况下,从多条链的资金池中被转出约 1.26 亿美元。这不是一次典型的黑客攻击——链上没有漏洞被利用的痕迹,转账全部使用合法密钥签发。数日后,项目方公告揭开真相:公司创始人早在两个月前就已被执法部门带走,而整套多方计算节点的运行权限,实际上只掌握在他一个人手里。

事发前系统结构。 Multichain 对外宣称采用多方计算(MPC)架构:一组独立节点共同持有密钥分片,任何转账都需要多方协同签名,理论上不存在单点。但实际情况是,所有 MPC 节点运行在同一批由创始人个人控制的服务器上,节点私钥的备份与运维权限也集中在他手中。也就是说,宣称的"多方"在物理层面是"一方"。这一结构性差异从未被公开披露,也没有第三方验证过节点的独立性。此前社区曾多次质疑其治理不透明,均未获得实质回应。

时间线要点。 2023 年 5 月 21 日,创始人被中国警方带走,服务器与相关设备被一并带走;项目在此期间对外仍维持正常运营口径,仅以"技术升级"等理由解释部分服务异常。7 月 6 日起,多条链上的桥合约资金开始被大额转出,方向不明,社区哗然。7 月 14 日,Multichain 官方账号发布长文,承认创始人失联、服务器被接管、团队无法访问关键设施。此后又披露其亲属试图用其设备转移剩余资产,亦被带走。7 月下旬,Fantom 等重度依赖该桥的生态遭遇严重流动性外流。9 月,官方宣布永久停止运营。

被利用机制(原理级)。 这里不存在被"利用"的技术漏洞,而是一次架构宣称与实际部署严重不符所导致的必然崩塌。多方计算的安全性完全建立在"分片持有者相互独立"这一前提上;一旦所有分片都在同一个人的同一批服务器上,MPC 就退化成了一个普通的单私钥钱包,只是外表更复杂。当这个唯一控制点因任何原因(被捕、意外、胁迫)失效或易手,资产的去向就不再由协议决定。

资金流向与追回。 转出资金流向了若干新地址,此后大部分处于静止状态,既未被兑换也未被混币,这种"不动"的特征进一步支持了"资产被执法或第三方控制"而非"被典型黑客变现"的判断。用户资产绝大部分未被返还,跨链凭证代币在多条链上失去锚定并大幅折价。

技术 vs 设计 vs 组织。 技术原因几乎为零;设计原因是把去中心化架构做成了"形式上多方、物理上单点",缺少任何独立性验证机制;组织原因是全部致命的——单点人身依赖、无继任与灾备方案、危机发生后长达一个半月的信息隐瞒,让本可以有序退出的用户失去了全部撤离窗口。

响应与补偿。 项目方在披露后承认无力恢复运营,未能提供实质补偿。依赖该桥的多个生态自行推出了应急方案:部分协议为受影响的跨链凭证提供了兑换或救济通道,部分公链基金会动用自有资金部分回购。整体而言,用户损失基本自担。

法律与归因。 归因等级 D。有明确的官方声明指向"创始人被执法部门带走、设施被接管"这一事实链,但资金转移的实际执行主体、法律程序与最终处置从未有公开的司法文书佐证,也没有任何一方被公开起诉。这使得本案成为极少数"既非黑客攻击、也无司法结论"的重大损失事件。

三方教训。 对开发者:多方计算与多签的价值完全取决于参与方的物理与法律独立性,架构图不等于部署现实;对项目方:关键基础设施必须有可验证的分散性证明、明确的继任机制和灾备预案,创始人不可以是单点故障;对用户:宣称"去中心化"的桥要看得到验证者名单、节点分布与独立性证据,看不到就按"托管在一个陌生人手里"来评估风险。

来源类型。 Multichain 官方公告与后续声明、多家链上分析公司的资金流向报告、受影响公链生态的应急方案公告、行业媒体的连续调查报道。


复盘28:Curve/Vyper 编译器漏洞(2023,白帽与 MEV 竞速)

事件摘要。 2023 年 7 月 30 日,多个使用 Curve 稳定币兑换池的项目在同一天被连环攻破,合计损失约 7000 万美元。罕见之处在于,出问题的不是任何一个项目的代码,而是它们共同使用的编程语言编译器 Vyper——特定几个版本在生成防重入保护时存在缺陷,导致本应互斥的函数其实可以相互嵌套调用。这是智能合约史上第一次由编译器缺陷引发的大规模连锁事故。

事发前系统结构。 Curve 及其生态中的多个流动性池使用 Vyper 编写,并依赖语言内置的"防重入锁"装饰器保护关键函数。开发者的普遍认知是:只要给函数加上这个标注,就不可能在该函数执行途中被再次进入。这些池子大多经过审计,审计同样默认了编译器行为正确——毕竟审计的对象是源代码,而不是编译产物。受影响的版本是几个较旧但仍被广泛使用的编译器版本。

时间线要点。 7 月 30 日,多个池子在数小时内先后被攻击,包括某 NFT 借贷项目的 ETH 兑换池(约 1140 万美元)、某合成资产项目的池(约 1360 万美元)、另一合成资产池(约 200 万美元),以及 Curve 自身的原生代币兑换池(约 6100 万美元)。Vyper 团队迅速确认并公告受影响版本,呼吁全网自查。攻击进行期间,一个以抢跑闻名的最大可提取价值(MEV)机器人抢在攻击者之前完成了同样的操作,救下约 5495 枚 ETH,并在随后主动全额归还给 Curve——这次"白帽与攻击者在同一区块竞速"的场面成为当年最戏剧性的链上片段。

被利用机制(原理级)。 防重入锁的原理是:进入受保护函数时置一个标记,退出时清除,若发现标记已置位则拒绝执行。缺陷在于,特定编译器版本在处理多个受保护函数时,没有让它们共享同一个标记位,而是各自使用了独立存储位置。结果是:函数 A 执行到一半,通过向外部合约转账的时机触发回调,进入函数 B——而 B 检查的是自己的标记,看起来一切正常。于是攻击者可以在池子内部状态尚未更新完毕的中间时刻,让池子按过时的账目再做一次结算。源代码写得完全正确,错的是它被翻译成机器指令的方式。

资金流向与追回。 追回情况罕见地乐观。MEV 机器人归还的 5495 枚 ETH 直接回到 Curve。此后,几个受影响项目分别与攻击者展开公开谈判,多方最终以"归还本金、保留约一成作为漏洞赏金"的方式达成,大部分资金在数周内回流。整体追回率超过七成。但事故的次生影响更严重:Curve 原生代币价格暴跌,其创始人以该代币作抵押的巨额借贷逼近清算线,一度威胁到整个 DeFi 借贷市场的稳定,最终通过一系列场外大宗出售才化解。

技术 vs 设计 vs 组织。 技术原因是编译器实现缺陷,位于所有项目的信任链最底层;设计原因是行业把"语言内置安全特性"视为绝对可靠,几乎没有项目在合约层面再加一道独立的重入防护;组织原因是编译器这类公共基础设施的维护资源与其承载的资产规模严重不匹配,且缺乏"受影响版本自动预警"的行业机制。

响应与补偿。 Vyper 团队公开完整分析并发布修复版本,行业随后建立了针对编译器版本的批量排查工具。受影响项目通过谈判追回大部分资金,剩余缺口由各自金库与社区方案填补。Curve 生态则经历了数周的信心修复期。

法律与归因。 归因等级 E。多名攻击者身份均未确认,且因大部分资金在赏金框架下归还,未见起诉。归还的 MEV 机器人运营者同样保持匿名。

三方教训。 对开发者:不要把安全完全托付给语言特性,关键函数应在合约层面自行实现状态机式的防护;同时把编译器版本纳入依赖管理,锁定并跟踪其安全公告;对项目方:定期扫描自己所有已部署合约使用的编译器版本,建立"底层依赖出事时的快速排查清单";对用户:DeFi 的风险是分层叠加的,最底层的公共工具一旦出问题,会同时击中许多看似不相关的协议。

来源类型。 Vyper 团队官方安全公告与技术复盘、受影响项目各自的事故报告与谈判公告、多家安全公司的编译产物级分析、链上交易记录与归还交易备注。


复盘29:KyberSwap(2023,黑客"谈判"闹剧)

事件摘要。 2023 年 11 月 22 日,去中心化交易协议 KyberSwap 的集中流动性版本在多条链上同时被攻击,损失约 4650 万美元。技术上这是一次极其精巧的数学边界利用;但真正让这起事件被记住的,是攻击者随后在链上留下的"谈判条件"——他要求获得对 Kyber 这家公司的完全控制权,包括临时出任首席执行官、取得全部公司文件与资产、并给全体员工加薪五成。这份公然的荒诞要求让谈判彻底破裂。

事发前系统结构。 KyberSwap Elastic 采用集中流动性做市模型:做市商可以把资金集中在自选的价格区间内,协议用一套"刻度"(tick)系统记录每个区间的流动性边界,价格穿越刻度时增减可用流动性。这套机制的数学复杂度远高于传统恒定乘积做市,涉及大量定点数运算与取整。协议经过多轮审计,审计覆盖了主要业务路径,但对刻度边界处的极端取整行为未做穷尽验证。

时间线要点。 11 月 22 日晚,攻击在以太坊、Arbitrum、Optimism、Polygon、Base 等多条链上几乎同步发生,各池子被逐一抽空。KyberSwap 迅速发布预警,呼吁做市商撤出流动性。11 月 底,攻击者在链上留言,先称愿意谈判,随后抛出前述控制权要求,并给出所谓的"最后期限"。Kyber 官方公开提出返还资金可获一成赏金,被拒。谈判无果,攻击者开始把资金跨链转移。次年,KyberSwap 母公司宣布大幅裁员,并推出面向受损用户的赔付与债权方案。

被利用机制(原理级)。 集中流动性协议必须在"价格"与"刻度"之间反复换算,而这两个量分别用不同精度的定点数表示,换算过程涉及取整。若在某个极窄的价格区间内精心安排一系列合法的兑换与流动性操作,就有可能让协议在穿越刻度时对同一份流动性重复计入——账本上出现了并不存在的可用资金。攻击者随后把这份"凭空多出来的流动性"兑换成真实资产。这类问题的隐蔽性在于:每一步单独看都符合数学定义,只有在特定边界组合下累计误差才会被放大成资金缺口,常规审计与模糊测试很难覆盖到这个角落。

资金流向与追回。 攻击者将资金跨链汇集后经混币渠道转移,未被追回。少量试图流入受监管平台的资金被拦截。KyberSwap 用自有金库与后续收入向受损做市商分批赔付,覆盖了部分损失。

技术 vs 设计 vs 组织。 技术原因是定点数换算在刻度边界处的精度处理不严谨;设计原因是把高复杂度数学模型直接部署到承载数千万美元的生产环境,却没有配套的形式化验证与不变量监控(例如"池内实际余额必须始终大于等于账面流动性"这类可实时检查的硬约束);组织原因是协议同时在五条链上部署了同一份未经形式化验证的代码,把单点缺陷放大成了全域事故。

响应与补偿。 Kyber 快速预警、协助做市商撤资,公开提出赏金但拒绝接受敲诈式条件——这一立场获得行业普遍支持。团队随后推出赔付方案,以现金、代币与债权凭证组合形式向受损方偿付,并对协议做了大幅精简。公司层面经历了显著收缩。

法律与归因。 归因等级 E。攻击者身份未被确认,未见起诉。其提出的"控制权"要求在法律上毫无实现可能,业内普遍认为这更像是一场表演或试探,而非真实谈判意图。

三方教训。 对开发者:涉及定点数与取整的核心数学必须做形式化验证,并在合约中植入可实时校验的不变量断言;对项目方:多链同步部署会把单点缺陷变成全域灾难,应采用分批上线与资金上限爬坡;面对攻击者的谈判要求,要坚持公开、有底线,不与敲诈条件妥协;对用户:集中流动性做市的收益更高,但其数学复杂度也意味着更大的未知风险,做市资金不宜过度集中在单一协议。

来源类型。 KyberSwap 官方公告与赔付方案、攻击者在链上留下的公开留言、多家安全公司的数学层技术分析、链上交易记录、行业媒体对谈判过程的报道。


复盘30:Ledger Connect Kit 供应链投毒(2023)

事件摘要。 2023 年 12 月 14 日,硬件钱包厂商 Ledger 的一个开源前端组件被植入恶意代码。这个组件被大量知名去中心化应用直接从公共内容分发网络引用,于是在短短几小时内,数十个完全无辜的网站同时变成了钓鱼站点。用户访问的还是熟悉的域名、点的还是熟悉的按钮,签下的却是清空自己钱包的授权。直接损失约 60 万美元,金额在本卷中最小,但它暴露的攻击面可能是最宽的一个。

事发前系统结构。 Ledger 提供的 Connect Kit 是一个用于连接硬件钱包与网页应用的 JavaScript 库,通过公共包管理平台发布,并由内容分发网络托管。大量应用在引用时使用了宽松的版本范围写法,意味着只要发布新的小版本,用户浏览器下次加载时就会自动拉取最新代码,无需应用方做任何操作。该库的发布权限绑定在开发者账号上,账号本身缺少强制的多因素保护与发布审批流程。

时间线要点。 12 月 14 日,一名已离职的前员工遭到钓鱼攻击,其仍未被吊销的包管理平台账号凭据落入攻击者手中。攻击者随即连续发布了三个带有恶意代码的小版本。恶意代码是一个成熟的"钱包清空器",在页面加载后拦截用户的交易与授权请求,替换为把资产转给攻击者的请求。约五小时内,多个知名应用受到波及。Ledger 在发现后快速下架恶意版本、发布干净版本,并公开通报。稳定币发行方随后冻结了攻击者的部分地址。

被利用机制(原理级)。 这是纯粹的软件供应链攻击,与区块链本身无关。现代前端应用普遍依赖数十甚至上百个第三方包,其中任何一个的发布账号被攻破,都可能把恶意代码送进所有下游用户的浏览器。宽松版本范围加上 CDN 自动分发,让传播是即时且无需下游同意的。恶意代码所做的事情,则回到了本卷复盘20 的老问题:利用用户无法看懂交易签名内容这一根本弱点,把"存款"的签名请求偷换成"授权转走一切"。

资金流向与追回。 直接损失约 60 万美元,其中部分为稳定币,被发行方冻结。Ledger 公开承诺对确认受损的用户进行赔付,并与相关行业方合作追踪剩余资金。相对于其他案例,本次损失金额小,主要归功于响应速度快、恶意版本在线时间短。

技术 vs 设计 vs 组织。 技术原因是发布账号凭据被钓取且无二次防护;设计原因是"CDN 直连 + 宽松版本范围"让上游一次误发布就能即时影响全网,缺少产物完整性校验这类下游防护;组织原因最关键——离职员工的发布权限未被及时吊销,这是最基础的账号生命周期管理失误,且发布流程没有多人复核。

响应与补偿。 Ledger 在数小时内完成止血,公开完整时间线与根因说明,承诺赔付受损用户,并宣布改造发布流程:引入更严格的账号权限管理、发布多方审批、以及推动行业采用产物完整性校验。多个受波及的应用也借此机会检查了自己的依赖引用方式。

法律与归因。 归因等级 C。所用的钱包清空工具被安全机构识别为一个已知的、以服务形式对外提供的恶意软件家族,行业对其运营者有较一致的判断,但具体实施本次投毒的个人身份未被司法确认,未见公开起诉。

三方教训。 对开发者:锁定依赖的确切版本、启用子资源完整性校验、自托管关键脚本而非直连第三方 CDN,并把包发布视为最高等级的特权操作;对项目方:建立员工离职时的凭据吊销清单,所有发布账号强制多因素认证与多人审批;对用户:把签名内容看懂当作硬性习惯,使用能解析交易意图的钱包,大额操作前先在小额上验证,并对长期不用的授权定期清理。

来源类型。 Ledger 官方事故通报与赔付声明、包管理平台的版本发布记录、多家安全公司对恶意脚本家族的分析报告、受波及应用的各自公告、稳定币发行方的冻结声明。


卷二小结

把这十五起事件横向排开,会看到一条清晰的演进曲线:2017 年的 Parity 事故还是纯粹的代码权限问题;2020 年的 bZx 和 Harvest 把攻击面推向了经济模型;2021 年的 Poly Network 与 BadgerDAO 分别揭示了跨链权限与链下发布链路;2022 年的 Beanstalk、Harmony、Nomad、BNB Token Hub、Mango 则集中暴露了治理、密钥、升级流程与风控参数这些"非代码"层面的软肋;到了 2023 年,Multichain 的组织崩塌、Curve 的编译器缺陷、Ledger 的供应链投毒,攻击已经深入到了信任链的最底层与最上层。

一个反复出现的规律是:技术原因通常只占三分之一,设计原因与组织原因合起来才是主因。 十五起中真正因"某行代码写错"而全责的不足三分之一,更多的是"代码严格按设计执行了,但设计本身建立在一个已经不成立的假设上",或者"团队知道该做什么,但增长压力、人手不足、流程缺位让它没被做"。

另一个规律是:追回率与攻击者的变现路径高度相关,而不是与技术能力相关。 Poly Network 全额归还、Curve 追回七成以上,共同点是攻击者在公开账本上无处变现且面临可谈判的出路;而 Harmony、Beanstalk 这类由专业组织实施、直接进入混币渠道的案例,追回率接近于零。这提示了一个实用结论:在事故响应中,尽快封堵变现通道并保持公开、有底线的沟通,往往比技术追查更有效。

(本卷复盘均基于公开信息整理,不含任何可复现的攻击步骤或代码。所有金额为事发当时的近似口径,仅供理解规模量级之用。)