Thirteen CVEs walk into a bar, but the bouncer only cares about the one with a megaphone and a gas can
Apache 2.4.68 patches 13 CVEs spanning use-after-free conditions (CVE-2026-29167 in mod_ldap, CVE-2026-48913 in mod_http2), heap/stack buffer overflows (CVE-2026-34355 in mod_proxy_html, CVE-2026-42536 in mod_xml2enc, CVE-2026-34356 in ProxyPassReverseCookieMap), a DoS memory bomb (CVE-2026-49975 in mod_http2), a privilege-escalation via .htaccess expressions (CVE-2026-44119), an XSS in mod_proxy_ftp (CVE-2026-29170), an OOB read in merge_response_headers (CVE-2026-43951), a mod_ssl OCSP over-read (CVE-2026-44185), a mod_proxy_ftp infinite loop (CVE-2026-44186), a heap underflow in ap_regname (CVE-2026-44631), and a mod_dav_fs path-traversal (CVE-2026-42535). All affect Apache 2.4.0–2.4.67 except CVE-2026-48913 (2.4.55–2.4.67) and CVE-2026-49975 (2.4.17–2.4.67).
The NVD's CVSS v3.1 of 9.8 Critical is driven entirely by CVE-2026-29167 (mod_ldap UAF), but this score wildly overstates real-world risk. Red Hat independently scored CVE-2026-29167 at 4.6 Low — noting mod_ldap is not loaded by default, per-directory LDAP config is rare, and httpd's worker-process model kills RCE reliability. Apache's own project rated it *Low*. The operationally relevant headline CVE is CVE-2026-49975 (HTTP/2 Bomb): unauthenticated, remote, DoS-only, but with 11+ public PoC repositories, an EPSS of 0.343, and applicability to any server with HTTP/2 enabled — which is most of them. Tenable's VPR of 7.6 (High) is the most honest score in the room. The vendor-implied CRITICAL is wrong; HIGH is right.
5 steps from start to impact.
Fingerprint HTTP/2 support on target
Protocols h2 http/1.1 (extremely common, often default) will negotiate HTTP/2. Shodan, Censys, or a simple curl --http2 -I confirms the protocol. No authentication or special position is required.- Target Apache instance is reachable over the network on port 443 or 80
- None — HTTP/2 is enabled by default in most modern Apache configs and virtually all public-facing deployments
Send HPACK compression bomb frames
mrx-arafat/CVE-2026-49975-POC, Manisso/http2-bomb), the attacker crafts HTTP/2 HEADERS frames containing thousands of indexed references to a single nearly-empty header entry. Each 1-byte wire reference forces ~70 bytes of per-entry bookkeeping on the server, achieving a 4,000× amplification ratio. The attack requires only a commodity internet connection (~100 Mbps).- Network path to the HTTP/2 endpoint (no authentication needed)
- A working PoC tool — at least 11 public repositories exist on GitHub
- An inline CDN, WAF, or L7 reverse proxy (e.g., Cloudflare, AWS ALB, HAProxy with the June 2026 patch) that terminates HTTP/2 before it reaches Apache will absorb or block the bomb
- HTTP/2 connection-limit directives (
H2MaxSessionStreams,H2MaxWorkers) partially reduce amplification but don't fully prevent it
Pin server memory with flow-control stall
WINDOW_UPDATE frames reset the server's send-timeout, keeping all allocated memory pinned indefinitely. This is the HTTP/2 analogue of Slowloris. Combined with the HPACK bomb from step 2, memory grows monotonically and cannot be reclaimed.- The HTTP/2 connection remains open (typical idle timeout is 5+ minutes)
- Aggressive HTTP/2 idle-timeout tuning (
H2Timeout,Timeout) can limit the window - Process-level memory limits (
RLimitMEM, cgroups, systemdMemoryMax) trigger OOM-kill on the worker, not the parent, allowing recovery
Server OOMs; service becomes unavailable
- No upstream HTTP/2 termination absorbing the attack
- No per-process memory cgroups killing runaway workers fast enough
- Production deployments behind a CDN or cloud load balancer never expose raw Apache HTTP/2 to the internet
- Kubernetes/container environments with memory limits will OOM-kill the pod and reschedule, limiting blast radius to seconds of downtime
dmesg/journalctl. Health-check failures in load balancer. Synthetic monitoring (e.g., Pingdom, Datadog HTTP check) alerts on 5xx or timeout.(Alternate chain) Trigger mod_ldap UAF for potential RCE
mod_ldap and uses LDAP directives in a per-directory context (.htaccess or <Directory> block), a remote attacker can trigger a use-after-free in the configuration-merge code path. The freed memory *could* be re-populated with attacker-controlled data, theoretically enabling code execution — but Red Hat's analysis concludes httpd's multi-process model and ASLR make reliable RCE *extremely unlikely*. Realistic impact is a worker-process crash (DoS).- mod_ldap loaded (not default on any major distro)
- LDAP directives present in per-directory configuration context
- Attacker can reach a URL governed by the per-directory LDAP config
- mod_ldap is loaded on an estimated <10% of Apache deployments
- Per-directory LDAP config is a legacy pattern; most LDAP auth is in server-level config (not vulnerable)
- httpd's prefork/event MPM kills the child on crash; parent respawns — no persistent compromise
- ASLR + NX on modern Linux makes heap-spray RCE impractical
child pid XXXX exit signal Segmentation fault). Core dumps if CoreDumpDirectory is set.The supporting signals.
| In-the-wild exploitation | Not confirmed. CVE-2026-49975 is not in the CISA KEV catalog as of 2026-09-21. No named campaigns or threat-actor attribution. PoC-level exploitation is trivial but no reports of weaponized use against production targets. |
|---|---|
| Proof-of-concept availability | Widely available for CVE-2026-49975. At least 11 GitHub repositories: mrx-arafat/CVE-2026-49975-POC, Manisso/http2-bomb, 0xc03307b/CVE-2026-49975. Original disclosure by Quang Luong (Calif Security Research) on 2026-06-02. No public PoC exists for CVE-2026-29167 or other CVEs in this bundle. |
| EPSS (CVE-2026-49975) | 0.343 (34th percentile) — moderate exploitation probability within 30 days. Elevated relative to the bundle's other CVEs, which are all <0.01. |
| CISA KEV status | Not listed as of 2026-09-21. No federal remediation deadline imposed. |
| CVSS vectors | CVE-2026-29167: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 9.8 (NVD) vs 4.6 (Red Hat re-score). CVE-2026-49975: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H = 7.5. The 9.8 ignores environmental friction; the 7.5 reflects real operational risk. |
| Affected versions | All 13 CVEs: Apache 2.4.0–2.4.67 (broadest range). CVE-2026-48913: 2.4.55–2.4.67. CVE-2026-49975: 2.4.17–2.4.67. |
| Fixed versions | Upstream: 2.4.68 (released 2026-06-08). RHEL: httpd-2.4.68-1 via RHSA-2026:25042. Ubuntu 24.04: 2.4.58-1ubuntu8.13; 22.04: 2.4.52-1ubuntu4.21; 20.04: 2.4.41-4ubuntu3.23+esm5. Debian Bookworm: 2.4.67-1~deb12u3 / 2.4.68-1~deb12u1. Debian Bullseye LTS: 2.4.67-1~deb11u2 (DLA-4620-1). |
| Exposure footprint | Apache httpd holds ~35% web server market share (W3Techs/Netcraft June 2026). CVE-2026-49975 affects 880,000+ internet-facing servers with HTTP/2 enabled per Calif Security Research disclosure. The HTTP/2 Bomb also affects nginx, Envoy, IIS, and Cloudflare Pingora — this is a protocol-class flaw, not Apache-specific. |
| Disclosure timeline | CVE-2026-49975 disclosed 2026-06-02 by Quang Luong (discovered using OpenAI Codex). Apache 2.4.68 released 2026-06-08. All 13 CVEs published simultaneously. ~105 days since disclosure as of today. |
| Reporting researchers | CVE-2026-49975: Quang Luong, Calif Security Research. CVE-2026-29167: Not publicly attributed. CVE-2026-34355: Elhanan Haenel & Junhui Lee. CVE-2026-42536: Zhenpeng (Leo) Lin, depthfirst. |
Why this verdict
- NVD 9.8 is a phantom score. CVE-2026-29167's CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H assumes every Apache instance loads mod_ldap in per-directory config. Red Hat independently re-scored it to 4.6 after noting mod_ldap is non-default, per-directory LDAP config is rare, and httpd's process isolation kills RCE reliability. Apache's own project rated it *Low*. Adjustment: −5.2 points from NVD baseline for this CVE.
- CVE-2026-49975 is the real risk driver. Unauthenticated remote DoS with 4,000× amplification, 11+ public PoCs, EPSS 0.343, and applicability to any Apache with HTTP/2 enabled (the overwhelming majority). This is the CVE that will actually be used against your fleet. Its honest score of 7.5 is the correct baseline.
- Role multiplier: network-edge and reverse-proxy deployments. Apache frequently serves as the internet-facing TLS terminator and reverse proxy for application tiers. In this high-value role, the HTTP/2 Bomb chain succeeds with zero friction (unauthenticated, default config) and the blast radius is *service-level*: the entire application behind the proxy becomes unavailable. This is not fleet/domain/identity-scale — it's an availability hit to one service boundary. Verdict floor: HIGH.
- Role multiplier: mod_ldap authentication gateways. In the ~5–10% of Apache deployments using mod_ldap for authentication, CVE-2026-29167 theoretically enables code execution on an identity-adjacent component. However, Red Hat's analysis (CVSS 4.6, 'realistic impact is DoS') and the requirement for per-directory LDAP config (even rarer subset) prevent this from raising the floor above HIGH. If reliable RCE were demonstrated, this would be CRITICAL — but no PoC exists.
- Friction: CDN/WAF/cloud LB absorption. Enterprises routing traffic through Cloudflare, AWS ALB, Azure Front Door, or any HTTP/2-terminating proxy never expose raw Apache HTTP/2 to attackers. This applies to a large fraction of internet-facing deployments but is not universal — bare-metal and on-prem Apache instances directly on the internet remain fully exposed.
Why not higher?
CRITICAL would require reliable RCE or fleet/domain/identity-scale impact. The only RCE-capable CVE (CVE-2026-29167) requires mod_ldap in per-directory config, which Red Hat scores at 4.6 and calls 'unreliable for code execution.' The dominant CVE (CVE-2026-49975) is availability-only DoS. Apache httpd is not canonically a domain-controller-class or supply-chain-class component. No confirmed in-the-wild exploitation. No CISA KEV listing.
Why not lower?
MEDIUM would understate the risk of a trivially exploitable, unauthenticated remote DoS with 11+ public PoCs against a server holding 35% of global web traffic. CVE-2026-49975's EPSS of 0.343 is in the top third of all scored CVEs. The attack works on default configurations with no prerequisites beyond network reachability. Enterprises running Apache directly on the internet without an upstream CDN/WAF are at immediate risk of service disruption.
What to do — in priority order.
- Deploy HTTP/2 connection and stream limits immediately — Set
H2MaxSessionStreams 100,H2MaxWorkers 128, and reduceTimeout/H2Timeoutto 30s inhttpd.conf. This does not fully prevent the bomb but limits amplification factor and memory pinning duration. Deploy within the noisgate mitigation SLA of 30 days for HIGH severity. - Place Apache behind an HTTP/2-terminating reverse proxy or CDN — Route traffic through Cloudflare, AWS ALB, Azure Front Door, HAProxy (≥2.8.10 with June 2026 patch), or nginx (≥1.27.5) that terminates HTTP/2 before it reaches Apache. The upstream proxy absorbs the HPACK bomb. This is the single most effective compensating control.
- Apply per-process memory limits via cgroups/systemd — Set
MemoryMax=512M(or appropriate for your workload) on thehttpd.serviceunit. When a worker hits the limit, the OOM killer terminates only that process — not the parent. Combined withMaxRequestWorkers, this bounds the blast radius of memory exhaustion to brief worker restarts. - Disable mod_ldap if unused — Run
a2dismod ldap authnz_ldap(Debian/Ubuntu) or removeLoadModule ldap_modulefromhttpd.conf(RHEL). This completely eliminates CVE-2026-29167 (the 9.8 NVD score). If mod_ldap is required, move LDAP directives out of per-directory contexts (.htaccess,<Directory>) into server/vhost-level config to mitigate the per-directory merge UAF. - Disable unused proxy and content-filter modules — Unload
mod_proxy_html,mod_xml2enc,mod_proxy_ftp,mod_dav_fsif not in use. Each eliminates one or more CVEs in this bundle (CVE-2026-34355, CVE-2026-42536, CVE-2026-29170, CVE-2026-44186, CVE-2026-42535). Reducing loaded module count is free attack-surface reduction. - Upgrade to Apache 2.4.68 — The definitive fix. Apply within the noisgate remediation SLA of 180 days (by 2027-03-20 from today). Distro backports are available for RHEL, Ubuntu 20.04–26.04, Debian Bookworm/Bullseye/Trixie. Prioritize internet-facing instances first.
- Rate-limiting by IP — the HTTP/2 Bomb requires only a single TCP connection to exhaust server memory. IP-based rate limits operate at the request or connection-per-second level and won't throttle a single persistent connection performing HPACK amplification.
- mod_reqtimeout — this module limits time to receive request headers/body over HTTP/1.1 but does not govern HTTP/2 frame-level flow control. It will not prevent the Slowloris-style memory pinning in the HTTP/2 Bomb chain.
- Disabling HTTP/2 entirely — while technically effective against CVE-2026-49975, this is a sledgehammer that degrades performance for all clients and does not address the other 12 CVEs. Not recommended as a long-term control.
Crowdsourced verification payload.
Run on each target Apache host as root (or any user that can read the httpd binary and module config). Example: sudo bash check_apache_2.4.68.sh. The script checks the installed Apache version, identifies whether the HTTP/2 and LDAP modules are loaded (the two highest-risk attack surfaces), and outputs VULNERABLE, PATCHED, or UNKNOWN.
#!/usr/bin/env bash
# noisgate — Apache 2.4.68 multi-CVE check (Tenable 319665)
# Checks: version < 2.4.68, mod_http2 loaded (CVE-2026-49975),
# mod_ldap loaded (CVE-2026-29167)
# Exit codes: 1=VULNERABLE, 0=PATCHED, 2=UNKNOWN
set -euo pipefail
HTTPD=""
for candidate in httpd apache2 /usr/sbin/httpd /usr/sbin/apache2; do
if command -v "$candidate" &>/dev/null; then
HTTPD="$(command -v "$candidate")"
break
fi
done
if [[ -z "$HTTPD" ]]; then
echo "UNKNOWN — Apache httpd binary not found on this host."
exit 2
fi
# Extract version
VERSION_STR=$($HTTPD -v 2>/dev/null | grep -oP 'Apache/\K[0-9]+\.[0-9]+\.[0-9]+')
if [[ -z "$VERSION_STR" ]]; then
echo "UNKNOWN — could not parse Apache version from '$HTTPD -v'."
exit 2
fi
MAJOR=$(echo "$VERSION_STR" | cut -d. -f1)
MINOR=$(echo "$VERSION_STR" | cut -d. -f2)
PATCH=$(echo "$VERSION_STR" | cut -d. -f3)
echo "Detected Apache/$VERSION_STR at $HTTPD"
# Check for distro backports (package version may differ from binary version)
PKG_VER=""
if command -v rpm &>/dev/null; then
PKG_VER=$(rpm -q httpd --qf '%{VERSION}-%{RELEASE}' 2>/dev/null || true)
elif command -v dpkg-query &>/dev/null; then
PKG_VER=$(dpkg-query -W -f='${Version}' apache2 2>/dev/null || true)
fi
[[ -n "$PKG_VER" ]] && echo "Package version: $PKG_VER"
# Version comparison: vulnerable if < 2.4.68
if [[ "$MAJOR" -lt 2 ]] || \
{ [[ "$MAJOR" -eq 2 ]] && [[ "$MINOR" -lt 4 ]]; } || \
{ [[ "$MAJOR" -eq 2 ]] && [[ "$MINOR" -eq 4 ]] && [[ "$PATCH" -lt 68 ]]; }; then
VULN=true
else
VULN=false
fi
# Check loaded modules for risk context
MODULES=$($HTTPD -M 2>/dev/null || true)
H2_LOADED=false
LDAP_LOADED=false
[[ "$MODULES" == *"http2_module"* ]] && H2_LOADED=true
[[ "$MODULES" == *"ldap_module"* ]] && LDAP_LOADED=true
if $VULN; then
echo "VULNERABLE — Apache/$VERSION_STR is below 2.4.68."
$H2_LOADED && echo " [!] mod_http2 is loaded — exposed to CVE-2026-49975 (HTTP/2 Bomb DoS)."
$LDAP_LOADED && echo " [!] mod_ldap is loaded — exposed to CVE-2026-29167 (UAF, NVD 9.8 / RH 4.6)."
! $H2_LOADED && echo " [i] mod_http2 not loaded — CVE-2026-49975 does not apply."
! $LDAP_LOADED && echo " [i] mod_ldap not loaded — CVE-2026-29167 does not apply."
echo " Remediation: upgrade to Apache 2.4.68 or apply distro backport."
exit 1
else
echo "PATCHED — Apache/$VERSION_STR is 2.4.68 or later."
exit 0
fiWhat defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.