CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-49975

CVE-2026-49975: Remote Denial of Service via HTTP/2 HPACK Cookie Memory Amplification in Apache HTTP Server

Amit Schendel
Amit Schendel
Senior Security Researcher

Jun 18, 2026·7 min read·9 visits

Executive Summary (TL;DR)

A memory amplification bug in Apache's mod_http2 allows remote unauthenticated attackers to exhaust server RAM using small HTTP/2 header streams, causing a Denial of Service.

CVE-2026-49975 describes a high-severity remote Denial of Service (DoS) vulnerability in the Apache HTTP Server's mod_http2 module. Unauthenticated attackers can exploit the HPACK compression and cookie-merging behavior to trigger severe, quadratic memory allocation. This resource exhaustion is maintained by manipulating the HTTP/2 flow-control window, ultimately forcing an Out-of-Memory condition on the server host.

Vulnerability Overview

The vulnerability designated as CVE-2026-49975 is a remote Denial of Service (DoS) flaw affecting the Apache HTTP Server's mod_http2 module. Specifically, this issue is present in versions 2.4.17 through 2.4.67 of the HTTP server. The module is responsible for handling connections using the HTTP/2 protocol, establishing stream priorities, and processing header compression.

The attack surface exists on any internet-facing endpoint running the vulnerable module with HTTP/2 enabled. The vulnerability belongs to the CWE-789 class, which involves allocating memory with an excessive size value or accumulating repeated unchecked allocations. An unauthenticated remote attacker can exploit this flaw to cause severe memory exhaustion, leading to a complete Denial of Service across the target system.

The exploitation technique combines HPACK dynamic table referencing with HTTP/2 stream flow control parameters. Because the attack relies entirely on protocol-compliant structures, standard web application firewalls and intrusion prevention systems often fail to recognize the request sequence as malicious. The result is a highly effective, low-bandwidth attack that can crash major web server instances.

Root Cause Analysis

The root cause of CVE-2026-49975 lies in how the mod_http2 module processes HTTP/2 headers compressed with the HPACK protocol (RFC 7541). HPACK optimizes header transmission by maintaining a dynamic table of key-value pairs. Senders can transmit a single byte to reference a previously indexed header. In this vulnerability, the attacker targets how split cookie crumbs are processed and merged by the server.

According to the HTTP/2 specification (RFC 9113 §8.2.3), clients are permitted to split a single Cookie header into separate header fields for transmission. When mod_http2 encounters multiple cookie fields in a stream, it concatenates them using a semicolon and space separator. This concatenation relies on the Apache Portable Runtime (APR) memory pool structure (apr_pool_t) assigned to the active connection stream.

Because APR memory pools can only free memory concurrently when the parent stream is destroyed, every call to the concatenation function (apr_psprintf) allocates a fresh string buffer in the pool. The old, partially built cookie strings remain orphaned inside the pool but continue to consume memory. This design choice creates a quadratic memory growth complexity relative to the number of cookie crumbs processed. Senders can bypass the standard LimitRequestFields protection because the merging routine fails to increment the processed header count.

Code Analysis

To understand the exact mechanics, we analyze the vulnerable code path in the mod_http2/h2_util.c file within the req_add_header function. The original processing block checked for the presence of multiple cookies and attempted to merge them directly into the current memory pool.

/* Vulnerable code structure */
static apr_status_t req_add_header(apr_table_t *headers, apr_pool_t *pool,
             && !ap_cstr_casecmpn("cookie", (const char *)nv->name, nv->namelen)) {
    existing = apr_table_get(headers, "cookie");
    if (existing) {
        /* Cookie headers come separately in HTTP/2, but need to be merged */
        apr_table_setn(headers, "Cookie",
                       apr_psprintf(pool, "%s; %.*s", existing,
                                    (int)nv->valuelen, nv->value));
        return APR_SUCCESS;
    }
}

In the code above, there is no check on whether the incoming cookie crumb contains any actual data. Furthermore, the successfully merged crumb does not set any flag to signify that a header was added. As a result, the parser processes thousands of individual crumbs without updating the tracker that enforces the LimitRequestFields boundary.

/* Patched code structure */
static apr_status_t req_add_header(apr_table_t *headers, apr_pool_t *pool,
             && !ap_cstr_casecmpn("cookie", (const char *)nv->name, nv->namelen)) {
    existing = apr_table_get(headers, "cookie");
    if (existing) {
        if (!nv->valuelen)
            return APR_SUCCESS;
        /* Cookie headers come separately in HTTP/2, but need to be merged */
        apr_table_setn(headers, "Cookie",
                       apr_psprintf(pool, "%s; %.*s", existing,
                                    (int)nv->valuelen, nv->value));
        *pwas_added = 1; /* Fix: Enforce LimitRequestFields */
        return APR_SUCCESS;
    }
}

The patched code resolves both flaws. First, it immediately returns APR_SUCCESS if the incoming cookie value length is zero, halting allocation attempts. Second, it sets the pointer *pwas_added = 1. This informs the caller that an additional header field was processed, allowing the server to enforce the LimitRequestFields restriction. This modification terminates the cumulative loop before significant host resources are consumed.

Exploitation Methodology

Exploitation of CVE-2026-49975 requires no prior authentication and can be completed remotely over any network connection where HTTP/2 is negotiated. The attacker begins by initializing an HTTP/2 connection and establishing flow control parameters. Crucially, the attacker transmits a SETTINGS frame that defines the initial stream window size (SETTINGS_INITIAL_WINDOW_SIZE) to exactly 0 bytes.

Next, the attacker sends a request containing standard pseudo-headers and defines a cookie entry to seed the HPACK dynamic table, typically mapped to index 62. The attacker then transmits thousands of one-byte indexed references pointing to this entry. This action triggers the vulnerable merging routine in the Apache process, resulting in the quadratic allocation of memory pools.

Because the flow control window is set to 0, the server is forbidden from flushing the HTTP response payload over the network. The server is forced to hold the entire request state in RAM, keeping the bloated memory pool active. To maintain this state without triggering connection or socket timeouts, the attacker sends a slow, periodic drip of 1-byte WINDOW_UPDATE frames or standard PING frames. This holds the TCP connection open indefinitely, pinning gigabytes of memory across multiple parallel streams.

Impact Assessment

The impact of CVE-2026-49975 is classified as high-severity Denial of Service. While some unauthorized Proof-of-Concept sources attribute a CVSS score of 9.8 to this CVE, the formal consensus rating is 7.5. The primary security consequence is complete service unavailability due to physical memory exhaustion.

An attacker can open multiple concurrent TCP connections, each containing dozens of active HTTP/2 streams. By driving memory allocation into a quadratic curve and holding the connection state open, a single resource-constrained client can exhaust several gigabytes of server RAM. This triggers swap-space thrashing, degrading operating system performance for all co-hosted services.

Ultimately, the kernel-level Out-Of-Memory (OOM) killer is triggered. This routinely results in the forceful termination of the Apache parent or child processes, rendering the web server offline. Because the attack requires negligible bandwidth to construct the compressed HPACK payloads, it acts as a significant asymmetric threat to web infrastructure.

Remediation Guidance

Remediating CVE-2026-49975 requires updating the affected Apache HTTP Server installation to version 2.4.68 or later. If utilizing standalone module packages, the mod_http2 library must be upgraded to version 2.0.41 or higher. These updates contain the necessary checks to limit merged headers and prevent empty-crumb processing.

In environments where immediate software upgrades are not possible, administrators should disable HTTP/2 support to mitigate risk. This can be achieved by removing h2 and h2c from the configuration. Specifically, modify the Protocols directive in httpd.conf to fallback to HTTP/1.1.

# Disable HTTP/2 to prevent HPACK exploitation
Protocols http/1.1

Additionally, defense-in-depth measures should be deployed to limit the blast radius of memory exhaustion. Administrators can configure systemd memory constraints or shell limits on Apache worker processes. Setting a maximum virtual memory limit ensures that any abnormal worker process is safely terminated and respawned before physical system RAM is exhausted.

Fix Analysis (1)

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
EPSS Probability
1.31%
Top 33% most exploited

Affected Systems

Apache HTTP Server (mod_http2)

Affected Versions Detail

Product
Affected Versions
Fixed Version
Apache HTTP Server (mod_http2)
Apache Software Foundation
2.4.17 through 2.4.672.4.68
AttributeDetail
CWE IDCWE-789
Attack VectorNetwork
CVSS Score7.5 (High)
EPSS Score0.01313
EPSS Percentile66.94%
ImpactRemote Denial of Service
Exploit StatusProof-of-Concept Available
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1498Network Denial of Service
Impact
T1499Endpoint Denial of Service
Impact
CWE-789
Memory Allocation with Excessive Size Value

The software allocates memory based on an untrusted, attacker-controlled size value without performing proper validation, or performs multiple repeated allocations that accumulate to consume excessive physical memory.

Known Exploits & Detection

GitHub (mrx-arafat)Multi-stream Python script utilizing TLS targeting classic and nginx modes.
GitHub (EQSTLab)Local h2c cleartext Python script estimating memory amplification.
GitHub (LSG-PolarBear)GUI-based proof of concept exploit repository for CVE-2026-49975.

Vulnerability Timeline

Protocol vulnerability reported to Nginx team
2026-04-01
Nginx release 1.29.8 containing mitigation
2026-04-02
Vulnerability reported to Apache Security Team
2026-05-26
Upstream standalone patch committed by Stefan Eissing
2026-05-27
Patch backported into Apache 2.4.x branch
2026-06-02
Public blog disclosure of HTTP/2 Bomb by Calif.IO
2026-06-03
Apache HTTP Server officially releases v2.4.68
2026-06-08

References & Sources

  • [1]CVE Official Record
  • [2]Apache HTTP Server Security Advisories
  • [3]Upstream Bugfix Commit
  • [4]Calif.IO HTTP/2 Bomb Discovery Blog
  • [5]OSS-Security List Disclosure
  • [6]OSS-Security Official Announcement
  • [7]Debian Security Announcement
  • [8]mrx-arafat Proof-of-Concept Exploit
  • [9]EQSTLab PoC Repository
  • [10]LSG-PolarBear PoC Exploit

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•2 minutes ago•CVE-2026-12568
6.5

CVE-2026-12568: Path Traversal and Arbitrary File Write in BBOT postman_download Module

CVE-2026-12568 is a path traversal vulnerability (CWE-22) in the postman_download module of BBOT (Babbage Border Obsession Tool) version 2.1.0 through 2.8.5. The vulnerability allows an attacker to perform arbitrary file writes on the local machine running the BBOT scan via a maliciously named remote Postman workspace.

Alon Barad
Alon Barad
0 views•7 min read
•34 minutes ago•CVE-2026-12567
2.2

CVE-2026-12567: Symlink Following Vulnerability in BBOT github_workflows Module

The github_workflows module in BBOT (Black Lantern Security OSINT framework) versions 2.0.0 through 2.8.4 constructs local directory paths from user-controlled repository and owner names without validating for symbolic links. A local attacker sharing the scan directory can pre-plant a symlink at the predictable output path, forcing BBOT to write downloaded workflow artifacts or run logs to an arbitrary location on the filesystem.

Amit Schendel
Amit Schendel
4 views•6 min read
•about 3 hours ago•GHSA-47QP-HQVX-6R3F
7.5

GHSA-47QP-HQVX-6R3F: Remote Memory Exhaustion (Denial of Service) in JLine3 Telnet Server

An unauthenticated remote memory exhaustion vulnerability in the JLine3 Telnet server allows attackers to crash the host Java Virtual Machine (JVM). The flaw exists in the processing of the NEW-ENVIRON option, where the server accepts an arbitrary number of environment variables without limits, storing them in an unconstrained HashMap. Sending as little as 3.25 MB of payload data can exhaust a standard JVM heap and trigger an OutOfMemoryError. This vulnerability affects applications integrating the remote-telnet module of JLine3.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 20 hours ago•CVE-2026-5038
5.3

CVE-2026-5038: Denial of Service via Incomplete File Cleanup in Multer diskStorage Engine

CVE-2026-5038 is a critical denial of service vulnerability in the Node.js Multer middleware. When utilizing the diskStorage engine, connection termination or validation failures leave partial files orphaned on the local filesystem due to stream-destruction signal propagation failures in Node's piping mechanism. Remote unauthenticated attackers can exploit this to fill server disks and induce system crashes.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 21 hours ago•CVE-2026-5079
7.5

CVE-2026-5079: Denial of Service via Uncontrolled Resource Consumption in Multer Multipart Parser

CVE-2026-5079 is a high-severity Denial of Service (DoS) vulnerability in the Node.js package 'multer'. The vulnerability resides in how its internal dependency, 'append-field', processes deeply nested bracket structures in multipart form field names. If an attacker submits a field name with an excessive number of nested brackets, the parsing process crashes the Node.js runtime environment or exhausts system resources, causing a complete denial of service.

Amit Schendel
Amit Schendel
8 views•6 min read
•about 21 hours ago•CVE-2026-9595
5.3

CVE-2026-9595: WebSocket Proxying Vulnerability in webpack-dev-server leading to Host/Origin Validation Bypass

webpack-dev-server (WDS) is vulnerable to an Origin Validation Error (CWE-346) and a Confused Deputy vulnerability (CWE-441) due to path normalization discrepancies in its upgrade handling. When a proxy is configured with a broad context and WebSocket support is enabled, the proxy middleware intercepts internal Hot Module Replacement (HMR) WebSocket upgrade requests. This forwards the browser's credentials (such as Cookies and Origin headers) to the backend target, bypassing built-in security controls and corrupting the WebSocket connection.

Amit Schendel
Amit Schendel
9 views•7 min read