通过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的自动化模糊测试发现。
参考信息
- GHSA-q36x-r5x4-h4q6
- https://nvd.nist.gov/vuln/detail/CVE-2022-0618
- apple/swift-nio-http2@ac2a5af
严重程度
高危 - 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百分位)