通过HTTP/2 HEADERS帧填充实现的拒绝服务攻击
漏洞概述
CVE-2022-0618是一个影响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帧不需要特殊权限
- 客户端影响:任何连接的服务器都可能发起此攻击
- 服务器影响:任何被允许连接的客户端都可能发起此攻击
攻击特征
- 低资源消耗:发送特制帧所需的资源极少
- 高可用性影响:接收帧会立即导致服务器崩溃,中断所有进行中的连接,需要服务重启
- 易于重复攻击:攻击者可轻松重复发送特制帧,用极少资源实现显著的拒绝服务效果
风险分析
直接影响
- 机密性风险:无直接风险 - swift-nio-http2在内存安全代码中解析帧,崩溃是安全的
- 完整性风险:无直接风险
- 可用性风险:高 - 导致服务崩溃
潜在风险
突然的进程崩溃可能导致服务中的不变量被破坏,有可能被利用来触发具有机密性或完整性风险的错误条件。
缓解措施
- 主要缓解:阻止不可信的对等端与服务通信(但对许多服务不可行)
- 根本解决:重写解析代码以正确处理相关条件
发现与修复
- 发现方式:通过oss-fuzz的自动化模糊测试发现
- 修复版本:1.20.0及后续版本
- 修复提交:apple/swift-nio-http2@ac2a5af
参考信息
- GHSA ID:GHSA-q36x-r5x4-h4q6
- CVE ID:CVE-2022-0618
- NVD链接:https://nvd.nist.gov/vuln/detail/CVE-2022-0618
安全评分
-
CVSS总体评分:7.5(高危)
-
CVSS v3基础指标:
- 攻击向量:网络
- 攻击复杂度:低
- 所需权限:无
- 用户交互:无
- 范围:未改变
- 机密性影响:无
- 完整性影响:无
- 可用性影响:高
-
EPSS评分:1.019%(第76百分位)