
Hyperlane的速率限制ISM和Hook中的访问控制缺陷
Sujith Somraaj
摘要
在审查Hyperlane的智能合约代码库时,我发现其速率限制实现中存在一个严重漏洞,攻击者只需极少的努力和成本,即可完全关闭跨链代币转账和消息验证。
什么是Hyperlane?
Hyperlane是一个无需许可的互操作性层,可实现安全的跨链通信。它使用各种安全机制,包括速率限制,以防止滥用并确保系统稳定性。但是,其速率限制实现中的一个基本缺陷会产生重大漏洞。
漏洞:公共速率限制消耗
问题在于Hyperlane的RateLimited合约,特别是在validateAndConsumeFilledLevel()函数中。此函数实现了用于速率限制的Token桶算法,但被标记为public,没有任何访问控制:
function validateAndConsumeFilledLevel( uint256 _consumedAmount ) public returns (uint256) { uint256 adjustedFilledLevel = calculateCurrentLevel(); require(_consumedAmount <= adjustedFilledLevel, "RateLimitExceeded"); // Reduce the filledLevel and update lastUpdated uint256 _filledLevel = adjustedFilledLevel - _consumedAmount; filledLevel = _filledLevel; lastUpdated = block.timestamp; emit ConsumedFilledLevel(filledLevel, lastUpdated); return _filledLevel; } 问题:任何人都可以直接调用此函数并消耗所有可用的速率限制容量,从而有效地执行拒绝服务攻击。
但是,继承此函数的合约从未覆盖它或添加任何适当的访问控制。
影响分析
此漏洞会影响两个关键组件:
1. RateLimitedHook
影响:阻止发送合法的代币转账
持续时间:最多1天(速率限制重新填充的DURATION常量)
攻击者成本:最低 gas 费用
2. RateLimitedIsm
影响:阻止合法的消息验证
持续时间:最多1天,直到速率限制自然重新填充
可重复性:可以持续执行攻击
攻击场景
以下是攻击者可能利用此漏洞的方式:
监控速率限制:调用
calculateCurrentLevel()以检查可用容量耗尽限制:使用全部可用金额调用
validateAndConsumeFilledLevel()重复:随着速率限制重新填充,继续攻击以维持持久的DoS
// 攻击演示 uint256 availableCapacity = rateLimitedHook.calculateCurrentLevel(); rateLimitedHook.validateAndConsumeFilledLevel(availableCapacity); // Now filledLevel = 0, blocking all legitimate transfers 现实世界的后果
此漏洞可能使攻击者能够:
停止跨链操作:长时间阻止链之间的所有代币转账
中断协议操作:阻止消息验证,破坏核心功能
经济损失:迫使用户等待或支付更高的 gas 价格来竞争
声誉风险:损害用户对协议可靠性的信任
竞争优势:竞争对手可以利用这一点来破坏Hyperlane的运营
修复方法:
Hyperlane团队通过实施适当的访问控制措施来解决了该问题。
fix: remove public fn from RateLimited library (#6355) · hyperlane-xyz/hyperlane-monorepo@46bb080
Description
Fixes a bug which allowed anyone to conduct a denial of service attack on the `RateLimitedHook` and `RateLimite…
github.com
经验教训
此漏洞突出了几个重要的安全原则:
最小权限原则:函数应具有最小的必要可见性
按设计进行访问控制:关键函数必须实施适当的授权检查
CVSS 分数:可能为 8.5+(高)
纵深防御:速率限制应与其他安全机制结合使用
彻底的测试:安全测试应包括对抗性场景
负责任的披露
此漏洞已负责任地披露给Hyperlane团队,使他们能够在公开披露之前解决该问题。由于Immunefi的漏洞赏金计划不涵盖该问题,因此未支付赏金。
Hyperlane的开发人员(或)集成商在使用这些合约时应格外小心,因为这些合约未充分包含在漏洞赏金计划中,可能包含漏洞。
漏洞提交

hyperlane_rate_limit.md
GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
- 原文链接: mirror.xyz/sujithsomraaj...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~