← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
tenable:172186 · CWE-444 · Disclosed 2023-03-07

Apache 2

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

This is a bad lock on a side door, not a missing front wall

tenable:172186 is a bundle check for Apache HTTP Server versions earlier than 2.4.56, primarily covering CVE-2023-25690 and CVE-2023-27522. The worst issue, CVE-2023-25690, is not 'all Apache is instantly RCE'; it is request smuggling in specific mod_proxy deployments where RewriteRule or ProxyPassMatch captures attacker-controlled URL data and reinserts it into the proxied request. CVE-2023-27522 is narrower still: it needs mod_proxy_uwsgi and a backend that emits special characters in response headers.

Tenable's CRITICAL label inherits the 9.8 CVSS from CVE-2023-25690, but that overstates enterprise-wide urgency. Real exploitation requires an internet-reachable Apache reverse proxy, the right module mix, and a vulnerable rewrite/proxy pattern; that is a meaningful friction chain. This is still a serious edge-tier issue because it can punch through proxy trust boundaries and reach protected backend paths, but it is not a drop-everything universal Apache emergency.

"Dangerous internet-edge bug, but only if Apache is doing a very specific and unsafe proxy rewrite trick."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Find an Apache reverse proxy worth testing

The attacker fingerprints an internet-facing Apache host and checks whether it behaves like a front-end proxy rather than a simple static web server. Typical tooling is Burp Suite, curl, or custom recon plus public PoCs such as dhmosfunk/CVE-2023-25690-POC.
Conditions required:
  • Unauthenticated remote reachability to the Apache listener
  • Apache version earlier than 2.4.56
  • Host is actually used as a reverse proxy, not just a standalone web server
Where this breaks in practice:
  • Banner/version alone is insufficient; exploitability depends on configuration, not just package version
  • Many Apache deployments never load the affected proxy path at all
  • WAF/CDN/reverse-proxy chains may normalize or block malformed requests before Apache sees them
Detection/coverage: Version scanners like Nessus detect by self-reported version only; Tenable explicitly notes the plugin did not test exploitability.
STEP 02

Trigger the smuggling condition

For CVE-2023-25690, the attacker sends a crafted request-target designed to abuse a non-specific RewriteRule/ProxyPassMatch that reuses user input in the proxied request. Common operator tooling is Burp HTTP Request Smuggler, raw sockets, or the public GitHub/Packet Storm PoCs. For CVE-2023-27522, the attacker instead needs a mod_proxy_uwsgi path and a backend response header that can be weaponized.
Conditions required:
  • mod_proxy is enabled
  • A vulnerable rewrite/proxy rule uses variable substitution of attacker-controlled path data, or mod_proxy_uwsgi is enabled
  • Malformed request syntax survives intermediary normalization
Where this breaks in practice:
  • This is the decisive narrowing factor: the bad rewrite pattern is not default Apache behavior
  • mod_proxy_uwsgi is a much smaller exposure population than generic Apache
  • Modern WAFs and strict proxy parsers can break payload delivery
Detection/coverage: Good WAF/IDS coverage may flag CRLF/header-smuggling patterns, but generic vulnerability scanners usually cannot prove the unsafe rule exists remotely.
STEP 03

Desynchronize front end and backend

If the crafted request is accepted, Apache and the backend interpret the request stream differently. That lets the attacker smuggle an internal follow-on request, poison shared cache state, or bypass path-based access controls enforced only at the front end.
Conditions required:
  • Backend trusts the front-end proxy boundary
  • There is a protected internal path, cache, or routing decision to abuse
  • Connection reuse/HTTP parsing behavior supports the desync
Where this breaks in practice:
  • Impact varies wildly by app design; some sites only expose low-value paths
  • No backend trust boundary means the bug degrades to noisy but limited request corruption
  • Connection handling differences can make lab PoCs fail in production
Detection/coverage: Look for anomalous request pairs, backend paths requested without matching front-end logs, and cache anomalies. App-layer telemetry is better than network signatures here.
STEP 04

Land business impact through the backend

The attacker turns the desync into something concrete: reaching internal admin endpoints, bypassing proxy ACLs, or manipulating cached responses. That can become credential exposure or privileged workflow abuse, but it is usually one application boundary at a time, not instant host takeover.
Conditions required:
  • A valuable backend path or privileged trust decision exists behind Apache
  • The smuggled request reaches that path successfully
Where this breaks in practice:
  • This is not direct code execution from the advisory itself
  • Blast radius is commonly limited to the proxied application or tenant behind that virtual host
  • Well-segmented admin apps and secondary auth controls still blunt impact
Detection/coverage: EDR on the Apache host may see nothing unusual because the abuse stays in HTTP semantics; app logs and proxy logs are the important telemetry.
03 · Intelligence Metadata

The supporting signals.

Primary issue driving the scoreCVE-2023-25690 (HTTP request smuggling with mod_rewrite + mod_proxy) is the worst item in the bundle and the reason Tenable pegs the plugin to 9.8/Critical.
Secondary bundled issueCVE-2023-27522 affects mod_proxy_uwsgi only and is materially narrower than the headline CVE.
In-the-wild statusI found public PoC/exploit code, but no CISA KEV listing and no authoritative source here showing broad active exploitation campaigns. Treat as *weaponized research available*, not *confirmed mass exploitation*.
PoC availabilityPublic PoC exists on GitHub: dhmosfunk/CVE-2023-25690-POC; Packet Storm also hosts an exploit write-up for CVE-2023-25690.
EPSSFor CVE-2023-25690, Tenable shows EPSS 0.67011 and Docker Scout shows roughly 98.5th percentile; for CVE-2023-27522, Tenable shows EPSS 0.00695 and Wiz shows about 70th percentile. Translation: the bundle is dominated by the first CVE, not the second.
KEV statusNot found in the CISA KEV Catalog for either bundled CVE at review time.
CVSS vector meaningCVE-2023-25690 carries CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H, which assumes full remote reachability and no deployment friction. That is technically clean but operationally optimistic because the vulnerable rewrite pattern is optional, not default.
Affected versionsApache advisory says CVE-2023-25690 affects 2.4.0 through 2.4.55; CVE-2023-27522 affects 2.4.30 through 2.4.55.
Fixed versions and backportsUpstream fix is 2.4.56. Distros also backported fixes: Debian 10 LTS fixed both in 2.4.38-3+deb10u10; Gentoo marks >=2.4.56 as unaffected.
Scanning and exposure realityInternet-wide Apache exposure is huge, but this specific bug is not fingerprintable from a banner alone because exploitability depends on loaded modules and rewrite/proxy rules. Tenable's plugin is version-only, so expect false urgency on hosts that never use the affected proxy paths.
Disclosure and reporterApache released 2.4.56 on 2023-03-07. CVE-2023-25690 credits Lars Krapf of Adobe; CVE-2023-27522 credits Dimas Fariski Setyawan Putra (nyxsorcerer).
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to HIGH (8.1/10)

The deciding factor is the configuration prerequisite: CVE-2023-25690 is only exploitable when Apache is acting as a reverse proxy with a vulnerable rewrite/proxy pattern that reinserts attacker-controlled URL data. That sharply reduces the reachable population versus the raw 9.8 label, but the bug still sits on the internet edge and can break trust boundaries in front of sensitive backends, which keeps it firmly in HIGH.

HIGH Affected-version and fix-version mapping
MEDIUM Real-world prevalence of exploitable rewrite/proxy patterns
MEDIUM Assessment that Tenable's CRITICAL overstates broad enterprise urgency

Why this verdict

  • Downgrade for configuration friction: exploitable CVE-2023-25690 needs mod_proxy plus a specific unsafe RewriteRule/ProxyPassMatch pattern. That is a major step down from 'any Apache before 2.4.56 is trivially owned.'
  • Not direct RCE from the advisory: the practical outcomes are request smuggling, ACL bypass, unintended backend requests, and cache poisoning. Serious, yes; universal server takeover, no.
  • Population narrowing compounds: CVE-2023-27522 needs mod_proxy_uwsgi, which is a much smaller deployment slice than generic Apache. The bundle's worst-case story does not represent the average exposed host.
  • Still high because edge trust boundaries matter: when Apache fronts internal apps, successful smuggling can bypass the exact controls defenders rely on at the perimeter. That blast radius amplifier keeps this above MEDIUM.
  • PoC and exploit tooling exist: public GitHub and Packet Storm material lower attacker cost once the right target is found, so this is not just theoretical lab-grade math.

Why not higher?

There is no evidence in the sources reviewed that this is a universally exploitable, one-request compromise across all Apache servers below 2.4.56. The vulnerability hinges on optional modules and specific proxy rewrite patterns, and the impact is usually at the HTTP trust-boundary layer rather than immediate code execution on the host.

Why not lower?

The edge exposure matters. If you *do* have Apache reverse proxies fronting privileged internal routes, request smuggling can subvert access-control assumptions and reach high-value backend functions from the public internet, and public PoCs make target validation practical for attackers.

05 · Compensating Control

What to do — in priority order.

  1. Inventory Apache reverse proxies first — Within 30 days, identify every Apache host acting as a reverse proxy or application gateway, then separate them from plain web-serving hosts. This trims noise fast and focuses mitigation where the bug can actually be reached.
  2. Hunt unsafe rewrite patterns — Within 30 days, review configs for RewriteRule or ProxyPassMatch that capture broad user input and reinsert it into proxied URLs, especially with [P]. Those patterns are the real exploit hinge for CVE-2023-25690.
  3. Disable unused proxy modules — Within 30 days, unload mod_proxy_* modules you do not need, especially mod_proxy_uwsgi. If the vulnerable module path is gone, the attack path collapses before patching is complete.
  4. Constrain backend reachability — Within 30 days, enforce that Apache front ends can only reach approved backend paths and ports. This limits the value of a smuggled internal request if one slips through.
  5. Add request-smuggling detection at the edge — Within 30 days, tune WAF/NGFW/IDS rules for CRLF, desync, and malformed request-target patterns associated with HTTP smuggling. This will not replace patching, but it can cut exploit reliability while remediation is underway.
What doesn't work
  • Version-only triage doesn't tell you whether the host is exploitable; Tenable itself says this plugin relies on self-reported version and does not test the issue.
  • EDR alone is weak here because the abuse lives in HTTP parsing differences, not malware execution on the Apache host.
  • MFA doesn't help with the initial exploit path because the attacker is abusing front-end HTTP handling before any normal authentication workflow.
  • TLS termination changes don't fix parser desynchronization; HTTPS can carry the exploit just fine if the vulnerable proxy path remains.
06 · Verification

Crowdsourced verification payload.

Run this on the target Apache host as a local admin/root-equivalent so it can read server config and invoke apachectl/httpd. Example: sudo bash ./check_apache_2456_smuggling.sh. It inspects version, loaded modules, and common config roots, then prints VULNERABLE, PATCHED, or UNKNOWN.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_apache_2456_smuggling.sh
# Purpose: Assess likely exposure to Apache httpd < 2.4.56 issues covered by Tenable plugin 172186
# Exit codes: 0 PATCHED, 1 VULNERABLE, 2 UNKNOWN

set -u

APACHECTL=""
for c in apachectl apache2ctl httpd; do
  if command -v "$c" >/dev/null 2>&1; then
    APACHECTL="$(command -v "$c")"
    break
  fi
done

if [ -z "$APACHECTL" ]; then
  echo "UNKNOWN: apachectl/apache2ctl/httpd not found"
  exit 2
fi

VER_OUT="$($APACHECTL -v 2>/dev/null | head -n 1)"
VER="$(echo "$VER_OUT" | sed -n 's/.*Apache\/\([0-9][0-9.]*\).*/\1/p')"
if [ -z "$VER" ]; then
  echo "UNKNOWN: could not determine Apache version"
  exit 2
fi

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

if ! ver_lt "$VER" "2.4.56"; then
  echo "PATCHED: Apache version $VER is >= 2.4.56"
  exit 0
fi

MODS="$($APACHECTL -M 2>/dev/null || true)"
HAS_PROXY=0
HAS_REWRITE=0
HAS_UWSGI=0

echo "$MODS" | grep -Eq 'proxy_module|proxy_http_module|proxy_fcgi_module|proxy_ajp_module|proxy_wstunnel_module' && HAS_PROXY=1
echo "$MODS" | grep -Eq 'rewrite_module' && HAS_REWRITE=1
echo "$MODS" | grep -Eq 'proxy_uwsgi_module' && HAS_UWSGI=1

CONF_ROOTS="/etc/httpd /etc/apache2 /usr/local/apache2/conf"
CONF_FILES=""
for d in $CONF_ROOTS; do
  if [ -d "$d" ]; then
    CONF_FILES="$CONF_FILES $(find "$d" -type f \( -name '*.conf' -o -name 'httpd.conf' -o -name 'apache2.conf' \) 2>/dev/null)"
  fi
done

if [ -z "$CONF_FILES" ]; then
  if [ "$HAS_UWSGI" -eq 1 ]; then
    echo "VULNERABLE: Apache $VER < 2.4.56 and mod_proxy_uwsgi is loaded (config files not fully inspected)"
    exit 1
  fi
  echo "UNKNOWN: Apache $VER < 2.4.56 but no readable config files found"
  exit 2
fi

# Heuristic checks for risky config patterns tied to CVE-2023-25690
RISK_REWRITE=0
RISK_PROXYPASSMATCH=0

# RewriteRule with [P] and a backreference ($1 etc.)
if grep -RIEq '^[[:space:]]*RewriteRule[[:space:]].*\$[0-9].*\[[^]]*P[^]]*\]' $CONF_FILES 2>/dev/null; then
  RISK_REWRITE=1
fi

# ProxyPassMatch with backreference in target
if grep -RIEq '^[[:space:]]*ProxyPassMatch[[:space:]].*\$[0-9]' $CONF_FILES 2>/dev/null; then
  RISK_PROXYPASSMATCH=1
fi

if [ "$HAS_UWSGI" -eq 1 ]; then
  echo "VULNERABLE: Apache $VER < 2.4.56 and mod_proxy_uwsgi is loaded (CVE-2023-27522 path present)"
  exit 1
fi

if [ "$HAS_PROXY" -eq 1 ] && [ "$HAS_REWRITE" -eq 1 ] && { [ "$RISK_REWRITE" -eq 1 ] || [ "$RISK_PROXYPASSMATCH" -eq 1 ]; }; then
  echo "VULNERABLE: Apache $VER < 2.4.56 with proxy+rewrite and likely unsafe RewriteRule/ProxyPassMatch pattern"
  exit 1
fi

if [ "$HAS_PROXY" -eq 1 ] || [ "$HAS_REWRITE" -eq 1 ]; then
  echo "UNKNOWN: Apache $VER < 2.4.56, but no obvious exploitable proxy rewrite pattern found by heuristic scan"
  exit 2
fi

echo "UNKNOWN: Apache $VER < 2.4.56, but affected modules/patterns were not confirmed"
exit 2
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: stop treating every httpd < 2.4.56 hit as equal. First, isolate the subset of hosts that are actually acting as Apache reverse proxies and inspect them for unsafe RewriteRule/ProxyPassMatch usage or mod_proxy_uwsgi; that compensating-control triage belongs inside the noisgate mitigation SLA for HIGH findings, so complete it within 30 days. Then patch the confirmed-exposed fleet to 2.4.56 or a distro backport inside the noisgate remediation SLA of 180 days, with internet-facing reverse proxies and anything fronting internal admin apps at the top of the queue this quarter—not plain brochureware Apache boxes that only tripped a version-only scanner check.

Sources

  1. Tenable plugin 172186
  2. Apache HTTP Server 2.4 vulnerabilities
  3. NVD CVE-2023-25690
  4. NVD CVE-2023-27522
  5. Debian LTS advisory DLA-3401-1
  6. GitHub PoC for CVE-2023-25690
  7. CISA Known Exploited Vulnerabilities Catalog
  8. Docker Scout CVE-2023-25690 record
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.