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 的问题正出在这里:
- 共享状态未正确同步
。在并发请求处理路径中,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,也建议随本次升级一并修复上述问题。
五、漏洞自检
同时满足以下两个条件即视为存在风险:
- Apache HTTP Server 版本位于 2.4.55 – 2.4.70(或独立
mod_h2位于 2.0.8 – 2.0.42); 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
- 编辑
/etc/httpd/conf.modules.d/10-h2.conf(若存在10-proxy_h2.conf一并处理); - 注释掉
LoadModule http2_module modules/mod_http2.so; - 从各虚拟主机的
Protocols指令中移除h2与h2c; - 重启服务:
sudo systemctl restart httpd |
注意:仅注释 LoadModule 而未清理 Protocols h2 h2c,可能导致启动失败或配置告警。两处需同时处理。
其他纵深防御措施
- 在反向代理 / WAF 层限制单连接的并发流数量,降低竞态被放大的可能(不能替代补丁);
- 关闭不必要的
h2c(明文 HTTP/2)支持,减少攻击入口; - 以最小权限运行 Web 进程,降低 RCE 成功后的影响半径;
- 对 Apache 工作进程启用崩溃转储与集中日志告警,竞态利用往往伴随异常崩溃信号。
七、暴露面收敛:先把“可被利用的条件”拿掉
一个可被利用的 CVE-2026-119618 目标,必须同时满足四个条件:
- 网络可达
(攻击者能连上端口);
2. 协议可用
(对外提供 HTTP/2 / h2c);
3. 版本受影响
(2.4.55 – 2.4.70 且启用 mod_http2);
4. 并发可制造
(能打满线程、命中竞态窗口)。
打补丁只解决第 3 条。暴露面收敛的价值在于削弱其余三条——即使补丁延迟,也能把“可 RCE”降级为“够不着”。
7.1 收敛清单
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论