CriticalAlert:CVE-2026-119618——ApacheHTTP/2 mod_http2 竞态条件致堆内存损坏与远程代码执行

admin 2026-11-13 10:57:21 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

Critical Alert:CVE-2026-119618 —— Apache HTTP/2 mod\_http2 竞态条件致堆内存损坏与远程代码执行

原创

糖果LUA
糖果LUA

AI安全运营

2026年11月12日 17:29
北京

去阅读

TL;DR:mod_http2 的 assign_headers() 函数存在并发竞态(CWE-362),Apache HTTP Server 2.4.55 – 2.4.70 受影响。攻击者只需向启用 HTTP/2 的服务器发送特制的并发请求流,即可造成堆内存损坏,进而导致拒绝服务,甚至以 Web 服务进程权限执行任意代码。修复版本:Apache HTTP Server 2.4.71 / 独立模块 mod_h22.0.43;无法立即升级时,禁用 mod_http2 可完全规避。


一、漏洞概览

项目 内容
CVE 编号 CVE-2026-119618
漏洞类型 竞态条件(CWE-362)/ 堆内存损坏
受影响组件 Apache HTTP Server mod_http2 中的 assign_headers() 函数
影响后果 拒绝服务(进程崩溃);可能升级为远程代码执行(RCE)
受影响版本 Apache HTTP Server 2.4.55 – 2.4.70;独立 GitHub 项目 mod_h2``2.0.8 – 2.0.42
修复版本 Apache HTTP Server 2.4.71;mod_h2``2.0.43
利用前提 目标加载并启用了 http2_module,且攻击者可发起 HTTP/2 连接
发现者 Anthropic OSS Scanner(内部追踪号 ANT-2026-MAPKT6MZ)、Google Cloud 漏洞研究团队 Anthony Weems 与 Simon Scannell

二、技术剖析:assign_headers() 中的竞态条件

HTTP/2 的核心设计目标之一是在单条 TCP 连接上多路复用大量并发的请求与响应流。这种模型极大提升了性能,但也把所有流的头部处理集中到了同一组共享内存结构上。mod_http2 必须依靠严格的线程同步来保证这些并行流互不踩踏。

CVE-2026-119618 的问题正出在这里:

  1. 共享状态未正确同步

。在并发请求处理路径中,assign_headers() 对共享头部表/缓冲区的访问缺少足够的互斥保护。
2. 攻击者可控的并发

。攻击者可以主动构造大量同时到达的 HTTP/2 流,迫使多个工作线程在同一时刻进入 assign_headers(),命中竞态窗口。
3. 堆内存被破坏

。竞态导致的越界写入或重复释放会破坏堆上的控制结构,典型后果是工作进程崩溃,表现为稳定的拒绝服务。

真正的危险在于可控性。单纯的内存损坏通常只造成 DoS,但具备堆布局经验(heap grooming)的攻击者可以通过精心安排分配与释放顺序,将损坏位置对准关键指针或函数指针,从而劫持控制流,以运行 Apache 的身份(常见为 www-data、apache 或 daemon)执行任意代码。这意味着一个”看起来只是崩溃”的并发缺陷,在成熟的利用链下可能直接演变为 RCE。

为什么这类漏洞特别值得警惕:现代 Web 服务器在终结 TLS 时普遍默认开启 HTTP/2,且 mod_http2 面向公网、无需认证即可触发,攻击面几乎覆盖所有对外暴露的 Apache 站点。


三、攻击链推演

CVE-2026-119618 的利用不需要凭据、不需要用户交互,也不依赖特定业务代码——只要目标对外提供 HTTP/2,攻击者就能沿下面这条链路推进。理解每个阶段的“可观测信号”,是把漏洞管理从“打补丁”升级为“可检测、可阻断”的关键。

阶段拆解

阶段 攻击者动作 可观测信号 检测 / 阻断点
① 资产发现 用 Shodan/Censys/自建扫描器按 Server: Apache/2.4.5x–7x、证书、ALPN 筛目标 同一来源大量 TLS 握手、HEAD / 探测 边界 IDS、扫描器 IP/UA 信誉库、蜜罐诱捕
② 协议确认 TLS ALPN 协商 h2,或明文 h2c upgrade / prior-knowledge;读取服务端 SETTINGS 异常 ALPN 组合、短连接内先 SETTINGS 后立即 GOAWAY 仅在边缘终结 HTTP/2;WAF 记录 ALPN 与 SETTINGS 指纹
③ 并发洪泛 单连接高速创建大量 HEADERS/DATA 流,或用多连接聚合制造线程竞争 单连接并发流数、HEADERS 速率、RST\_STREAM 密度显著偏离基线 反代/LB 限制 MAX_CONCURRENT_STREAMS 与请求速率
④ 竞态命中 让多个线程同时进入 assign_headers(),配合 heap grooming 控制破坏位置 Apache error_log 出现 mod_http2 断言/崩溃;worker 异常退出并重启 崩溃转储 + 进程守护告警;蜜罐 race_attempt 事件
⑤a 拒绝服务 直接触发堆破坏令 worker 崩溃,形成 502/503 抖动 5xx 突增、worker PID 频繁变化、核心转储 健康检查 + 自动熔断、限流
⑤b 远程代码执行 将损坏对准函数指针/对象虚表,劫持控制流 进程外联、异常子进程、临时文件、WebShell 落地 EDR/HIDS、egress 白名单、只读文件系统
⑥ 后利用 以 www-data/apache 权限读取配置与凭据、植入内存马、横向移动 异常文件写入、配置读取、内网连接 最小权限、凭据隔离、东西向流量管控

关键判断:③④ 阶段几乎必然在边界留下“单连接高并发流”的痕迹,⑤a 阶段则会留下“进程反复崩溃”的痕迹。这两类信号采集成本低、误报可控,应优先做成告警,而不是等到 ⑤b 才响应。

从防御视角看,这条链上有三个可以“提前掐断”的节点:让攻击者看不到 HTTP/2(协议面收敛)、让并发打不满(边界限流)、让崩溃变成告警(可观测性)。具体做法见第七节「暴露面收敛」。


四、同一公告中的其他修复

升级到 2.4.71 同时修复了同批披露的另外两个问题:

CVE 组件 严重性 说明
CVE-2026-106023 mod_md (ACME 证书管理) 重要 空指针解引用,影响 2.4.30 – 2.4.70,远程攻击者可令子进程崩溃造成 DoS
CVE-2026-109163 mod_vhost_alias 低危 请求数据处理中的单字节栈缓冲区溢出,影响 2.4.69、2.4.70,可导致 DoS

即便所在环境不启用 HTTP/2,也建议随本次升级一并修复上述问题。


五、漏洞自检

同时满足以下两个条件即视为存在风险:

  1. Apache HTTP Server 版本位于 2.4.55 – 2.4.70(或独立 mod_h2 位于 2.0.8 – 2.0.42);
  2. http2_module

已加载并处于激活状态。

Debian / Ubuntu

apache2ctl -v && apache2ctl -M | grep http2

RHEL / Rocky / AlmaLinux / CentOS / Fedora

httpd -v && httpd -M | grep http2

若版本落在受影响区间,且输出中包含 http2_module (shared),则该服务器已暴露,需要立即处置。

补充建议:版本号不是唯一判据。企业发行版常把补丁反向移植到旧版本号上(例如仍显示 2.4.62,但已包含修复)。请以发行版安全公告 / CVE 追踪器为准,并检查 mod_h2 的构建来源。


六、修复与缓解

方案一:升级至 Apache 2.4.71(推荐)

这是根治方案。若 mod_http2 是以独立模块方式从 GitHub 编译的,请同步升级到 mod_h2 2.0.43。

# Debian / Ubuntu sudo apt update && sudo apt --only-upgrade install apache2 # RHEL / Rocky / AlmaLinux / Fedora sudo dnf update httpd

升级后务必重启服务并再次执行第五节的版本与模块检查,确认 Server MPM 与 http2_module 状态符合预期。

方案二:临时缓解 —— 禁用 mod_http2

若无法立即升级,可彻底禁用 mod_http2。服务器会自动回退到 HTTP/1.1 提供服务,功能可用但失去 HTTP/2 的多路复用收益。

Debian / Ubuntu

sudo a2dismod http2 proxy_http2 sudo systemctl restart apache2

RHEL / Rocky / AlmaLinux / CentOS

  1. 编辑 /etc/httpd/conf.modules.d/10-h2.conf(若存在 10-proxy_h2.conf 一并处理);
  2. 注释掉 LoadModule http2_module modules/mod_http2.so;
  3. 从各虚拟主机的 Protocols 指令中移除 h2 与 h2c;
  4. 重启服务:
sudo systemctl restart httpd

注意:仅注释 LoadModule 而未清理 Protocols h2 h2c,可能导致启动失败或配置告警。两处需同时处理。

其他纵深防御措施

  • 在反向代理 / WAF 层限制单连接的并发流数量,降低竞态被放大的可能(不能替代补丁);
  • 关闭不必要的 h2c(明文 HTTP/2)支持,减少攻击入口;
  • 以最小权限运行 Web 进程,降低 RCE 成功后的影响半径;
  • 对 Apache 工作进程启用崩溃转储与集中日志告警,竞态利用往往伴随异常崩溃信号。

七、暴露面收敛:先把“可被利用的条件”拿掉

一个可被利用的 CVE-2026-119618 目标,必须同时满足四个条件:

  1. 网络可达

(攻击者能连上端口);
2. 协议可用

(对外提供 HTTP/2 / h2c);
3. 版本受影响

(2.4.55 – 2.4.70 且启用 mod_http2);
4. 并发可制造

(能打满线程、命中竞态窗口)。

打补丁只解决第 3 条。暴露面收敛的价值在于削弱其余三条——即使补丁延迟,也能把“可 RCE”降级为“够不着”。

7.1 收敛清单


评论:0   参与:  0