【OpenResty】OpenResty解决CVE-2023-44487漏洞版本

CVE-2023-44487 是什么?

1.核心问题: 这是一种新型的 分布式拒绝服务攻击 方法。
2.攻击名称: 通常被称为 “HTTP/2 快速重置攻击”
3.攻击原理:
攻击者利用 HTTP/2 协议的一个特性:客户端可以非常快速地发起大量的 HTTP 请求。
最关键的一步是,攻击者在服务器处理和响应这些请求
之前,就通过发送 RST_STREAM 帧主动取消/重置这些请求。
这样,攻击者就能在极短时间内发起海量(例如,数千万甚至数亿次)的请求-重置操作。
4.
攻击效果:
*
虽然单个被取消的请求不会消耗服务器太多资源(因为被提前终止了),但这种超高频率、超高数量的请求洪流会压倒服务器*。
*服务器需要为每个新请求分配和初始化资源(内存、CPU 时间、可能的 TLS 握手开销等),即使请求被快速取消,这个初始化的开销累积起来也非常巨大。
*导致目标服务器资源(CPU、内存、连接数)耗尽,无法处理合法用户的请求,从而实现 DDoS 攻击的目的。

为什么这个漏洞很严重?

1.影响范围极广: 几乎所有支持 HTTP/2 的服务器、代理、负载均衡器、CDN 和 Web 应用框架都受到影响。这包括 Nginx, Apache, Cloudflare, Google Cloud, AWS ALB, Microsoft IIS, Node.js, Envoy 等等。
2.攻击效率高: 攻击者可以用相对较少的资源(较少的攻击机器或较低的带宽)发动非常大规模的 DDoS 攻击,峰值流量可以达到前所未有的高度(例如数亿 RPS - 每秒请求数)。
3.协议层问题: 这不是某个特定软件的实现错误,而是对 HTTP/2 协议本身特性的滥用。因此影响的是整个协议栈的部署。

如何缓解/修复?

不是“打补丁”修复协议: HTTP/2 协议本身不会被修改。缓解措施主要在服务器、中间件和网络基础设施提供商*层面实现。
*主要缓解策略:
*限制请求速率: 对来自单个客户端 IP 或连接的请求速率设置上限。
*限制并发流: 降低单个 HTTP/2 连接允许的最大并发流数量。
*延迟流创建: 在建立新流之前引入微小延迟,增加攻击者的成本。
*主动断开恶意连接: 检测到异常高频率的请求-重置模式后,主动断开可疑的连接。
*增加资源成本: 对于快速重置的请求,服务器端仍保留少量资源占用一小段时间,增加攻击者的资源消耗。
*云和 CDN 提供商: 主要的云服务商(AWS, GCP, Azure)和 CDN 提供商(Cloudflare, Akamai 等)在其基础设施上快速部署了这些缓解措施,保护了依赖其服务的客户。
*自建服务管理员: 需要更新其 Web 服务器(如 Nginx, Apache)、负载均衡器或代理软件到包含缓解措施的最新版本,并可能需要调整相关配置参数。

总结

CVE-2023-44487 是一种利用 HTTP/2 协议设计进行高效 DDoS 攻击的方法(HTTP/2 Rapid Reset)。它不涉及数据窃取或系统入侵,但能导致目标网站或服务瘫痪。其严重性在于影响范围广泛且攻击威力巨大。防御依赖于基础设施和服务提供商在其系统中实施速率限制、连接管理等相关缓解策略。

如何确认 OpenResty 1.21.4.3 是否已修复 CVE-2023-44487 ?

要验证 OpenResty 1.21.4.3 是否已修复 CVE-2023-44487(HTTP/2 快速重置攻击),可通过以下步骤进行测试:


1. 确认 OpenResty 版本

首先确保环境中运行的版本正确:

openresty -v

输出应包含 nginx version: openresty/1.21.4.3


2. 使用专用测试工具验证

方法一:使用 h2load(推荐)

h2load 是 HTTP/2 性能测试工具,可模拟快速重置攻击:

从源码编译安装(适合需要最新版本)

# 安装编译依赖
 yum -y  groupinstall "Development Tools"
 yum  -y install libev-devel jemalloc-devel openssl-devel libxml2-devel c-ares-devel jansson-devel

# 下载最新源码(替换为最新版本号)
# 检查 https://github.com/nghttp2/nghttp2/releases
NGHTTP2_VER="1.68.0"  
wget https://github.com/nghttp2/nghttp2/releases/download/v${NGHTTP2_VER}/nghttp2-${NGHTTP2_VER}.tar.gz
tar xvf nghttp2-${NGHTTP2_VER}.tar.gz
cd nghttp2-${NGHTTP2_VER}

# 编译安装
./configure
make
make install

# 更新库链接
ldconfig

# 验证安装
h2load --version
# 安装 h2load(Debian/Ubuntu)
sudo apt install nghttp2-client


# 执行测试命令(替换 your-server-ip)
h2load -n 100000 -c 1000 -m 100 \
--reset-stream=1 \
--max-concurrent-streams=100 \
https://your-server-ip

参数说明

  • -n 100000:总请求数
  • -c 1000:并发连接数
  • -m 100:每个连接的并发流数
  • --reset-stream=1:每个请求后发送 RST_STREAM(模拟快速重置)
  • --max-concurrent-streams=100:允许的并发流上限(需 ≥ 服务器配置)

验证结果

  • 修复成功:服务保持稳定,无崩溃或宕机,日志无异常(如 worker process is shutting down)。
  • 存在漏洞:OpenResty 崩溃、重启或出现 out of memory 错误。

方法二:使用 CVE-2023-44487 PoC 脚本

通过 GitHub 上的公开 PoC 验证:

# 克隆 PoC 仓库(示例)
git clone https://github.com/grafov/h2load-reset-attack-poc.git
cd h2load-reset-attack-poc

# 运行测试(替换 your-server-ip)
./attack.sh your-server-ip

注意:PoC 脚本可能需调整参数(如流并发数、重置频率)。


3. 监控系统指标

测试期间实时监控资源使用情况:

# 监控 OpenResty 进程状态
top -p $(pgrep -d',' -f openresty)

# 检查内存/CPU
htop

# 查看 OpenResty 错误日志
tail -f /usr/local/openresty/nginx/logs/error.log

关键指标

  • CPU 和内存无异常飙升。
  • worker_connections are not enoughSIGSEGV 崩溃日志。
  • 服务持续响应正常请求。

4. 对比测试结果

  • 未修复版本(如 OpenResty < 1.21.4.1):攻击会导致服务崩溃。
  • 修复版本(1.21.4.3):服务稳定运行,仅记录少量流重置日志(如 stream closed with error: PROTOCOL_ERROR)。

5. 补充验证

  • 正常流量测试:确保修复后 HTTP/2 普通请求不受影响:
curl -k -I --http2 https://your-server-ip
  • 配置检查:确认未禁用 HTTP/2(listen 443 ssl http2)。

结论

若测试中 OpenResty 保持稳定(无崩溃、资源正常),且错误日志仅显示协议级重置(非致命错误),则 CVE-2023-44487 已修复。建议结合自动化工具(如 h2load)和资源监控进行综合验证。

参考

OpenResty 1.21.4.3 Released
http://openresty.org/cn/ann-1021004003.html
https://openresty.org/download/openresty-1.21.4.3.tar.gz

nghttp2 - HTTP/2 C Library and tools
https://github.com/nghttp2/nghttp2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容