HTTP/2 于 2015 年推出,为 HTTP 协议带来了多项增强功能,包括高效的数据传输、请求处理、响应速度,以及对基于网站的信息交易进行标头压缩。但除了这些效率之外,HTTP/2 也给管理员和安全团队带来了一系列独特的挑战。本周早些时候,研究人员公布了一个新发现的与 HTTP/2 相关的漏洞,该漏洞可用于对易受攻击的目标实施拒绝服务(DoS)攻击。
在thehackernews的报道中,安全研究员Bartek Nowotarski 于 1 月 25 日向卡内基梅隆大学计算机应急小组(CERT)协调中心报告了这一问题。
该漏洞被称为"HTTP/2 CONTINUATION Flood",它利用了配置不当的HTTP/2 实现,这些实现未能限制或净化请求数据流中的 CONTINUATION 帧。
CONTINUATION 帧是一种用于延续报头块片段序列的方法,允许报头块在多个帧中分割。当服务器收到一个特定的 END_HEADERS 标志,表明没有其他 CONTINUATION 或其他帧时,先前分割的报头块就被视为已完成。
如果 HTTP/2 实现不限制单个数据流中可发送的 CONTINUATION 帧的数量,就很容易受到攻击。如果攻击者开始向未设置 END_HEADERS 标志的易受攻击服务器发送 HTTP 请求,该请求将允许攻击者向该服务器持续发送 CONTINUATION 帧流,最终导致服务器内存不足而崩溃,并导致成功的拒绝服务 (DoS) 攻击。
CERT 还列举了该漏洞的另一个变种,即使用 HPACK Huffman 编码的 CONTINUATION 帧造成 CPU 资源耗尽,同样导致 DoS 攻击成功。
Nowotarski 指出,这意味着单台机器甚至单TCP连接都有可能破坏服务器的可用性,造成从服务崩溃到性能下降等各种后果。
分布式拒绝服务(DDoS)攻击会创建大规模僵尸网络,通过纯粹的流量来压垮网络,而 DoS 攻击则不同,它可以通过向传输控制协议(TCP)连接发送大量请求来耗尽目标服务器的资源,从而利用单个设备制造虚假网络流量。
与该新漏洞有关的几个常见漏洞和暴露 (CVE) 记录已经创建。这些记录包括:
CVE-2024-2653 - amphp/http
CVE-2024-27316 - Apache HTTP Server: HTTP/2 DoS by memory exhaustion on endless continuation frames
CVE-2024-24549 - Apache Tomcat: HTTP/2 header handling DoS
CVE-2024-31309 - Resource exhaustion in Apache Traffic Server
CVE-2024-27919 - HTTP/2: memory exhaustion due to CONTINUATION frame flood
CVE-2024-30255) - HTTP/2: CPU exhaustion due to CONTINUATION frame flood
CVE-2023-45288 - HTTP/2 CONTINUATION flood in net/http
CVE-2024-28182 - Reading unbounded number of HTTP/2 CONTINUATION frames to cause excessive CPU usage
CVE-2024-27983 - node::http2::Http2Session::~Http2Session() leads to HTTP/2 server crash
CVE-2024-2758 - Tempesta FW rate limits are not enabled by default
建议用户将受影响的软件升级到最新版本,以减轻潜在威胁。在没有修复程序的情况下,建议考虑暂时禁用服务器上的 HTTP/2。
根据 w3techs.com 的一项调查,目前约有 35.5% 的网站使用 HTTP/2。