HTTP/2 Vulnerability


新研究发现,HTTP/2 协议中的 CONTINUATION 帧可被利用进行拒绝服务(DoS)攻击。


此技术已被安全研究员 Bartek Nowotarski 命名为 HTTP/2 CONTINUATION Flood,并于 2024 年 1 月 25 日向 CERT Coordination Center(CERT/CC)报告了此问题。


“许多 HTTP/2 实现未能正确限制或清理在单个流中发送的 CONTINUATION 帧的数量,” CERT/CC 在 2024 年 4 月 3 日的一份通告中表示。


攻击者可以向目标服务器发送数据包,发送一系列的 CONTINUATION 帧,这些帧不会被追加到内存中的头列表中,但仍然会被服务器处理和解码,或者会被追加到头列表中,导致内存溢出(OOM)崩溃。


与 HTTP/1 一样,HTTP/2 在请求和响应中使用头字段。这些头字段可以包含头列表,这些列表又被序列化并分成头块。然后,这些头块被划分为块片段,并在 HEADERS 或所谓的 CONTINUATION 帧中传输。


RFC 7540 文档中写道,“CONTINUATION 帧(类型=0x9)用于继续一系列的头块片段。”

Cybersecurity


可以发送任意数量的 CONTINUATION 帧,只要前面的帧在同一流上,并且是一个没有设置 END_HEADERS 标志的 HEADERS、PUSH_PROMISE 或 CONTINUATION 帧。


包含头的最后一帧将设置 END_HEADERS 标志,这表示远程端点已经收到头块的结尾。


根据 Nowotarski 的说法,CONTINUATION Flood 是几种 HTTP/2 协议实现中的一类漏洞,与 2023 年 10 月曝光的 Rapid Reset 攻击相比,它们构成了更严重的威胁。


一个单独的机器(在某些情况下甚至是一个单独的 TCP 连接或者少数几帧)有可能破坏服务器的可用性,后果从服务器崩溃到性能严重降低不等,"研究人员说道。 "值得注意的是,构成攻击的请求在 HTTP 访问日志中是不可见的。

HTTP/2 Vulnerability


该漏洞的核心问题在于对 HEADERS 和多个 CONTINUATION 帧的处理不正确,从而为 DoS 条件铺平了道路。


换句话说,攻击者可以使用易受攻击的实现发起对目标服务器的新 HTTP/2 流,并发送没有设置 END_HEADERS 标志的 HEADERS 和 CONTINUATION 帧,从而创建一个永无止境的头部流,需要 HTTP/2 服务器解析并存储在内存中。


尽管具体结果因实现方式而异,但影响范围包括在发送几个 HTTP/2 帧后立即崩溃和内存耗尽而导致 CPU 耗尽,从而影响服务器可用性。


Nowotarski 表示:“RFC 9113 [...] 提到了如果没有正确处理 CONTINUATION 帧可能会出现的多个安全问题。”

Cybersecurity


同时,它没有提到一个特定的情况,即 CONTINUATION 帧在没有最终的 END_HEADERS 标志的情况下发送,这可能会对受影响的服务器产生影响。

The issue impacts several projects such as amphp/http (CVE-2024-2653), Apache HTTP Server (CVE-2024-27316), Apache Tomcat (CVE-2024-24549), Apache Traffic Server (CVE-2024-31309), Envoy proxy (CVE-2024-27919 and CVE-2024-30255), Golang (CVE-2023-45288), h2 Rust crate, nghttp2 (CVE-2024-28182), Node.js (CVE-2024-27983), and Tempesta FW (CVE-2024-2758).


用户建议升级受影响的软件至最新版本,以减轻潜在的威胁。在修复程序不可用的情况下,建议考虑暂时在服务器上禁用HTTP/2。



发现这篇文章有趣吗?关注我们的 Twitter  和 LinkedIn,以阅读更多我们发布的独家内容。