← Back to Feed CACHED · 2026-09-21 07:50:32 · CACHE_KEY tenable:319665
tenable:319665 · CWE-789 · Disclosed 2026-06-08

Apache 2.4.x < 2.4.68 Multiple Vulnerabilities

ASSESSED — NOISGATE
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

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.

"HTTP/2 Bomb with public PoCs drives real risk; the 9.8 mod_ldap UAF is a paper tiger for most shops"
02 · The Attack Path

5 steps from start to impact.

STEP 01

Fingerprint HTTP/2 support on target

The attacker sends an ALPN-negotiated TLS ClientHello or an h2c Upgrade request to the target. Any Apache 2.4.17+ with 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.
Conditions required:
  • Target Apache instance is reachable over the network on port 443 or 80
Where this breaks in practice:
  • None — HTTP/2 is enabled by default in most modern Apache configs and virtually all public-facing deployments
Detection/coverage: Protocol negotiation is normal traffic; fingerprinting alone is undetectable.
STEP 02

Send HPACK compression bomb frames

Using a publicly available PoC (e.g., 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).
Conditions required:
  • Network path to the HTTP/2 endpoint (no authentication needed)
  • A working PoC tool — at least 11 public repositories exist on GitHub
Where this breaks in practice:
  • 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
Detection/coverage: WAF vendors (Imperva, HAProxy, Cloudflare) have published specific signatures. IDS rules can flag abnormally high HPACK dynamic-table churn. No Sigma/Snort rule was published at time of disclosure.
STEP 03

Pin server memory with flow-control stall

The attacker advertises a zero-byte receive window (HTTP/2 flow control), preventing the server from flushing its response buffers. Periodic 1-byte 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.
Conditions required:
  • The HTTP/2 connection remains open (typical idle timeout is 5+ minutes)
Where this breaks in practice:
  • Aggressive HTTP/2 idle-timeout tuning (H2Timeout, Timeout) can limit the window
  • Process-level memory limits (RLimitMEM, cgroups, systemd MemoryMax) trigger OOM-kill on the worker, not the parent, allowing recovery
Detection/coverage: Monitor for sustained HTTP/2 connections with zero throughput. Connection-level metrics (bytes sent = 0, connection age > 60s) are a strong signal.
STEP 04

Server OOMs; service becomes unavailable

Within seconds to low minutes (depending on server RAM), the httpd worker processes exhaust available memory. The kernel OOM killer terminates workers. If the parent process respawns workers, the attacker simply re-establishes the bomb — the cycle continues until the attacker stops or the endpoint is firewalled. Impact is availability-only: no confidentiality or integrity breach occurs through this chain.
Conditions required:
  • No upstream HTTP/2 termination absorbing the attack
  • No per-process memory cgroups killing runaway workers fast enough
Where this breaks in practice:
  • 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
Detection/coverage: OOM-killer events in dmesg/journalctl. Health-check failures in load balancer. Synthetic monitoring (e.g., Pingdom, Datadog HTTP check) alerts on 5xx or timeout.
STEP 05

(Alternate chain) Trigger mod_ldap UAF for potential RCE

A separate attack path targets CVE-2026-29167. If the server loads 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).
Conditions required:
  • 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
Where this breaks in practice:
  • 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
Detection/coverage: Crash dumps in Apache error log (child pid XXXX exit signal Segmentation fault). Core dumps if CoreDumpDirectory is set.
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNot 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 availabilityWidely 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 statusNot listed as of 2026-09-21. No federal remediation deadline imposed.
CVSS vectorsCVE-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 versionsAll 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 versionsUpstream: 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 footprintApache 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 timelineCVE-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 researchersCVE-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.
04 · The Call

Final Verdict
= UNCHANGED to HIGH (7.5/10)

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.

05 · Compensating Control

What to do — in priority order.

  1. Deploy HTTP/2 connection and stream limits immediately — Set H2MaxSessionStreams 100, H2MaxWorkers 128, and reduce Timeout / H2Timeout to 30s in httpd.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.
  2. 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.
  3. Apply per-process memory limits via cgroups/systemd — Set MemoryMax=512M (or appropriate for your workload) on the httpd.service unit. When a worker hits the limit, the OOM killer terminates only that process — not the parent. Combined with MaxRequestWorkers, this bounds the blast radius of memory exhaustion to brief worker restarts.
  4. Disable mod_ldap if unused — Run a2dismod ldap authnz_ldap (Debian/Ubuntu) or remove LoadModule ldap_module from httpd.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.
  5. Disable unused proxy and content-filter modules — Unload mod_proxy_html, mod_xml2enc, mod_proxy_ftp, mod_dav_fs if 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.
  6. 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.
What doesn't work
  • 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.
06 · Verification

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.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/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
fi
07 · Sources

Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.