HTTP/2协议漏洞解析:通过HEADERS帧填充实现拒绝服务攻击

本文详细分析了CVE-2022-0618漏洞,该漏洞存在于swift-nio-http2库中,攻击者可通过特制HTTP/2帧触发解析错误导致服务崩溃,属于高危拒绝服务漏洞,影响1.0.0至1.19.2版本。

通过HTTP/2 HEADERS帧填充实现拒绝服务攻击

漏洞详情

包名: swift
项目地址: github.com/apple/swift-nio-http2 (Swift)

受影响版本: >= 1.0.0, < 1.20
已修复版本: 1.20

漏洞描述

使用swift-nio-http2的程序容易受到拒绝服务攻击,攻击者通过发送特制的HTTP/2帧实现。此漏洞影响从1.0.0到1.19.2的所有swift-nio-http2版本,已在1.20.0及后续版本中修复。

该漏洞由解析HTTP/2 HEADERS或HTTP/2 PUSH_PROMISE帧时的逻辑错误引起,当帧包含填充信息但没有任何其他数据时会出现此错误。该逻辑错误导致帧大小解析混乱,进而引发解析错误,最终导致整个进程立即崩溃。

发送带有HTTP/2填充信息的HEADERS帧或PUSH_PROMISE帧不需要特殊权限,因此任何HTTP/2连接对等方都可以发送此类帧。对于客户端而言,这意味着它们连接的任何服务器都可能发起此攻击。对于服务器而言,任何被允许连接到它们的用户都可能发起此类攻击。

此攻击成本极低:发送特制帧所需的资源非常少。对可用性的影响很高:接收到该帧会立即导致服务器崩溃,丢弃所有进行中的连接,并需要重新启动服务。攻击者可以轻松重复发送特制帧,因此攻击者只需很少资源即可实现严重的拒绝服务。

该攻击本身不具有任何机密性或完整性风险:swift-nio-http2在内存安全代码中解析帧,因此崩溃是安全的。然而,突然的进程崩溃可能导致服务中的不变量被违反,因此此攻击可能被用于触发具有机密性或完整性风险的错误条件。

如果能够阻止不受信任的对等方与服务通信,可以降低此风险。但许多服务无法采用此缓解措施。

该问题通过重写解析代码以正确处理相关条件而得到修复。该问题由oss-fuzz的自动化模糊测试发现。

参考信息

严重程度

高危 - CVSS总体评分:7.5/10

CVSS v3基础指标

  • 攻击向量:网络
  • 攻击复杂度:低
  • 所需权限:无
  • 用户交互:无
  • 范围:未更改
  • 机密性:无影响
  • 完整性:无影响
  • 可用性:高影响

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

EPSS评分

1.019%(第76百分位)

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计