您的位置: 新闻资讯 > 行业动态 > 正文

HTTP/2惊现高危漏洞CVE-2023-44487,你的网站安全吗?(图文)


来源:mozhe 2025-02-17

一、HTTP/2,你真的了解吗?



在网络技术不断演进的今天,HTTP 协议作为互联网通信的基石,也在持续发展。HTTP/2 便是 HTTP 协议的重要升级版本,它的出现旨在解决 HTTP/1.1 存在的诸多性能瓶颈。
HTTP/1.1 长期以来作为互联网应用的主流协议,在推动网络发展中发挥了重要作用。但随着互联网内容的爆炸式增长,其局限性也日益凸显。例如,HTTP/1.1 是基于文本的协议,这意味着数据在传输和解析时需要更多的开销。每个请求和响应都包含大量重复的头部信息,像常见的 Cookie、User - Agent 等字段,每次请求都需完整发送,这极大地浪费了宝贵的带宽资源,也降低了数据传输的效率,导致页面加载速度变慢。而且,HTTP/1.1 在同一连接上只能按顺序处理请求和响应,一旦前面的请求出现延迟,后续请求都得排队等待,这就是所谓的 “队头阻塞” 问题,严重影响了并发处理能力。
为了解决这些问题,HTTP/2 应运而生。HTTP/2 是二进制协议,所有数据都被封装成二进制帧进行传输 ,这种方式使得计算机在解析报文时更加高效,减少了数据处理的时间和开销。它引入了多路复用技术,这是其最为显著的特性之一。在 HTTP/2 中,多个请求和响应可以在同一个 TCP 连接上并行交错传输,每个请求或响应都被分配一个唯一的数据流 ID,通过这个 ID 可以区分不同的请求和响应,避免了 “队头阻塞” 的问题,大大提高了网络利用率和传输性能。
HTTP/2 还对头部进行了压缩,采用 HPACK 压缩格式,通过静态哈夫曼编码和动态表机制,有效减少了头部数据的大小,节省了带宽。在 HTTP/2 中,服务器可以主动向客户端推送资源,当客户端请求一个 HTML 页面时,服务器可以预判并主动推送相关的 CSS、JavaScript 文件等,减少了客户端额外的请求次数,加快了页面的加载速度。

二、CVE-2023-44487,究竟是什么?


CVE-2023-44487,这个编号在安全领域引起了轩然大波,它直指 HTTP/2 协议中的一个严重资源管理错误漏洞。此漏洞的原理涉及到 HTTP/2 协议中流取消功能的不当利用 。在 HTTP/2 协议里,为了保障服务器资源的合理使用,会对每个 TCP 连接设置一个最大并发流数目,以此限制同时处理的请求数量,防止服务器因请求过多而不堪重负。
然而,攻击者却发现了一个可乘之机。他们通过精心构造的攻击方式,发送特殊组合的 HEADERS 和 RST_STREAM 帧来绕过这个并发流限制。具体来说,攻击者先发送 HEADERS 帧,发起一个 HTTP 请求,在服务器还未来得及处理这个请求时,迅速发送 RST_STREAM 帧取消该请求。由于 HTTP/2 协议规定,处于 “Closed” 状态的流不计入并发流数量统计,而 RST_STREAM 帧正是能使对应的流快速进入 “Closed” 状态 。攻击者利用这一特性,不断重复发送这样的帧组合,使得服务器看似只处理了少量并发请求,但实际上却在不断地消耗资源来处理这些被快速取消的请求。
在正常情况下,服务器处理一个请求时,从接收请求、解析请求内容,到准备响应数据,这一系列操作都需要消耗服务器的 CPU、内存等资源。即使收到 RST_STREAM 帧后,服务器要优雅地结束当前请求处理,在这个过程中已经消耗的资源也无法立刻释放。攻击者通过大量并发地发送这种 HEADERS 和 RST_STREAM 帧组合,使得服务器忙于处理这些无意义的请求,资源被快速耗尽。原本服务器可以正常处理合法用户的请求,提供稳定的服务,但在这种攻击下,服务器资源被大量占用,无法再为正常用户提供服务,从而导致拒绝服务(DoS)攻击的发生。
该漏洞被发现后,安全研究人员和各大互联网公司都高度关注。因为 HTTP/2 协议广泛应用于各类 Web 服务器、CDN(内容分发网络)、移动应用后端等场景,所以这个漏洞影响范围极广。并且,让人担忧的是,该漏洞已被在野利用,这意味着已经有攻击者在实际的网络环境中使用这个漏洞发起攻击,许多未及时防护的网站和服务都面临着被攻击瘫痪的风险。

三、哪些组件受到影响?



CVE-2023-44487 漏洞的影响范围极为广泛,众多使用 HTTP/2 协议的组件都受到了不同程度的波及。以下为大家详细列举受影响的组件及版本,各位可以对照检查自己使用的组件是否存在风险 。
  • Apache Tomcat:11.0.0-M1 至 11.0.0-M11 版本、10.1.0-M1 至 10.1.13 版本、9.0.0-M1 至 9.0.80 版本、8.5.0 至 8.5.93 版本均受影响。例如,某企业使用的 Apache Tomcat 9.0.70 版本,在此次漏洞影响范围内,就面临着被攻击导致服务中断的风险。许多基于 Java 开发的 Web 应用,如电商平台、企业办公系统等,若使用了上述受影响版本的 Apache Tomcat 作为服务器,一旦遭受攻击,可能导致用户无法正常访问网站,订单处理中断,企业办公流程受阻等严重后果。
  • Apache Traffic Server:8.0.0 至 8.1.8 版本以及 9.0.0 至 9.2.2 版本存在漏洞风险。Apache Traffic Server 常用于内容分发网络(CDN)中,像一些大型视频网站,通过 CDN 加速来确保用户流畅观看视频。若其使用的 Apache Traffic Server 版本受此漏洞影响,攻击者可能利用漏洞发起攻击,导致视频播放卡顿、加载缓慢甚至无法播放,严重影响用户体验,进而影响网站的流量和口碑。
  • Go:版本小于 1.21.3 和 1.20.10 的 Go 组件面临风险。Go 语言在云计算、分布式系统开发中应用广泛。以某知名云服务提供商为例,其部分基于 Go 语言开发的服务组件,若使用了受影响版本的 Go,在遭受攻击时,可能导致云服务的部分功能无法正常使用,如虚拟机创建失败、文件存储服务异常等,影响众多用户的业务正常运行。
  • grpc-go:版本小于 1.58.3、1.57.1 和 1.56.3 的 grpc-go 存在漏洞隐患。grpc-go 常用于构建高性能、可扩展的 RPC(远程过程调用)系统。在微服务架构中,不同服务之间常通过 grpc-go 进行通信。若使用受影响版本的 grpc-go,攻击者可能利用漏洞干扰服务间通信,导致整个微服务系统出现故障,影响依赖该系统的业务正常运转。
  • jetty:版本小于 12.0.2、10.0.17、11.0.17 和 9.4.53.v20231009 的 jetty 受影响。jetty 是一个开源的 Servlet 容器,许多小型 Web 应用和一些中间件会使用它。比如某些企业内部的管理系统,若使用了受影响版本的 jetty,攻击者可能利用漏洞使管理系统无法访问,导致企业内部办公流程混乱,数据无法正常获取和处理。
  • Netty:版本小于 4.1.100.Final 的 Netty 存在风险。Netty 是一个高性能的网络通信框架,在游戏服务器、即时通讯等领域应用广泛。以一款热门的手机游戏为例,若其服务器端使用的 Netty 版本受此漏洞影响,攻击者可能通过漏洞发起攻击,导致游戏玩家频繁掉线、无法登录游戏等问题,严重影响游戏运营和玩家体验。
  • nghttp2:版本小于 v1.57.0 的 nghttp2 受到影响。nghttp2 是一个实现 HTTP/2 协议的 C 库,很多基于 C/C++ 开发的网络应用会用到它。例如一些物联网设备的后台管理系统,若使用了受影响版本的 nghttp2,攻击者可能利用漏洞入侵系统,获取设备的敏感信息,甚至控制物联网设备,造成严重的安全隐患。

四、攻击如何发生?(简单的复现过程)



现在,让我们一起来看看攻击者是如何利用 CVE-2023-44487 漏洞发起 DDoS 攻击的,这里为大家呈现一个相对简单的复现过程,帮助大家更直观地理解攻击的发生机制。
攻击者通常会借助一些专门编写的脚本或工具来实施攻击。这些工具可以在短时间内生成大量的 HTTP/2 请求,模拟出多个客户端同时向服务器发起请求的场景。假设我们有一个使用了受影响版本 HTTP/2 组件的 Web 服务器,它对外提供着网站访问、文件下载等服务。
攻击者首先会利用工具创建一个与目标服务器的 TCP 连接,这个连接就像是一条通往服务器的 “通道”。连接建立后,攻击者通过工具不断地向服务器发送特殊组合的 HTTP/2 帧,即 HEADERS 帧和 RST_STREAM 帧。每一次发送 HEADERS 帧,就相当于向服务器发起一个 HTTP 请求,告诉服务器需要获取某个资源,比如一个网页、一张图片或者一段视频。然而,在服务器还没来得及对这个请求做出实质性处理,比如去读取存储设备上的相关文件、查询数据库获取数据时,攻击者紧接着就发送 RST_STREAM 帧。这个 RST_STREAM 帧就像是一个 “紧急刹车” 信号,告诉服务器立即取消刚刚收到的请求,停止处理。
由于 HTTP/2 协议规定,被取消的流(也就是这些被 RST_STREAM 帧取消的请求)不计入并发流数量统计,攻击者就可以利用这一点,不断重复发送这样的帧组合。在短时间内,攻击者通过这个工具可以发送成千上万次这样的请求取消操作。服务器在收到这些请求后,虽然会快速结束被取消的请求处理,但在这个过程中,服务器的 CPU 需要花费时间去解析这些请求,内存也会被分配用于存储请求相关的数据,即使请求被取消,这些已经消耗的资源也无法立刻释放。随着攻击者持续不断地发送大量这样的请求,服务器的资源,如 CPU 使用率急剧上升,内存被逐渐耗尽。
正常情况下,服务器可以轻松处理合法用户的请求,为用户提供流畅的服务体验。但在这种攻击下,服务器忙于处理这些无意义的请求,当资源被耗尽时,服务器就无法再接收和处理合法用户的请求。此时,用户在访问网站时,可能会看到网页长时间无法加载,显示 “连接超时” 的错误提示;或者在进行文件下载时,下载进度条一直停留在 0%,无法完成下载;甚至在使用一些在线应用时,会出现频繁掉线、无法登录等情况,这就是典型的拒绝服务(DoS)攻击效果。
这种攻击方式的危害极大,它不仅会导致目标服务器所提供的服务中断,影响用户的正常使用,还可能对企业的业务造成严重损失。例如,一家电商网站如果遭受这样的攻击,在攻击期间用户无法正常下单购物,可能会导致大量订单流失,同时也会损害企业的声誉,降低用户对该企业的信任度 。

五、如何防范这场危机?



面对 CVE-2023-44487 漏洞带来的严重威胁,我们不能坐以待毙,必须采取一系列有效的防范措施,保护我们的网络服务和数据安全。以下为大家详细介绍具体的防范方法 。

(一)升级组件


及时升级受影响的组件到安全版本是最直接有效的防范方式。各组件的安全版本如下:
  • Apache Tomcat:升级到 11.0.0-M12 及以上版本、10.1.14 及以上版本、9.0.81 及以上版本、8.5.94 及以上版本。
  • Apache Traffic Server:更新至 8.1.9 及以上版本、9.2.3 及以上版本。
  • Go:将版本升级到 1.21.3 及以上版本、1.20.10 及以上版本。
  • grpc-go:升级到 1.58.3 及以上版本、1.57.1 及以上版本、1.56.3 及以上版本。
  • jetty:更新至 12.0.2 及以上版本、10.0.17 及以上版本、11.0.17 及以上版本、9.4.53.v20231009 及以上版本。
  • Netty:升级到 4.1.100.Final 及以上版本。
  • nghttp2:更新至 v1.57.0 及以上版本 。
在升级组件前,务必做好充分的测试工作,确保新版本组件与现有的系统架构、应用程序等能够良好兼容,避免因升级而引发新的问题。同时,也要备份重要的数据,以防万一升级过程中出现意外情况,可以快速恢复数据,减少损失 。

(二)配置调整


以 Nginx 为例,合理的配置调整可以有效缓解攻击影响。Nginx 通过设置 keepalive_requests 和 http2_max_concurrent_streams 等参数来限制请求数量和并发流数目。在 Nginx 配置文件中,keepalive_requests 默认配置为 1000,这意味着每个 keep - alive 连接最多可以处理 1000 个请求。http2_max_concurrent_streams 默认配置为 128,即限制一个 HTTP/2 TCP 连接上的最大并发流数目为 128。如果将这两个参数保持默认值,Nginx 在面对利用 CVE-2023-44487 漏洞的攻击时,能较好地限制攻击者的请求数量和并发流,从而保障服务器正常运行 。
除了上述 Nginx 的配置外,还可以采取其他配置优化方法。比如,通过 limit_conn 指令限制单个客户端的连接数,在 Nginx 的配置文件中,可以这样设置:

 
http {
limit_zone $binary_remote_addr zone=perip:10m;
server {
location / {
limit_conn perip 10; # 限制每个客户端IP最多同时建立10个连接
# 其他配置
}
}
}
通过设置这样的限制,可以防止单个客户端占用过多的服务器连接资源,避免攻击者通过大量连接耗尽服务器资源 。
还可以使用 limit_req 指令设置请求速率限制,限制在给定时间内处理的来自单个客户端的请求数,例如:

 
http {
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
server {
location / {
limit_req zone=req_limit; # 限制每个客户端IP每秒最多发起10个请求
# 其他配置
}
}
}
这种方式可以有效阻止攻击者通过快速发送大量请求来耗尽服务器资源 。

(三)安全防护策略


使用专业的安全防护产品是防范攻击的重要手段,如 WAF(Web 应用防火墙)和 DDoS 防护服务等。这些产品能够实时监测网络流量,识别并拦截恶意请求,为服务器提供全方位的保护 。
以 WAF 为例,启用 CC 攻击防护功能后,WAF 会对每个客户端的请求频率进行监测。当某个客户端在短时间内发送的请求数量超过设定的阈值时,WAF 会自动识别这可能是 CC 攻击行为,并采取相应的措施,如限制该客户端的访问,或者将其请求放入队列中进行限速处理,从而保障服务器的正常运行 。
WAF 还支持自定义规则拦截功能。用户可以根据自身业务的特点和常见的攻击模式,编写自定义的规则。如果发现有攻击者经常利用特定的 URL 参数进行攻击,就可以在 WAF 中设置规则,当检测到请求中包含该特定 URL 参数时,直接拦截该请求 。
速率限制也是 WAF 的重要功能之一。通过设置合理的速率限制规则,如限制每个 IP 地址每秒的请求数、每分钟的请求数等,可以有效防止攻击者通过大量发送请求来耗尽服务器资源 。
一些先进的 WAF 还具备 Bot 智能分析和客户端画像分析功能。Bot 智能分析可以识别出访问请求是否来自恶意的机器人程序,对于恶意 Bot 的请求进行拦截。客户端画像分析则通过收集和分析客户端的各种信息,如 IP 地址、设备类型、操作系统、访问行为模式等,建立客户端画像。当某个客户端的行为与正常画像不符时,WAF 会进行预警并采取相应的防护措施 。
如果企业的业务量较大,对网络稳定性要求较高,还可以考虑使用 DDoS 防护服务。DDoS 防护服务通常由专业的网络安全服务提供商提供,他们拥有庞大的网络带宽和先进的防护设备,能够在攻击发生时,快速将攻击流量引流到专门的清洗中心进行处理,确保企业的核心服务器不受攻击影响 。

六、总结与展望



CVE-2023-44487 漏洞给网络安全带来了巨大的挑战,它利用 HTTP/2 协议的流取消功能缺陷,使攻击者能够绕过并发流限制,发起 DDoS 攻击,导致服务器资源耗尽,服务中断。众多使用 HTTP/2 协议的组件,如 Apache Tomcat、Apache Traffic Server、Go 等,都受到了不同程度的影响,这使得大量基于这些组件构建的网站和应用面临着被攻击的风险 。
为了防范这一漏洞,我们采取了升级组件、配置调整和安全防护策略等多种措施。及时升级受影响的组件到安全版本,能够从根源上修复漏洞,避免被攻击利用;合理的配置调整,如 Nginx 中设置 keepalive_requests 和 http2_max_concurrent_streams 等参数,可以限制请求数量和并发流数目,缓解攻击影响;使用专业的安全防护产品,如 WAF 和 DDoS 防护服务,能够实时监测网络流量,识别并拦截恶意请求,为服务器提供全方位的保护 。
网络安全是一场没有硝烟的持久战,随着技术的不断发展,新的漏洞和攻击手段也会不断涌现。我们必须时刻保持警惕,持续关注网络安全动态,及时了解最新的安全漏洞信息。只有这样,才能在面对新的安全威胁时,迅速做出反应,采取有效的防范措施,保护我们的网站和应用免受攻击,确保网络世界的安全与稳定 。

关于墨者安全
墨者安全致力于安全防护、服务器高防、网络高防、ddos防护、cc防护、dns防护、防劫持、高防服务器、高防dns、网站防护等方面的服务,全网第一款指纹识别技术防火墙,自研的WAF指纹识别架构,提供任意CC和DDoS攻击防御。

热门文章

X

7x24 小时

免费技术支持

15625276999


-->