HTTP2Reset (CVE-2026-119618): Pre-Auth Heap Corruption and RCE in Apache mod_http2

CVE-2026-119618 HTTP2Reset cover: a worker thread and a connection thread grab the same memory block inside an Apache HTTP/2 connection, cracking it and corrupting the heap.

Executive Summary

CVE-2026-119618 is a critical race condition in Apache HTTP Server. It sits in mod_http2, the module that handles HTTP/2. The broken function is assign_headers(), which deals with request headers.

Here’s what goes wrong. A worker thread writes a Content-Length: 0 header into a table that belongs to the connection thread. It writes it through an allocator that has no lock. If both threads grab the same chunk of memory at the same moment, the heap of the child process is corrupted.

Apache 2.4.55 through 2.4.70 is affected. The fix is in 2.4.71, released on November 11, 2026.

The attacker needs no credentials. One crafted HTTP/2 request reaches the bug. So any Apache server in that range that speaks HTTP/2 is exposed. That means h2 over TLS, or h2c in cleartext. Apache rates the flaw critical. Red Hat scores it CVSS 9.8. Red Hat also says a worker thread that corrupts connection-thread memory can lead to full control of the server process.

The bug class is well known. The problem is how many servers it reaches. Apache runs about a quarter of all websites. HTTP/2 is used on more than a third. And on Debian and Ubuntu, one a2enmod http2 turns on both h2 and cleartext h2c for every virtual host.

Anthropic’s AI-based OSS Scanner reported the bug to Apache on October 26, 2026. Google Cloud Vulnerability Research sent its own report eight days later. This is the second serious memory-safety flaw in the same module in six months. The first was CVE-2026-23918 in May. The standalone build of the module now has no maintainer, so nobody can ship a separate fix for it.

TL;DR for Engineering Teams

  • What it is: a pre-auth race condition (CWE-362) in Apache mod_http2 assign_headers(). Apache: critical. Red Hat: CVSS 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H). CVE-2026-119618.
  • Where it bites: Apache HTTP Server 2.4.55 to 2.4.70, and standalone mod_h2 2.0.8 to 2.0.42. Only when HTTP/2 is negotiated. A server in range that never speaks h2 or h2c can’t be reached this way.
  • Why it matters: no auth, one request. Public labs reproduce heap corruption and worker crashes under sanitizers. One vendor lab got attacker-controlled bytes into a pointer the server dereferences. No confirmed exploitation in the wild. Not in CISA KEV as of November 10, 2026.
  • Patch status: fixed in Apache 2.4.71. RHEL 9 and 10 are patched. Debian stable, Ubuntu and Amazon Linux had no fix on November 12, 2026.
  • What to do now: upgrade to 2.4.71 or the vendor-fixed package, then restart httpd. No patch yet? Set Protocols http/1.1 server-wide and in every virtual host, then reload.

Vulnerability Overview

FieldValue
VendorApache Software Foundation
ProductApache HTTP Server (mod_http2); standalone mod_h2
Vulnerability TypeRace condition / heap corruption via shared lock-free allocator
CWECWE-362 (Apache CNA). Red Hat lists CWE-20; VulDB lists CWE-122
CVSS Score9.8 (Red Hat 3.1 vendor score). NVD and Apache CNA: not yet scored
CVECVE-2026-119618 (also EUVD-2026-123532, GHSA-hjhf-gpg9-qqfj)
Patch AvailableYes (Apache 2.4.71, November 11, 2026)
Active ExploitationNot confirmed; not in CISA KEV as of November 10, 2026

Technical Anatomy

Root cause

HTTP/2 lets a client send many requests over one connection. In mod_http2, each request stream runs on its own worker thread. Each worker has its own memory pool. The connection itself is run by a separate connection thread.

The connection thread’s allocator is lock-free. No mutex guards its free list. That’s only safe as long as worker threads never touch memory owned by the connection.

assign_headers() breaks that rule for one specific request shape:

  • the request has a Content-Type header
  • it has no Content-Length
  • it has no body, because the client already set END_STREAM on the HEADERS frame

For that request, the code adds a Content-Length: 0 header. In 2.4.55 through 2.4.70, it writes that header into req->headers. That’s the stream’s shared header table. It should go into r->headers_in, the copy that belongs to the single request.

If the shared table is already full, the write needs a new node. That node comes from the connection thread’s lock-free allocator. If the connection thread is allocating or freeing on the same list at that moment, both threads take the same node. The heap is corrupted.

The upstream fix is one line. It was cherry-picked from trunk in commit 824beab:

diff

- apr_table_setn(req->headers, "Content-Length", "0");
+ apr_table_setn(r->headers_in, "Content-Length", "0");

The patch moves the write to the request’s private table. That’s the whole fix. Because it’s so small, defenders should treat the root cause as real and well understood. That holds even while the exploitation question is still open.

Exploit path

  1. Entry point. An unauthenticated client opens an HTTP/2 connection to an Apache server in the affected range. It can be h2 over TLS or h2c in cleartext. No login, header or cookie is needed.
  2. Trigger. The client sends a request with no body. It has a Content-Type header, no Content-Length, and END_STREAM set on the HEADERS frame. It also carries enough extra headers to fill the stream’s header table, so the added header forces a fresh allocation. Public reproductions used about 80 headers. They tuned filler sizes so the stream pool node had only a few hundred bytes free. That’s where corruption was most reliable. Bursts of streams keep the connection allocator’s free list short and raise the odds of a collision.
  3. Impact. The worker thread and the connection thread take the same memory node. The connection thread then follows a corrupted pointer. In one vendor lab, that pointer held 0x4141414141414141. Those are filler bytes the attacker sent. So attacker-controlled data does reach a dereferenced pointer. The most common result is a worker crash. That drops every in-flight request on the connection. If an attacker can steer the corruption into a function pointer, code runs as the httpd worker user. That’s www-data on Debian and Ubuntu, and apache on RHEL. It’s enough to read site code, config and stored secrets. In Kubernetes, it’s enough to reach the pod service-account token and the cloud metadata identity.

One limit matters for weaponization. mod_http2 accepts only visible ASCII in header values. So any binary payload bytes would have to come in request bodies, not headers. That makes a working RCE chain harder. It’s part of why public evidence stops at corruption and crashes.

Affected Versions

PackageVulnerable VersionsFixed VersionNotes
Apache HTTP Server (bundled mod_http2)2.4.55 to 2.4.702.4.71Only exposed when HTTP/2 is negotiated
Standalone mod_h2 (icing/mod_h2)2.0.8 to 2.0.42NoneRepo archived June 9, 2026; move to 2.4.71 bundled module
mod_http2 below 2.0.8Not affectedn/aVulnerable code absent
RHEL 10Before mod_http2-2.0.29-5.el10_3.1mod_http2-2.0.29-5.el10_3.1RHSA-2026:98978; rated Important
RHEL 9Before mod_http2-2.0.26-7.el9_9.1mod_http2-2.0.26-7.el9_9.1RHSA-2026:98981; rated Important
RHEL 6, 7, 8Not affectedn/aVulnerable code absent
Debian sidBefore 2.4.71-1apache2 2.4.71-1Stable (bookworm, trixie, forky) still vulnerable on Nov 12
Ubuntu 22.04 / 24.04 / 26.04Backported module in rangeNone on Nov 1222.04 banner reads 2.4.52 but ships mod_http2 2.0.42
Amazon Linux 2 / 2023 / 2027 PreviewIn rangePendingAmazon lists CVSS 9.8
Official httpd Docker imageBefore 2.4.71tag 2.4.71Published November 12
cPanel EasyApache 4ea-apache24-mod_http2 at 2.4.70None on Nov 12Moved to 2.4.70 on Nov 11, still affected

Red Hat rates the flaw Important on RHEL 9 and 10, not Critical. Those packages give each HTTP/2 stream its own allocator, which makes exploitation harder. Upstream builds don’t get that benefit.

Exposure Analysis

EnvironmentRisk LevelReason
Internet-exposed services negotiating h2/h2cCriticalDirect unauthenticated reach to the vulnerable path
Services behind a proxy that speaks HTTP/2 to originHighmod_http2 is still reached if the proxy uses h2 upstream or the origin port is directly reachable
CI/CD pipelines running Apache imagesHighBuild and deploy runners hold tokens and registry credentials
Cloud workloads in KubernetesHighCode execution as the worker user exposes the pod service-account token and metadata identity
Developer environmentsMediumLocal Apache instances with HTTP/2 enabled for testing

Public web stats give an upper bound. They don’t give an exact count.

W3Techs ranks Apache third among web servers, at 23.7 percent of sites. HTTP/2 is negotiated on 35.1 percent of all websites and 51.3 percent of the top million.

Many of those HTTP/2 sessions end at a CDN, not at an Apache origin. So the real number of vulnerable origins that speak HTTP/2 is lower than any version-only estimate. At the time of writing, no Shodan or Censys count for this CVE was published. Treat any internet-wide number you see as unverified.

[IMAGE 2: “Am I exposed?” decision flow] Place here, at the end of “Exposure Analysis” and before “Real-World Impact”. Alt text: Decision flow for CVE-2026-119618 exposure: Apache version 2.4.55 to 2.4.70, HTTP/2 negotiated via h2 or h2c, and no proxy downgrade to HTTP/1.1 means the server is reachable.

Real-World Impact

Today, the proven outcome is denial of service. Public reproductions crash Apache worker processes on demand. Every in-flight request on that connection is dropped. Repeat the trigger and the outage keeps going. That alone is a reason to act fast on internet-facing hosts.

Remote code execution is credible, but not proven in public.

Apache’s advisory says the corruption can lead to code execution. That’s the standard call for this bug class. Red Hat goes further. It says public research has shown a reliable exploit against a default-configured server. But neither Red Hat nor anyone else names or links that research, and we found no public exploit that matches.

No in-the-wild exploitation has been reported. The public repos support the cautious view. The strongest proof of concept reproduces heap corruption and sanitizer crashes on instrumented builds. It says clearly that it doesn’t deliver a payload. It also runs in a non-default configuration.

For prioritization, treat RCE as plausible, because attacker data reaches a dereferenced pointer. Just keep in mind that no ready-made exploit is public, and the ASCII-only header limit makes a full chain harder.

If an attacker does get code execution, realistic next steps are:

  • pulling secrets from config and runtime memory
  • dropping a web shell into the document root
  • in Kubernetes, moving through the pod service-account token and cloud metadata identity into the wider environment

Detection Guidance

Confirm HTTP/2 is actually negotiated

The version range is needed, but it’s not enough. A server in range that never speaks h2 or h2c can’t be reached through this bug.

Check the loaded module and every Protocols directive. That includes the ones inside virtual hosts and included files:

bash

apachectl -v                                              # version
apachectl -M 2>/dev/null | grep -i http2                  # is mod_http2 loaded
grep -rniE '^\s*Protocols' /etc/apache2 /etc/httpd 2>/dev/null
curl -sI --http2 https://host/ | head -1                  # HTTP/2 200 means h2
curl -sI --http2-prior-knowledge http://127.0.0.1/ | head -1   # tests h2c

A Protocols line inside a virtual host overrides the global setting. Read every match, not just the first one.

Account for proxies

The attack needs an HTTP/2 connection to Apache itself.

If a CDN or load balancer ends the client’s HTTP/2 and talks HTTP/1.1 to the origin, mod_http2 is never reached. You lose that protection if the proxy uses HTTP/2 to the origin. You also lose it if the origin port can be reached directly.

Test from outside, and test on the host with curl --resolve host:443:127.0.0.1.

Log indicators

There are no confirmed attacker IOCs, because nobody has seen exploitation. The signals below come from public labs, not from real attacks.

What to hunt for:

  • clusters of Apache child processes exiting on a segmentation fault or abort, linked to HTTP/2 connections
  • general protection faults inside libapr and assertion aborts inside mod_http2
  • HTTP/2 requests with about 80 headers, a Content-Type header, no Content-Length, and END_STREAM on the HEADERS frame, arriving in bursts across many streams on a few connections

After a suspected hit, look for:

  • processes spawned by the httpd or apache2 user
  • new files in document roots
  • the httpd user reading the Kubernetes service-account token path or calling the cloud metadata endpoint

Scanner coverage

At publication, NVD had no CPE or CVSS metrics. Scanners that depend on NVD may lag or show N/A severity.

Use vendor feeds for package truth: Red Hat OVAL and CSAF, the Debian security tracker, and Amazon ALAS.

SBOM and SCA tools should match the mod_http2 module version in the 2.0.8 to 2.0.42 range, not just the httpd version. That’s how backported builds like Ubuntu 22.04 get caught. For containers, rebuild images. Don’t rely on scanning a running banner.

Verification steps for teams

  1. List every Apache host. Record its version and loaded modules.
  2. For each host, test whether h2 and h2c are actually negotiated, from outside and locally.
  3. Check the installed package release string (rpm -q mod_http2, dpkg -l apache2-bin), not the Server: banner. Fixed packages keep upstream-looking version numbers.
  4. Run external attack surface discovery for hosts that advertise h2 via ALPN on 443 or accept h2c on 80. Put the ones with Apache banners first.
  5. Cross-check SBOMs for the mod_http2 module version. This catches backported builds that version-only scans miss.

Remediation Guidance

Immediate actions

Upgrade to the fixed build and restart. Don’t just reload, or the old binary keeps running.

  1. RHEL 9 and 10: run dnf update mod_http2, restart httpd, and check rpm -q mod_http2 against the package version in the RHSA. RHEL 8 and earlier need nothing.
  2. Upstream builds and containers: move to Apache 2.4.71 or the httpd:2.4.71 image. Then check with apachectl -v that the running binary is the new one.
  3. Standalone mod_h2 users: there is no newer standalone release. The project was archived on June 9, 2026. Move to the mod_http2 bundled with 2.4.71, or turn off HTTP/2.

The same 2.4.71 release fixes two related flaws that turning off HTTP/2 won’t fix: CVE-2026-106023 in mod_md (rated important) and CVE-2026-109163 in mod_vhost_alias (rated low). Patching is the only complete fix.

Temporary mitigations if patching is delayed

Debian stable, Ubuntu, Amazon Linux, AlmaLinux, Rocky, cPanel and JBoss Core Services may not have a fix yet. On those hosts, turn off HTTP/2 where you don’t need it:

  1. Set Protocols http/1.1 globally and remove h2 and h2c from every virtual host. On Debian and Ubuntu, you can run a2dismod http2 instead.
  2. Run apachectl configtest, reload, and run the curl checks again. Confirm h2 and h2c no longer negotiate.
  3. Browsers fall back to HTTP/1.1 on their own. Users behind a CDN keep HTTP/2 at the edge. So the cost for users is small.

Apache doesn’t publish a workaround. The public lab’s mitigated container shows this mitigation works. Turn HTTP/2 back on only after the patched package is confirmed on the host.

In Kubernetes, limit the blast radius:

  • set automountServiceAccountToken: false for front-end pods
  • give each workload a least-privilege cloud identity
  • use egress NetworkPolicies to block the API server and metadata endpoints

Phoenix Security Recommendations

This advisory is moving fast and the facts are still contested. Phoenix Security turns it into a backlog with owners.

Contextual deduplication pulls CVE-2026-119618 findings from SCA, container and external attack surface scanners into one item per affected service. Your team doesn’t triage the same host three times from three tools.

Reachability analysis separates Apache instances that actually speak HTTP/2 from those that only sit in the version range. That’s the line that decides if this flaw is reachable at all. It also catches the backport trap, where a 2.4.52 banner hides an in-range mod_http2 module.

Attack surface management finds the internet-exposed services that advertise h2 and h2c. Those go to the front of the queue.

Remediation campaigns close the loop. Create a campaign scoped to the affected module. Assign owners by service. Track the upgrade to 2.4.71 or the temporary Protocols http/1.1 mitigation. Verify runtime exposure once the fix lands.

Vulnerability ownership attribution maps each finding to the right team automatically. No in-range, internet-facing Apache host is left without a named owner while the exploitation question stays open.

Protect yourself with the latest threat intelligence, get free access to Phoenix Blue Today

External References

  1. Apache HTTP Server security advisory, vulnerabilities_24
  2. oss-security disclosure: CVE-2026-119618, mod_http2 heap corruption and RCE in assign_headers
  3. Apache httpd fix commit 824beab (assign_headers update table)
  4. Red Hat CVE page: CVE-2026-119618
  5. The Hacker News: Critical Apache HTTP/2 flaw coverage, November 2026
  6. Help Net Security: Anthropic OSS Scanner announcement
  7. oss-security: prior mod_http2 flaw CVE-2026-23918, May 2026
  8. Debian security tracker: CVE-2026-119618 (sid fixed in apache2 2.4.71-1)
  9. Amazon Linux security center: CVE-2026-119618 (pending)

Daniel is a security engineer and vulnerability management expert with extensive experience designing and implementing AppSec programmes for global enterprises. He has previously led security teams at major technology firms across the US and Europe, driving initiatives that bridge the gap between development velocity and security outcomes. Daniel holds multiple industry certifications and frequently speaks at security conferences.

Discuss this blog with our community on Slack

Join our AppSec Phoenix community on Slack to discuss this blog and other news with our professional security team

From our Blog

Node.js fixed 16 runtime vulnerabilities on November 11, 2026, and 7 are High. CVE-2026-123864 can leak TLS private keys and other users’ requests from HTTPS servers. CVE-2026-123863 crashes a default HTTP/2 server with one unauthenticated request. There is no workaround: upgrade to 22.23.5, 24.22.3 or 26.13.1.
Daniel Reeves
Frontier models made vulnerability discovery cheap: 948 Linux privilege escalations at about $1,280 each. Fixing didn’t speed up. Only 1 in 8 disclosed AI findings has a known upstream patch, and AI-found bugs are exploited at 1.3%, the historical norm. The bottleneck is verified remediation, owned by a team and proven by the next scan.
Francesco Cipollone
Derek

Derek Fisher

Head of product security at a global fintech

Derek Fisher – Head of product security at a global fintech. Speaker, instructor, and author in application security.

Derek is an award winning author of a children’s book series in cybersecurity as well as the author of “The Application Security Handbook.” He is a university instructor at Temple University where he teaches software development security to undergraduate and graduate students. He is a speaker on topics in the cybersecurity space and has led teams, large and small, at organizations in the healthcare and financial industries. He has built and matured information security teams as well as implemented organizational information security strategies to reduce the organizations risk.

Derek got his start in the hardware engineering space where he learned about designing circuits and building assemblies for commercial and military applications. He later pursued a computer science degree in order to advance a career in software development. This is where Derek was introduced to cybersecurity and soon caught the bug. He found a mentor to help him grow in cybersecurity and then pursued a graduate degree in the subject.

Since then Derek has worked in the product security space as an architect and leader. He has led teams to deliver more secure software in organizations from multiple industries. His focus has been to raise the security awareness of the engineering organization while maintaining a practice of secure code development, delivery, and operations.

In his role, Jeevan handles a range of tasks, from architecting security solutions to collaborating with Engineering Leadership to address security vulnerabilities at scale and embed security into the fabric of the organization.

Jeevan Singh

Jeevan Singh

Founder of Manicode Security

Jeevan Singh is the Director of Security Engineering at Rippling, with a background spanning various Engineering and Security leadership roles over the course of his career. He’s dedicated to the integration of security practices into software development, working to create a security-aware culture within organizations and imparting security best practices to the team.
In his role, Jeevan handles a range of tasks, from architecting security solutions to collaborating with Engineering Leadership to address security vulnerabilities at scale and embed security into the fabric of the organization.

James

James Berthoty

Founder of Latio Tech

James Berthoty has over ten years of experience across product and security domains. He founded Latio Tech to help companies find the right security tools for their needs without vendor bias.

christophe

Christophe Parisel

Senior Cloud Security Architect

Senior Cloud Security Architect

Chris

Chris Romeo

Co-Founder
Security Journey

Chris Romeo is a leading voice and thinker in application security, threat modeling, and security champions and the CEO of Devici and General Partner at Kerr Ventures. Chris hosts the award-winning “Application Security Podcast,” “The Security Table,” and “The Threat Modeling Podcast” and is a highly rated industry speaker and trainer, featured at the RSA Conference, the AppSec Village @ DefCon, OWASP Global AppSec, ISC2 Security Congress, InfoSec World and All Day DevOps. Chris founded Security Journey, a security education company, leading to an exit in 2022. Chris was the Chief Security Advocate at Cisco, spreading security knowledge through education and champion programs. Chris has twenty-six years of security experience, holding positions across the gamut, including application security, security engineering, incident response, and various Executive roles. Chris holds the CISSP and CSSLP certifications.

jim

Jim Manico

Founder of Manicode Security

Jim Manico is the founder of Manicode Security, where he trains software developers on secure coding and security engineering. Jim is also the founder of Brakeman Security, Inc. and an investor/advisor for Signal Sciences. He is the author of Iron-Clad Java: Building Secure Web Applications (McGraw-Hill), a frequent speaker on secure software practices, and a member of the JavaOne Rockstar speaker community. Jim is also a volunteer for and former board member of the OWASP foundation.

Join our Mailing list!

Get all the latest news, exclusive deals, and feature updates.

The IKIGAI concept
Protected By
Shield Security PRO