横跨近一个月的跨链攻击,Allbridge被黑,损失约19万美元"

admin 2026-10-16 11:11:23 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

横跨近一个月的跨链攻击,Allbridge被黑,损失约19万美元

子午猫
子午猫

网络侦查研究院

2026年9月22日 06:16
湖南

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

一、背景与前置知识:Circle CCTP 如何转账

2026年8月19日,知名跨链桥项目 Allbridge 遭到攻击,损失约 19万美元;本次攻击却横跨接近一个月才完成。理解这次攻击需要先理解 Circle 的 CCTP 协议:它的基本做法是在源链销毁 USDC、在目标链重新铸造同等数量的 USDC。正常流程为:源链 TokenMessenger 销毁 USDC → Circle MessageTransmitter 认证并转发消息 → 目标链 Circle TokenMessenger 接收消息 → 验证后铸造 USDC → Router 看到真实到账后再把 USDC 转给用户。其中 MessageTransmitterV2 会对完整消息出具 attestation(Circle 对指定跨链消息签名证明),但这个证明只能说明消息内容经过 Circle 认证,不能单独说明消息里写的金额已经真实发生转移。

二、根本原因:缺失的三项检查

在 Allbridge 的 CCTPTokenMessenger 合约中,接收跨链消息的 receiveCctpMessage 函数缺少对 CCTP 消息头中 sender 字段是否与远端 TokenMessenger 相等的检查,recipient 字段也没有检查是否等于 Circle 的 TokenMessengerV2 合约,导致 MessageTransmitterV2.receiveMessage 会把转发的跨链消息交给攻击合约来判断代币是否铸造成功;由于本合约中没有再检查 Router 的 USDC 余额在记账前是否真实增加,合约直接信任了攻击者构造的消息中的金额,最终将其记账成可付款余额(hookData 中 messageHash 对应的 receivedTokenAmount 数值)。此次 hookData 中也没有提供任何检查保护——Router 执行付款时会根据调用参数重新计算 messageHash,再查询该 hash 先前的内部入金余额,而攻击者可在 Polygon 发消息前离线算好同一组参数对应的 hash,再把 messageHash 放进跨链消息的 hookData 中,匹配的是攻击者自己创建的内部记录,与真实资产结算无关。

三、攻击步骤:24天等待 + 闪电贷补足

①2026年7月26日,攻击者提前在 Polygon 上直接调用 Circle MessageTransmitterV2 的 sendMessage 函数(通用跨链消息发送操作),交易产生 MessageSent 事件但实际没有发生 USDC 销毁;消息被填成 CCTP 风格数据(源域 Polygon、目标域 Base、声明金额 1,000,000 USDC、feeExecuted 为零、destinationCaller 指向 Allbridge 的 CCTPTokenMessenger,消息头 recipient 设为攻击者自己的合约,正文 sourceSender 设为配置里的远程 Messenger 地址,并把提前算好的 Router messageHash 放进 hookData),Circle 随后按协议签发 attestation。②攻击者等待约 24天——因为 Base Router 是转发路由、平时不长期持有大额流动性;直到 8月19日 Allbridge relayer 刚把一笔真实 CCTP 入金的约 191,112 USDC 铸到 Router(余额约 191,156 USDC),攻击者在真实入金发生后六秒开始执行正式攻击交易。③攻击合约先调用 receiveCctpMessage(destinationCaller 与 sourceSender 检查均由攻击者控制构造、均通过),再调用 Circle MessageTransmitterV2 的 receiveMessage,其中根据消息头 recipient 回调攻击合约,攻击合约直接返回成功、并未执行预期的铸币操作;而 Allbridge 也没有再次确认 Router 余额、没有检查被回调的目标合约是否等于 Circle TokenMessengerV2,直接把 amount - feeExecuted 写入 receivedMessages[messageHash],生成一笔 1,000,000 USDC 的内部 credit。

四、补足余额与获利

④由于假消息声明 1,000,000 USDC 而 Router 当时只有约 191,156 USDC,攻击者先通过 Aave 闪电贷 为 Router 提供 808,844 USDC,让余额暂时达到声明金额。⑤随后调用 Router 的 receiveToken 处理结算:Router 重新计算 hash 得到与 hookData 中一致的 messageHash,只检查该 messageHash 对应的 receivedTokenAmount 记录是否大于零,就视为已收到真实入金;扣除 0.1% 手续费后将 999,000 USDC 直接转给攻击合约。⑥窃取后向 Aave 归还 808,844 USDC 本金与约 404 USDC 闪电贷手续费,最终留下约 189,751 USDC 完成获利,基本清空了 Router 的 191,156 USDC(损失主要来自刚到达、尚未转给用户的真实跨链入金)。有趣的是,Router 收取的 1,000 USDC 费用,后来被其他攻击者用相同手法取走。

五、慢雾建议:守住三条边界

核心问题是 Allbridge 缺少对跨链消息合理性的检查——Circle 的 attestation 只能证明消息内容未被篡改,并不能证明跨链消息真实触发过代币的燃烧或铸造。慢雾安全团队建议项目方修复时同时守住三条边界:①消息头中的 sender 参数必须对应受信任的源端组件合约;②消息头中的 recipient 参数必须限制为目标链的 Circle TokenMessengerV2 合约;③只有在 Router 的 USDC 余额确实被铸造增加后才能建立可兑现的入金记录。

情报价值:这是一份高质量的跨链桥攻击复盘,对涉虚拟币案件研判有直接参考价值。启示:一是\"attestation 有效 ≠ 资产真实到账\"是跨链协议的核心信任假设瑕疵,攻击者可用\"合法签名 + 伪造语义\"的组合绕过销毁/铸造环节,提示审核跨链资金流时不能只看\"消息已认证\",必须核对链上真实资产变动;二是攻击者\"提前 24 天构造消息、等待真实入金后 6 秒发动、用闪电贷临时补足余额\"的精算手法,显示攻击已高度金融工程化,链上取证须回溯\"消息创建—attestation—真实入金—攻击执行\"的完整时间线;三是\"消息头 sender/recipient 未校验 + Router 未核验真实余额\"属于典型\"信任外部输入\",与此前多起桥攻击同源,可作为同类案件定性与风险提示的技术要点。

来源:慢雾安全团队 / 慢雾科技(2026-08-22 10:00


横跨近一个月的跨链攻击,Allbridge被黑,损失约19万美元" 网络安全文章

横跨近一个月的跨链攻击,Allbridge被黑,损失约19万美元"

本文详细分析了Allbridge跨链桥攻击事件,攻击者利用CCTP协议信任假设缺陷,通过伪造跨链消息绕过销毁铸造环节,等待24天后在真实入金后6秒发动攻击,结合闪电贷补足余额,最终获利约19万美元。根因是合约缺少对消息头sender和recipient字段校验,Router未核验真实余额。建议修复时守住三条边界:校验sender和recipient参数,确保Router余额真实增加。
MinIO镜像一夜消失,五天后续上来的这个3.2万star项目救了自建存储的人" 网络安全文章

MinIO镜像一夜消失,五天后续上来的这个3.2万star项目救了自建存储的人"

MinIO官方镜像从DockerHub消失后,RustFS1.0作为Apache2.0协议、3.2万star的S3兼容存储项目成为替代方案。文章详述了从MinIO迁移的完整路径,包括Docker部署、mcmirror同步迁移流程及生产环境检查清单。关键提醒:磁盘格式兼容仍处预览阶段,加密对象无法互通,迁移需提前规划。建议先在测试环境验证再全面切换。
阿里终面:10亿数据如何快速插入MySQL?" 网络安全文章

阿里终面:10亿数据如何快速插入MySQL?"

本文针对阿里终面中10亿数据快速导入MySQL的经典问题,提出系统化解决方案。核心结论为单表容量上限约2000万条,需分库分表至100张表。关键策略包括:采用批量写入与事务保证可靠性、优先顺序主键写入、权衡InnoDB与MyISAM引擎、通过配置动态调整并发度、使用BufferedReader逐行读取文件、以文件后缀加行号设计主键保证有序与幂等、利用Redis记录任务进度实现断点续传。方案强调灵活配置与线上实测调优。
评论:0   参与:  0