作者在 Hyperlane 的智能合约代码库中发现了一个严重漏洞,该漏洞存在于其速率限制的实现中,攻击者可以以极小的成本完全关闭跨链Token传输和消息验证,Hyperlane 团队通过实施适当的访问控制措施解决了该问题。
Hyperlane的速率限制ISM和Hook中的访问控制缺陷
Sujith Somraaj
在审查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天(速率限制重新填充的DURATION常量)
攻击者成本:最低 gas 费用
影响:阻止合法的消息验证
持续时间:最多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
Fixes a bug which allowed anyone to conduct a denial of service attack on the `RateLimitedHook` and `RateLimite…
github.com](https://github.com/hyperlane-xyz/hyperlane-monorepo/commit/46bb080551c9c2d5451eaa601113ecddcff311ca)
此漏洞突出了几个重要的安全原则:
最小权限原则:函数应具有最小的必要可见性
按设计进行访问控制:关键函数必须实施适当的授权检查
CVSS 分数:可能为 8.5+(高)
纵深防御:速率限制应与其他安全机制结合使用
彻底的测试:安全测试应包括对抗性场景
此漏洞已负责任地披露给Hyperlane团队,使他们能够在公开披露之前解决该问题。由于Immunefi的漏洞赏金计划不涵盖该问题,因此未支付赏金。
Hyperlane的开发人员(或)集成商在使用这些合约时应格外小心,因为这些合约未充分包含在漏洞赏金计划中,可能包含漏洞。
[
hyperlane_rate_limit.md
GitHub Gist: instantly share code, notes, and snippets.
gist.github.com](https://gist.github.com/sujithsomraaj/dd246f9e8701a2735887aed569f9b43d)
- 原文链接: mirror.xyz/sujithsomraaj...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!