报告 #3425308 - 通过 memo 回调燃料消耗对 IBC 中继器进行经济型拒绝服务攻击(Griefing)
报告人: tychebe 提交至: Cosmos 提交时间: 2025 年 11 月 14 日,上午 9:04 (UTC)
影响摘要
此漏洞允许攻击者绕过中继器的模拟防御,迫使无需许可的中继器通过 memo 回调功能执行计算成本高昂但“成功”的交易。这造成了一种不对称的经济攻击,即中继器的成本(例如,约 1,000,000 单位燃料)远远超过其利润,从而导致财务损失。中继器将被迫停止为受影响的 IBC 通道提供服务以避免破产,从而导致所有依赖该通道回调的应用程序遭到拒绝服务攻击。
重现步骤
- 识别回调燃料限制:攻击者首先检查链的应用程序设置文件(例如,
app/app.go)以找到 IBC 回调中间件的硬编码燃料限制。我已确认在主应用配置中此值设置为 1,000,000 单位燃料。 - 部署恶意“燃料消耗器”合约:攻击者部署一个 EVM 智能合约,该合约执行计算成本高昂的操作(例如,循环、哈希计算),旨在消耗略低于限制的燃料(例如,990,000 单位燃料),然后返回“成功”。此合约不得因“燃料不足”而失败。
- 发送带有恶意 Memo 的 IBC 数据包:攻击者发送一个标准的 IBC 数据包(例如,
MsgTransfer),并在memo字段中指定“燃料消耗器”合约的地址作为源回调。 - 绕过中继器模拟:中继器机器人获取此数据包的确认消息(
MsgAcknowledgement)并运行模拟。由于回调消耗了 990,000 单位燃料(低于 1,000,000 的限制)并返回“成功”,模拟通过,错误地将交易识别为安全。 - 中继器遭受财务损失:中继器广播“成功”的交易。链执行该交易,包括消耗 990,000 单位燃料的回调。中继器必须支付全部燃料成本(约 1,000,000 单位燃料),但仅收到其标准费用(如果未使用 ICS-29,则为 0;如果使用,则约为 300,000 单位燃料)。
- 结果(Griefing):攻击者可以重复此过程,以极低的成本耗尽中继器的资金,迫使中继器放弃该通道。
缓解措施
- 降低燃料限制:最简单的缓解措施是将
app/app.go中的硬编码DefaultGasLimitForCallback从 1,000,000 大幅降低到更接近中继器标准利润的值。 - 实施动态燃料机制(更佳):更稳健的解决方案是要求原始数据包的发送方明确定义(并支付)其回调将使用的最大燃料,类似于 ICS-29 费用。
- 更智能的模拟:中继器客户端可以更新为不仅检查“成功”,还报告模拟消耗的总燃料量。然后,中继器可以设置本地策略来拒绝消耗了无利可图燃料量的“成功”交易。
参考资料
- ICS-29 费用中间件:理解中继器应如何获得报酬(以及为何其利润通常为 0 或很低)是理解此经济攻击的关键。
- 区块链 Griefing 攻击:这是 Griefing 攻击的经典示例,攻击者的目标不是直接获利,而是对另一方造成财务损害以破坏网络。[来源:scsfg.io - 智能合约安全领域指南]
影响
- 中继器立即破产:任何服务于此链启用了回调的通道的无需许可中继器都将迅速耗尽资金并被迫关闭。
- 通道完全拒绝服务:当中继器停止为该通道服务时,所有依赖 IBC 回调的跨链应用程序(例如,跨链 DeFi、NFT 转账)将停止运行,从而有效地冻结资产和操作。
- 信任丧失:此攻击破坏了去中心化中继器网络的基本经济激励,表明该链在经济上不安全,无法提供服务,并损害了连接到此链的整个 IBC 生态系统的信任。
cozartshmoopler(Cosmos 工作人员) 关闭了报告并将状态更改为“不适用”。 2025 年 11 月 17 日,下午 3:35 (UTC)
中继并不能保证盈利,因此这不属于我们计划的范畴。
tychebe 请求披露此报告。 2025 年 11 月 17 日,下午 5:19 (UTC)
我提交此报告是因为我评估它可能对项目构成潜在的重大问题。既然团队已评估此问题为轻微或不重要,我相信不会反对其公开披露,对吗?我恳请公开披露此报告。
cozartshmoopler(Cosmos 工作人员) 同意披露此报告。 11 天前 此报告已被披露。 11 天前
报告时间: 2025 年 11 月 14 日,上午 9:04 (UTC) 报告人: tychebe 报告至: Cosmos
参与者: N/A 报告 ID: #3425308 严重性: 高 (8.6) 披露时间: 2025 年 12 月 18 日,下午 8:50 (UTC) 弱点: 不受控制的资源消耗 CVE ID: 无 赏金: 无 账户详情: 无