HTTP/2协议漏洞分析:通过HEADERS帧填充导致的拒绝服务攻击

本文详细分析了CVE-2022-0618漏洞,该漏洞存在于swift-nio-http2库中,攻击者可通过特制HTTP/2帧导致服务崩溃,造成拒绝服务。漏洞影响1.0.0至1.19.2版本,已在1.20.0修复。

通过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百分位)

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