← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
tenable:201198 · CWE-116 · Disclosed 2024-07-01

Apache 2

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

This is a loaded nail gun left on the job site, but it only fires if your crew set it up the risky way

Tenable plugin 201198 is a bundle alert for Apache HTTP Server versions before 2.4.60, pulling in eight issues from the 2024-07-01 upstream advisory. The headline risk driver is CVE-2024-38475, where unsafe mod_rewrite substitutions in server/vhost context can let an unauthenticated attacker map a URL to a filesystem path that Apache is allowed to serve, leading to source disclosure or code execution. The bundle also includes config-specific issues in mod_proxy, mod_rewrite, backend-header handling, a Windows-only UNC/NTLM leak, and one HTTP/2 WebSocket DoS that only affects 2.4.55 through 2.4.59.

The vendor CRITICAL label is too broad for fleet-wide prioritization. In practice, most of these bugs are only reachable if you have the right module mix and a fragile configuration pattern; version alone is not the exploit path. But this is not a routine downgrade to MEDIUM, because CVE-2024-38475 was added to CISA KEV on 2025-05-01, public testing tools exist, and Apache is common on internet-facing systems. For a 10,000-host estate, treat this as HIGH overall, then immediately carve out a smaller urgent subset: internet-facing Apache with mod_rewrite/mod_proxy, reverse-proxy roles, Windows Apache, and appliance-like embeds.

"Critical on paper, high in practice: KEV matters, but unsafe Apache config is the real gate."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Find an exposed Apache target

The attacker starts with an internet-facing Apache HTTP Server that fingerprints as pre-2.4.60 or simply behaves like a candidate target. Version scanning alone is enough to build a target list, but not enough to prove exploitability because this advisory is driven by module and config interactions rather than a universally reachable core bug.
Conditions required:
  • Apache HTTP Server reachable over HTTP/HTTPS
  • Version genuinely vulnerable or banner/package metadata suggests < 2.4.60
Where this breaks in practice:
  • Backported distro packages often keep older-looking version strings while carrying the fix
  • Internal-only Apache nodes are irrelevant to unauthenticated internet exploitation
Detection/coverage: Excellent for version discovery; poor for true exposure. Tenable states plugin 201198 relies on the application's self-reported version and does not test the listed flaws.
STEP 02

Confirm the vulnerable feature path

For the KEV-driving path (CVE-2024-38475), the attacker needs mod_rewrite plus an unsafe substitution pattern in server/vhost context where a backreference or variable is the first segment. Alternate paths in the same bundle need other prerequisites: mod_proxy, exploitable backend headers, Windows UNC path handling, or HTTP/2 WebSocket upgrades.
Conditions required:
  • mod_rewrite or other affected modules loaded
  • A risky rule pattern or backend integration actually exists
  • For Windows UNC SSRF, the host is Windows and outbound SMB/UNC is possible
Where this breaks in practice:
  • A large fraction of Apache installs do not use the exact unsafe rewrite pattern
  • Many estates use Apache as a simple reverse proxy or static server without the dangerous rule shape
  • Windows-specific and HTTP/2-specific issues slash the reachable population further
Detection/coverage: External scanners generally cannot see the decisive config prerequisite. You need local config review or purpose-built PoC testing.
STEP 03

Send crafted requests to abuse rewrite or proxy confusion

Using public tooling such as mrmtwoj/apache-vulnerability-testing or targeted manual payloads from Orange Tsai's Confusion Attacks research, the attacker sends crafted URLs that coerce Apache's rewrite/proxy path handling. If the rule chain is unsafe, Apache resolves a path or handler the operator did not intend to expose.
Conditions required:
  • A matching endpoint or rewrite path is reachable
  • The specific confusion condition is present in live configuration
Where this breaks in practice:
  • Well-constrained rewrite rules, strict proxy mappings, and boring configurations break the exploit chain
  • Some exploit attempts are noisy and can be caught by web logs, WAFs, or reverse-proxy anomaly monitoring
Detection/coverage: Moderate. Network telemetry can catch odd encoded paths and rewrite/proxy probing, but signature coverage is inconsistent because successful exploitation depends on local config semantics.
STEP 04

Land impact: disclosure, SSRF, or code execution

Impact depends on which advisory path is reachable. The common worst case is source disclosure of scripts or unintended local execution; other paths lead to SSRF, NTLM leakage on Windows, or process crashes. This is why the advisory looks terrifying in CVSS while real-world blast radius varies sharply by deployment pattern.
Conditions required:
  • Apache has access to sensitive local paths, CGI/script handlers, or backend trust paths
  • No compensating segmentation or egress control blocks the follow-on action
Where this breaks in practice:
  • Many modern deployments run PHP/FPM or app stacks in ways that narrow post-disclosure leverage
  • Outbound filtering, least-privilege filesystem layout, and non-Windows deployments reduce secondary impact
Detection/coverage: Look for unexpected static serving of script source, anomalous backend fetches, internal redirect oddities, or outbound SMB/445 attempts from Apache hosts.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusCVE-2024-38475 is CISA KEV-listed. CISA announced it was added on 2025-05-01, which is the strongest indicator that at least one path in this bundle moved from theory to operational abuse.
KEV datesNVD reflects KEV status for CVE-2024-38475 with date added 2025-05-01 and federal due date 2025-05-22.
Proof-of-concept availabilityPublic tooling exists: mrmtwoj/apache-vulnerability-testing covers CVE-2024-38475 and related confusion bugs; soltanali0/CVE-2024-38475 provides focused testing.
Research pedigreeThis bundle traces to Orange Tsai's Black Hat USA 2024 Confusion Attacks research, which is not random GitHub noise; it is serious protocol/configuration analysis that repeatedly translated into real CVEs.
EPSSShodan's CVE dashboard reports CVE-2024-38475 at EPSS 0.937 / 99.8th percentile, which is unusually high and lines up with later KEV status.
CVSS reality checkNVD scores CVE-2024-38475 as 9.1 / CRITICAL with CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N. That vector assumes the vulnerable path is generically reachable; in real estates the config prerequisite is the missing part.
Affected versionsFor the main KEV driver, Apache HTTP Server 2.4.0 through 2.4.59 are affected. The bundle also includes narrower issues like CVE-2024-36387, which only affects 2.4.55 through 2.4.59.
Fixed versions and backportsUpstream fixed the July 2024 batch in 2.4.60. Distros may backport without changing to 2.4.60; for example Ubuntu marks fixes in packages such as 2.4.58-1ubuntu8.2 for 24.04 LTS and 2.4.52-1ubuntu4.10 for 22.04 LTS.
Scanning / exposure dataApache's internet footprint is huge, but external census overstates risk here. Search-engine/banner platforms can find exposed Apache, yet they cannot observe the decisive unsafe RewriteRule pattern; even Tenable says plugin 201198 is version-only and does not test the vulnerable condition.
Disclosure and finderUpstream advisory released 2024-07-01. The CVE-2024-38475 issue was credited to Orange Tsai (@orange_8361) of DEVCORE, with reporting timeline shown as 2024-04-01 in the oss-security post.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to HIGH (8.4/10)

The single biggest reason this stays HIGH instead of CRITICAL is that the worst paths are not universally reachable from version alone; they require specific Apache modules and fragile rewrite/proxy patterns that materially narrow the exposed population. It does not go lower because one of those paths, CVE-2024-38475, is KEV-listed with public testing tradecraft, which means the right subset of exposed systems should be treated as hot.

HIGH Vendor `CRITICAL` overstates fleet-wide exposure for plugin `201198`
MEDIUM Active exploitation evidence applies to at least one driver CVE in the bundle
MEDIUM Exact percentage of your estate with unsafe `mod_rewrite` patterns

Why this verdict

  • Baseline down from vendor CRITICAL: Tenable's bundle severity inherits worst-case CVSS from one path, but the plugin covers eight bugs with very different prerequisites and impact.
  • Config gates matter: meaningful exploitation usually requires mod_rewrite, mod_proxy, exploitable backend headers, Windows UNC behavior, or HTTP/2 WebSocket handling. Each prerequisite sharply reduces the real exposed population.
  • Scanner certainty is low: plugin 201198 is explicitly version-only, so it will flag backported distro packages and cannot prove the dangerous rewrite/proxy condition exists.
  • KEV pulls it back up: CVE-2024-38475 entered CISA KEV on 2025-05-01, so this is no longer just a lab-grade misconfiguration class.
  • Blast radius varies by role: internet-facing reverse proxies and embedded/appliance Apache deserve top attention; internal static-content nodes do not carry the same urgency.

Why not higher?

This is not a clean pre-auth RCE against every Apache < 2.4.60 host. The attacker usually needs a deployment-specific rule pattern or module combination, and many enterprise scanners cannot distinguish a truly exploitable config from a merely old version string. That configuration dependence is too much friction for a blanket CRITICAL across a big fleet.

Why not lower?

KEV status changes the math. Once a vulnerability in the bundle is confirmed exploited in the wild and public tooling exists, you cannot treat the whole item as routine patch hygiene—especially on internet-facing Apache, proxy roles, and embedded products. Apache's prevalence also means the reachable subset can still be operationally significant.

05 · Compensating Control

What to do — in priority order.

  1. Triage internet-facing Apache first — Immediately isolate the hot subset: external Apache, reverse proxies, app gateways, and embedded/appliance uses. Because CVE-2024-38475 is KEV-listed, apply this compensating control immediately, within hours, not on a routine 30-day cycle.
  2. Review and constrain server-context RewriteRules — Audit VirtualHost and global config for RewriteRule substitutions beginning with backreferences or variables and for rules that can resolve to filesystem paths or unexpected handlers. Remove or hard-constrain those patterns immediately, within hours on exposed systems; this directly attacks the main exploitation prerequisite.
  3. Reduce proxy ambiguity — Lock down mod_proxy mappings, reject malformed/encoded URLs before backend forwarding, and avoid trusting backend-supplied redirect or content-type behavior where local handlers can be reached. Deploy within hours for exposed proxy tiers and complete the broader review within 30 days for the rest of the HIGH-class fleet.
  4. Block outbound SMB from Windows Apache — For Windows-based Apache, prevent outbound SMB/445 and UNC-style access except where explicitly required. This strips most value from the UNC/NTLM leakage path and should be enforced immediately, within hours if any Windows Apache exists.
  5. Use local config-aware verification — Do not accept version-only scanner output as proof. Run local verification against package provenance, loaded modules, and rewrite/proxy config so you can separate true exposure from distro backports and low-risk nodes within 30 days across the full affected inventory.
What doesn't work
  • A WAF alone does not solve this class; the exploitability hinge is often Apache's internal rewrite/proxy semantics, not a single obvious URI signature.
  • Hiding the Server banner does nothing. The bug is in request handling and configuration logic, not banner disclosure.
  • Blindly trusting package version strings is insufficient on distro-managed systems because backports may fix the issue without moving to upstream 2.4.60.
06 · Verification

Crowdsourced verification payload.

Run this on the target Apache host as root or with read access to Apache config directories. Save as check_apache_201198.sh and run sudo bash check_apache_201198.sh /etc/apache2 or sudo bash check_apache_201198.sh /etc/httpd; it checks local version/package context, loaded modules, and looks for risky RewriteRule patterns tied to the main exploit path.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_apache_201198.sh
# Purpose: Assess likely exposure to Tenable plugin 201198 / Apache < 2.4.60 bundle.
# Output: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -u

CFG_ROOT="${1:-}"

have_cmd() { command -v "$1" >/dev/null 2>&1; }

ver_lt() {
  # returns 0 if $1 < $2
  [ "$(printf '%s\n%s\n' "$1" "$2" | sort -V | head -n1)" != "$2" ]
}

find_httpd_bin() {
  for b in apache2 httpd apachectl apache2ctl; do
    if have_cmd "$b"; then
      echo "$b"
      return 0
    fi
  done
  return 1
}

HTTPD_BIN="$(find_httpd_bin)"
if [ -z "${HTTPD_BIN:-}" ]; then
  echo "UNKNOWN - Apache binary not found in PATH"
  exit 2
fi

VERSION_RAW="$($HTTPD_BIN -v 2>/dev/null | grep -Eo 'Apache/[0-9]+\.[0-9]+\.[0-9]+' | head -n1 | cut -d/ -f2)"
if [ -z "$VERSION_RAW" ]; then
  echo "UNKNOWN - Could not determine Apache version"
  exit 2
fi

# Collect package info where possible for distro backport clues.
PKG_INFO=""
if have_cmd dpkg-query; then
  PKG_INFO="$(dpkg-query -W -f='${Package} ${Version}\n' apache2 2>/dev/null | head -n1)"
elif have_cmd rpm; then
  PKG_INFO="$(rpm -q httpd 2>/dev/null | head -n1)"
fi

# Fixed-by-backport heuristics for common Ubuntu package lines from vendor advisory pages.
if echo "$PKG_INFO" | grep -Eq 'apache2 2\.4\.58-1ubuntu8\.2|apache2 2\.4\.52-1ubuntu4\.10|apache2 2\.4\.41-4ubuntu3\.19|apache2 2\.4\.57-2ubuntu2\.5|apache2 2\.4\.62-1ubuntu1'; then
  echo "PATCHED - Distro package appears to include backported fix ($PKG_INFO)"
  exit 0
fi

# Upstream version >= 2.4.60 means patched for this advisory bundle.
if ! ver_lt "$VERSION_RAW" "2.4.60"; then
  echo "PATCHED - Apache version $VERSION_RAW is >= 2.4.60"
  exit 0
fi

# If config root wasn't supplied, try common locations.
if [ -z "$CFG_ROOT" ]; then
  for d in /etc/apache2 /etc/httpd /usr/local/etc/apache2 /usr/local/apache2/conf; do
    if [ -d "$d" ]; then
      CFG_ROOT="$d"
      break
    fi
  done
fi

if [ -z "${CFG_ROOT:-}" ] || [ ! -d "$CFG_ROOT" ]; then
  echo "UNKNOWN - Apache version $VERSION_RAW is < 2.4.60, but config directory was not found. Package: ${PKG_INFO:-none}"
  exit 2
fi

# Build a quick view of loaded modules.
MODULES="$($HTTPD_BIN -M 2>/dev/null || true)"
HAS_REWRITE=0
HAS_PROXY=0
HAS_HTTP2=0
if echo "$MODULES" | grep -q 'rewrite_module'; then HAS_REWRITE=1; fi
if echo "$MODULES" | grep -Eq 'proxy_module|proxy_http_module|proxy_fcgi_module|proxy_ajp_module'; then HAS_PROXY=1; fi
if echo "$MODULES" | grep -Eq 'http2_module|h2_module'; then HAS_HTTP2=1; fi

# Look for risky rewrite rules in server/vhost context.
# This is heuristic, not a full Apache parser.
RISKY_REWRITE=0
if [ "$HAS_REWRITE" -eq 1 ]; then
  if grep -RIEq '^[[:space:]]*RewriteRule[[:space:]].*[[:space:]](\$[0-9]+|%\{[^}]+\})' "$CFG_ROOT" 2>/dev/null; then
    RISKY_REWRITE=1
  fi
fi

# Look for broad indicators of potentially exposed CGI/script content.
SCRIPT_HANDLER=0
if grep -RIEq 'AddHandler[[:space:]].*(cgi-script|php)|SetHandler[[:space:]].*(proxy:fcgi|application/x-httpd-php|cgi-script)' "$CFG_ROOT" 2>/dev/null; then
  SCRIPT_HANDLER=1
fi

WINDOWS_HOST=0
case "$(uname -s 2>/dev/null)" in
  CYGWIN*|MINGW*|MSYS*) WINDOWS_HOST=1 ;;
esac

# Decision logic.
if [ "$RISKY_REWRITE" -eq 1 ]; then
  echo "VULNERABLE - Apache $VERSION_RAW with mod_rewrite and risky RewriteRule patterns under $CFG_ROOT"
  exit 1
fi

if [ "$HAS_PROXY" -eq 1 ] || [ "$HAS_HTTP2" -eq 1 ] || [ "$SCRIPT_HANDLER" -eq 1 ] || [ "$WINDOWS_HOST" -eq 1 ]; then
  echo "UNKNOWN - Apache $VERSION_RAW is in affected range and risky modules/features are present, but no definitive vulnerable rule was proven. Review config manually. Package: ${PKG_INFO:-none}"
  exit 2
fi

echo "UNKNOWN - Apache $VERSION_RAW is in affected range, but the main exploit prerequisites were not observed automatically. Package: ${PKG_INFO:-none}"
exit 2
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: do not treat every Apache < 2.4.60 hit as equally urgent, but also do not sit on it. For any internet-facing Apache with mod_rewrite, mod_proxy, reverse-proxy duties, Windows deployments, or embedded/appliance roles, the noisgate mitigation SLA is overridden by KEV evidence: patch or mitigate immediately, within hours. For the rest of the fleet, re-verify locally to weed out backports and low-risk static/internal nodes, then complete patching under the noisgate remediation SLA for HIGH severity, which is ≤180 days—but exposed edge systems should be fixed long before that window closes.

Sources

  1. Tenable Nessus Plugin 201198
  2. Apache HTTP Server 2.4 vulnerabilities advisory
  3. NVD CVE-2024-38475
  4. oss-security advisory for CVE-2024-38475
  5. CISA alert adding CVE-2024-38475 to KEV
  6. Black Hat USA 2024 Confusion Attacks slides
  7. GitHub PoC / testing toolkit
  8. Ubuntu CVE page showing backported fixes
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.