Critical Apache HTTP/2 RCE Flaw Lets Unauthenticated Attackers Take Full Control of the Server
CVE-2026-119618 is a critical race-condition vulnerability in Apache HTTP Server’s mod_http2 that can lead to unauthenticated remote code execution when HTTP/2 is enabled. Versions 2.4.55 through 2.4.70 are affected and fixed in 2.4.71. Only hosts that negotiate h2 or h2c are exposed. This article covers how the flaw works, distribution fixes, temporary Protocols mitigation, and related issues in the same release.
Summary
CVE-2026-119618 is a critical memory-corruption vulnerability in Apache HTTP Server's mod_http2 module. Apache identifies a synchronization flaw in assign_headers() that can lead to remote code execution (RCE). Upstream versions 2.4.55 through 2.4.70 are affected. The Apache security advisory identifies version 2.4.71, released on 11 November 2026, as the fixed release.
Prioritize reachable HTTP/2-enabled deployments. Install the upstream fix or your distribution's security update. If patching must wait, temporarily restrict the affected Apache listeners to HTTP/1.1 and verify the change across every virtual host.
Vulnerability Details
| Item | Details |
|---|---|
| Identifier | CVE-2026-119618 |
| Component | Apache HTTP Server, mod_http2 |
| Apache severity | Critical |
| Weakness | CWE-362: Concurrent Execution using Shared Resource with Improper Synchronization |
| Upstream affected versions | Apache HTTP Server 2.4.55 through 2.4.70 Standalone mod_h2 releases on GitHub: 2.0.8 through 2.0.42 |
| Upstream fixed version | Apache HTTP Server 2.4.71 |
| Required exposure | Reachable HTTP/2 processing through the affected module |
Technical Information
HTTP/2 multiplexes requests as separate streams over one connection. As described in Apache's module documentation, worker threads process requests while the connection thread manages protocol activity. Access to shared memory must be coordinated when these threads run concurrently.
Red Hat's technical assessment describes a worker writing into connection-owned memory through a shared, lock-free allocator. Concurrent access can corrupt the heap and permit unauthenticated code execution.
What the Patch Changes
The upstream fix, commit 824beab, changes the destination of a header-table update in modules/http2/h2_request.c. When the function supplies a zero content length after the request body has ended, it now updates r->headers_in instead of req->headers.
The patch indicates that the correction keeps this update in the request's header table rather than modifying the shared source table. This addresses the memory-ownership problem despite changing only one line.
Related Issues and Disclosure Timeline
- Anthropic's OSS Scanner reports ANT-2026-MAPKT6MZ.
- Google Cloud researchers Anthony Weems and Simon Scannell report the issue.
- Apache releases the fix in HTTP Server 2.4.71.
The same release addresses CVE-2026-106023, a mod_md null-pointer dereference rated Important, and CVE-2026-109163, a one-byte mod_vhost_alias stack overwrite rated Low.
Impact
- An unauthenticated client may be able to run code in the affected server process.
- Files, application credentials, and backend services accessible to that process may be exposed or modified.
- Memory corruption may crash workers and interrupt requests.
The impact depends on the permissions and resources available to the compromised server process. On Unix systems, Apache's User directive controls the account used to handle requests. Root access is not an established outcome of this vulnerability alone.
Affected Products and Versions
- Apache HTTP Server 2.4.55 through 2.4.70
- Standalone
mod_h2releases on GitHub, versions 2.0.8 through 2.0.42
Check three conditions together: an affected or unpatched module, HTTP/2 enabled on a listener or virtual host, and a network path that lets a client reach that listener.
Loading mod_http2 alone does not establish exposure. Apache requires HTTP/2 to be enabled with the Protocols directive. Both h2 (HTTP/2 over TLS) and h2c (cleartext HTTP/2) matter. These are examples of configurations to review, not mitigation settings:
# HTTP/2 over TLS
Protocols h2 http/1.1
# HTTP/2 over TLS and cleartext
Protocols h2 h2c http/1.1
The directive can apply globally or within a virtual host. Review included configuration files and overrides as well as the main configuration.
For proxy and CDN deployments, assess each connection separately. Browser-to-edge HTTP/2 does not establish that the edge-to-Apache connection uses HTTP/2. Conversely, an origin reachable directly or over an internal HTTP/2 path still requires assessment. A public endpoint check describes only the listener that answered it.
MITRE ATT&CK Mapping
| Technique ID | Technique Name | Tactic ID | Tactic |
|---|---|---|---|
| T1190 | Exploit Public-Facing Application | TA0001 | Initial Access |
Mitigation and Recommendations
Fixed Releases
| Product or release | Status | Remediation guidance |
|---|---|---|
| Apache upstream | Fixed in 2.4.71 | Upgrade to 2.4.71 or a later supported release. |
| Standalone mod_h2 releases on GitHub | 2.0.8-2.0.42 affected | Apache's advisory does not name a fixed standalone version. Confirm a supported fixed build. If none is available, disable HTTP/2 while migrating. |
| RHEL 9 and 10 | Fixes available, rated Important | Use the applicable stream-specific erratum. Red Hat explains that separate per-stream allocators increase exploit complexity. |
| Debian sid (unstable) | Fixed in apache2 2.4.71-1 | Update from the sid repository. The Debian tracker confirms this fixed source-package version. |
| Debian trixie (13) | Fixed in apache2 2.4.71-1~deb13u1 through trixie-security | Install the security update for trixie. The main archive's 2.4.68-1~deb13u1 remains listed as vulnerable in the Debian tracker. |
| Debian bookworm (12) | Main archive 2.4.68-1~deb12u1 and security archive 2.4.67-1~deb12u3 listed as vulnerable | No fixed bookworm version is listed in the linked tracker. Monitor the Debian tracker and disable HTTP/2 on affected deployments while awaiting an update. |
| Debian forky (testing) | apache2 2.4.69-1 listed as vulnerable | No fixed forky version is listed in the Debian tracker. Check for an updated package and temporarily disable HTTP/2 where required. |
Confirm the full installed package version against the supplier's advisory. Distribution fixes may be backported without changing the upstream version shown by httpd -v.
Check the Installed Module and HTTP/2 Configuration
Use the Apache control command associated with the running service. On some distributions, it is named apache2ctl rather than apachectl.
apachectl -v
apachectl -M
apachectl -S
These commands report the server version, loaded modules, and virtual hosts. Look for http2_module, then inspect Protocols settings in the active configuration and included virtual hosts for h2 or h2c. A loaded module alone does not confirm HTTP/2 exposure. These checks also do not establish whether a vendor security patch is installed.
To check TLS protocol negotiation, send a normal request using an HTTP/2-capable curl build:
curl --http2 --silent --show-error --output /dev/null --write-out '%{http_version}\n' https://www.example.com/
Replace the hostname with the endpoint being assessed. A result of 2 confirms HTTP/2 on that connection, not vulnerability. Check origin servers separately when a proxy or CDN answers the request. This command does not test cleartext h2c. The command options are documented by Apache and curl.
Install the Fix and Replace Running Workers
- Select the correct update. Use Apache 2.4.71 or the vendor-fixed packages for your supported release stream.
- Validate compatibility. Check application routing, TLS, authentication, proxy behavior, and HTTP/2-dependent clients. Run
apachectl -tto check configuration syntax before restarting. - Deploy across the fleet. Update every instance, including container images and deployment templates that could recreate an affected server.
- Restart using the service's supported procedure. Confirm that old processes using the vulnerable module have exited. Replacing a package on disk does not replace code already loaded in memory.
- Verify and record the result. Confirm package fix status, service health, expected protocol negotiation, and coverage of all nodes.
Apache documents that a graceful restart preserves existing connections. Account for that behavior when deciding whether vulnerable workers have fully retired. The apachectl documentation explains the differences between restart procedures.
If Patching Must Wait, Disable HTTP/2
If an update cannot be installed immediately, configure affected listeners to offer only HTTP/1.1. This recommendation follows the documented HTTP/2 exposure requirement. Apache does not publish a separate workaround in its CVE entry.
Protocols http/1.1
Remove h2 and h2c from every applicable server and virtual-host setting, validate with apachectl -t, and apply the configuration through the supported service procedure. Ensure existing HTTP/2 connections and affected workers have ended, then repeat endpoint checks. Confirm that clients requiring HTTP/2 remain operational or have an alternative path.
Track this as a temporary exception with an owner and a patch deadline. Network restrictions can reduce reachability, but they do not correct the memory-safety flaw.
Instantly Fix Risks in Endpoints & Cloud with Saner
Saner is a continuous and integrated vulnerability & exposure management platform that instantly fixes risks in endpoints and cloud.




