d doeda-zogt.xyz
📅 2026-05-24T06:12:20.837210+00:00 🔄 2026-05-24T15:30:34.650770+00:00

📘Rust合约漏洞案例复盘:从真实事故学到的五条安全准则

本文复盘三起Rust合约漏洞案例,提炼出五条可直接落地的安全准则,并结合[[Binance]]生态项目应对经验给出风险预案建议。

Rust合约漏洞案例 - Rust合约漏洞案例复盘:从真实事故学到的五条安全准则
📷 主题配图

学习漏洞案例是提升合约安全意识最直接的路径。本文挑选三起公开的 Rust 合约真实事故复盘,提炼出五条可直接落地的安全准则。这些案例发生时给项目带来的损失从几十万到上亿美元不等,比抽象的安全教科书更能让你警醒,也比刷BN交易所K线更值得花时间。

一、Mango Markets 价格操纵

2022 年 10 月,Mango Markets 被攻击者通过操纵 MNGO 现货价格、再以高位作为抵押品借空合约金库,损失约 1.1 亿美元。漏洞本质:抵押品估值依赖外部 oracle,oracle 又依赖低流动性现货市场,攻击者用百万美元就能拉爆估值。

准则一:抵押品估值不能依赖单一 oracle,必须用 TWAP 或多源中位数。同时对于流动性极差的资产,要限制最大抵押率,宁可少做生意也要避免极端套利空间。和必安交易所那种深度交易对相比,链上 oracle 容错空间小得多。

二、Wormhole 跨链桥伪造签名

2022 年 2 月,Wormhole 因为 Solana 端 signature verification 缺陷,被攻击者伪造 guardian 签名提走 12 万枚 wETH。漏洞本质:Solana 上的 secp256k1 校验调用了一个已废弃的系统调用,导致校验被绕过。

准则二:系统调用必须使用文档明确推荐的版本,废弃 API 即便编译过也不能用。审计时要检查每一次 invokeinvoke_signedsecp256k1_recover 的目标地址与参数。这种「系统调用一致性」检查是审计公司最容易遗漏的地方,开发团队自己要顶上。

三、Cashio 无限增发

2022 年 3 月,Cashio 协议因为 CPI 调用前缺少账户类型校验,被攻击者通过传入伪造的抵押品账户铸造无上限的 CASH 代币,损失约 5000 万美元。漏洞本质:合约信任了 CPI 调用者传入的账户,没有检查账户的 owner 字段。

准则三:所有外部传入的账户都要校验 owner。Anchor 用 Account<info, T> 而不是 AccountInfo<info> 即可获得自动校验,但用 UncheckedAccount 时必须手动写 require!(account.owner == &SPL_TOKEN_ID)。这条规则在BN官网生态里的桥接合约审计报告里反复出现,你的合约也要遵守。

四、提炼的五条安全准则

把三起案例的教训扩展为通用准则:1)抵押品估值多源、流动性差的资产限额;2)系统调用使用最新推荐版本;3)所有账户校验 owner 与类型;4)算术运算用 checked_* 系列;5)权限变更先发预公告再实施。

这五条准则覆盖了过去三年 80% 的 Rust 合约重大事故。在写合约时把它们做成 lint,让代码不满足条件就编译警告,是把准则固化的最佳方式。

五、事故后的应急

即便最严谨的合约也可能出事故。事故响应分四步:1)立即触发 pause 指令冻结合约;2)通过多签发布公告与社区沟通;3)成立技术小组追溯链上动作;4)出报告说明损失计算与补偿方案。

响应速度直接决定项目能否重建社区信任。Wormhole 在事故后 24 小时由 Jump 注资补全损失,仍然延续运营;许多协议响应慢、信息不透明,事故后两个月就完全死亡。和B安交易所那种「立刻冻结可疑交易、24 小时内出公告」的应急标准学习,把响应预案写成 runbook,每个季度演练一次。把这些 Rust合约漏洞案例当作镜子,你的项目才能少走十年弯路。