This is a ring of spare keys left around the building, not a battering ram through the lobby
Plugin tenable:161948 rolls up the Apache HTTP Server issues fixed in 2.4.54, but they are not one uniform bug. The set includes mod_proxy_ajp request smuggling (CVE-2022-26377), mod_proxy dropping X-Forwarded-* headers and enabling backend IP-auth bypass (CVE-2022-31813), several mod_lua edge cases (CVE-2022-29404, CVE-2022-30556, CVE-2022-28614), a mod_sed memory-exhaustion DoS (CVE-2022-30522), a Windows-only mod_isapi over-read (CVE-2022-28330), and another low-likelihood over-read in ap_strcmp_match() that mainly matters to third-party modules or Lua (CVE-2022-28615). Upstream impact is generally 2.4.53 and earlier, with a few bugs narrower than that.
The vendor-style severity is inflated for most enterprises because the plugin inherits worst-case impact from the scariest constituent CVE, not the median real deployment. In practice, almost every path here depends on optional modules, uncommon proxy topologies, or a backend application making a bad trust decision such as treating proxy-supplied client IP metadata as authentication. That's meaningful enough to stay on the board, but it's not a drop-everything Apache emergency.
4 steps from start to impact.
Find an exposed reverse proxy
curl, httpx, nmap, or a version-matching scanner such as Nessus. The important detail is not just Apache/2.4.53; it is whether the host is acting as a reverse proxy or AJP gateway rather than a plain static web server.- Apache HTTP Server is externally reachable
- Banner, package metadata, or authenticated scan indicates a pre-
2.4.54build - The target is actually using
mod_proxyormod_proxy_ajp
- Version-only scans overcount because many vulnerable paths require specific modules not visible from the edge
- Backported distro packages may look old while already fixed
- A large fraction of Apache servers are just web front ends with none of the relevant modules enabled
mod_proxy_ajp, mod_lua, mod_sed, or risky backend trust patterns are present.Abuse proxy parsing or forwarding trust
CVE-2022-31813: the attacker sends a crafted request with a client-side Connection header so Apache drops X-Forwarded-* on the way to the backend. The less common branch is CVE-2022-26377, where mod_proxy_ajp request smuggling is used to desynchronize what Apache and the AJP backend think the request is.- For
CVE-2022-31813, the backend or application must rely on proxy-supplied source-IP metadata for access control - For
CVE-2022-26377,mod_proxy_ajpmust be enabled and forwarding to an AJP backend - Attacker can send raw crafted HTTP requests, typically with Burp Repeater,
smuggler, or custom tooling
- Modern deployments increasingly avoid AJP altogether
- Well-built apps do auth themselves instead of trusting
X-Forwarded-Foras an auth signal - Reverse proxies often normalize or constrain the request path enough to break smuggling attempts
Connection headers, duplicate hop-by-hop headers, odd backend access from public clients, or desync indicators. WAFs sometimes catch malformed smuggling payloads, but coverage is inconsistent.Reach a backend-only path or bypass a trust gate
- The protected backend path exists
- The backend uses network location, proxy identity, or forwarded headers as a security boundary
- The frontend and backend disagree in a useful way
- Many enterprises front Apache with an identity-aware gateway or app-layer auth that kills this path
- Blast radius is often limited to one proxied app, not the whole host estate
- Misconfigurations differ per vhost, so exploitability is not uniform even within one farm
Land impact on a single application tier
9.1 baseline overshoots reality for fleet-wide prioritization.- A genuinely vulnerable proxy topology exists
- The attacker identifies a backend trust assumption worth abusing
- No upstream evidence of broad, generic exploitation against stock Apache
2.4.53for this bundle - Impact usually stops at the app behind the proxy rather than automatically becoming host compromise
The supporting signals.
| In-the-wild status | No upstream Apache note says these 2.4.54 issues were broadly exploited, and they are not listed in CISA KEV. There is downstream exploit discussion for CVE-2022-26377 in IBM QRadar contexts, which is not the same as mass exploitation of generic Apache. |
|---|---|
| Proof-of-concept availability | CVE-2022-31813 has a solid researcher write-up from Synacktiv. CVE-2022-26377 has public exploit discussion and PoC references tied to downstream products such as QRadar via watchTowr/third-party reporting. |
| EPSS signal | The bundle's CVEs are all over the map. Tenable currently shows CVE-2022-26377 at 0.39296 EPSS (~39.3%), while CVE-2022-31813 is only 0.00041; that spread is a clue that this plugin is a mixed bag, not one coherent emergency. |
| KEV status | Checked against the CISA Known Exploited Vulnerabilities Catalog: not KEV-listed. |
| Vendor baseline | Tenable plugin 161948 is labeled critical and currently carries CVSSv3 9.1 with vector CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H. That score reflects worst-case composition, not average deployment reachability. |
| CVSS reality check | The highest-impact member, CVE-2022-31813, is scored 9.8 because the backend auth-bypass outcome is severe if the app trusts proxy metadata. But the precondition stack is the whole story: reverse proxy present, forwarding behavior affected, and backend IP-based trust in use. |
| Affected versions | Most issues affect Apache HTTP Server 2.4.53 and earlier. Narrower cases include CVE-2022-30522 affecting only 2.4.53, and CVE-2022-28330 affecting Windows deployments using mod_isapi. |
| Fixed versions | Upstream fix is 2.4.54. Distro backports matter: Ubuntu tracks fixes such as apache2 2.4.54-2ubuntu1 for 22.10, and Debian bullseye shows 2.4.54-1~deb11u1 for this advisory set; do not rely on upstream-looking version strings alone. |
| Scanning and exposure data | Bitsight currently shows about 93,740 public observations for Apache HTTP Server 2.4.53, which proves there is real internet footprint. But exposure data is only an upper bound here, because internet scans cannot tell whether mod_proxy_ajp, mod_lua, mod_sed, or backend IP-auth trust are actually enabled. |
| Disclosure and reporters | Apache published the 2.4.54 fixes on 2022-06-08; NVD entries followed on 2022-06-09. Named researchers include Gaetan Ferry (Synacktiv) for CVE-2022-31813, Ricter Z @ 360 Noah Lab for CVE-2022-26377, Ronald Crane for several mod_lua/memory issues, and Brian Moussalli (JFrog) for CVE-2022-30522. |
noisgate verdict.
The decisive factor is precondition density: the meaningful exploit paths require optional Apache modules and, in the strongest case, a backend application that treats proxy-derived client IP metadata as an authentication signal. That sharply narrows the reachable population compared with a true generic unauthenticated Apache core flaw, even though the internet-facing position is attractive when the bad topology exists.
Why this verdict
- Big downgrade for module dependency: the bundle is dominated by
mod_proxy_ajp,mod_proxy,mod_lua,mod_sed, and Windowsmod_isapicases rather than a universal Apache core bug. - Big downgrade for attacker path assumptions: the nastiest issue,
CVE-2022-31813, only pays off when the backend or app trusts forwarded IP metadata for auth. That implies a specific, brittle trust model, not generic compromise of every pre-2.4.54host. - Another downgrade for population narrowing:
mod_proxy_ajpand AJP backends are far less common in modern fleets than plain HTTP reverse proxying, and Windowsmod_isapiis a niche subset again. - Small upward adjustment for exposure: internet-facing Apache reverse proxies are common, and when the trust flaw exists the attacker position is still unauthenticated remote.
- Small upward adjustment for visibility gap: version scanners light this up broadly, but config validation is harder, so vulnerable edge cases can hide inside large estates.
Why not higher?
There is no generic upstream Apache RCE here, no CISA KEV listing, and no strong evidence of broad indiscriminate exploitation against stock Apache for this bundle. Most exploit chains fail immediately if the relevant module is absent or the backend does real authentication instead of trusting network position.
Why not lower?
This is not ignorable because one branch is still an unauthenticated remote auth-bypass against public reverse proxies when the backend trust model is weak. If you run Apache as an app gateway, especially with mod_proxy or AJP, the impact can be real even though it is not universal.
What to do — in priority order.
- Unload unused modules — Disable
mod_proxy_ajp,mod_lua,mod_sed, andmod_isapianywhere they are not explicitly required. For aMEDIUMfinding there is no noisgate mitigation SLA; treat this as normal hardening work now and complete the actual patch inside the 365-day remediation window. - Stop using client IP as authentication — If any backend app trusts
X-Forwarded-For, missingX-Forwarded-*, or the proxy's source IP as an auth decision, move that check to real application authentication or a trusted identity layer. This is the single best compensating control forCVE-2022-31813, and forMEDIUMthere is no mitigation SLA—fix the design during normal engineering change control while planning patching inside 365 days. - Constrain AJP aggressively — If AJP is still in use, keep it on loopback or a tightly filtered backend segment and remove internet-reachable paths that can hit the proxy chain unnecessarily. Again,
MEDIUMmeans no mitigation SLA; do it as routine risk reduction and patch by the remediation deadline. - Hunt for risky reverse-proxy patterns — Search Apache configs for
ProxyPass,ProxyPassMatch,ProxyRequests,mod_proxy_ajp, and any rewrite or auth logic that keys on client IP or forwarded headers. This lets you separate 'plain web server noise' from the small subset of boxes that deserve faster attention even though the overall bundle is onlyMEDIUM.
ServerTokens Prodor hiding the Apache banner does not fix any of these flaws; it only removes easy fingerprinting.- EDR on the proxy host is weak coverage for the main paths because the abuse stays inside normal HTTP proxy traffic and often never spawns a suspicious process.
- Basic perimeter ACLs on the Apache tier alone do not solve
CVE-2022-31813if the exposed reverse proxy still fronts a backend that trusts proxy-derived IP identity.
Crowdsourced verification payload.
Run this on the target Apache host as a local shell user; root is not required, though package-manager queries may work better with standard local tooling installed. Invoke it as bash verify_apache_2454.sh and it will conservatively return VULNERABLE, PATCHED, or UNKNOWN based on the local Apache/package version; distro backports it cannot prove are deliberately marked UNKNOWN rather than guessed.
#!/usr/bin/env bash
# verify_apache_2454.sh
# Conservative local checker for the Apache httpd issues fixed in upstream 2.4.54.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -u
have_cmd() { command -v "$1" >/dev/null 2>&1; }
extract_httpd_version() {
local out=""
for cmd in apache2ctl apachectl httpd apache2; do
if have_cmd "$cmd"; then
out="$($cmd -v 2>/dev/null | awk -F/ '/Server version|Server version:|Server version/{for(i=1;i<=NF;i++){if($i ~ /^2\.[0-9]+\.[0-9]+/){print $i; exit}}}' | head -n1)"
if [ -n "$out" ]; then
echo "$out"
return 0
fi
fi
done
return 1
}
version_ge() {
# usage: version_ge 2.4.54 2.4.53 => true
[ "$(printf '%s\n%s\n' "$1" "$2" | sort -V | tail -n1)" = "$1" ]
}
UPSTREAM_VER=""
PKG_VER=""
DISTRO_ID=""
DISTRO_VER=""
if [ -r /etc/os-release ]; then
# shellcheck disable=SC1091
. /etc/os-release
DISTRO_ID="${ID:-}"
DISTRO_VER="${VERSION_ID:-}"
fi
if ! UPSTREAM_VER="$(extract_httpd_version)"; then
echo "UNKNOWN"
exit 2
fi
# If the running/build version is upstream 2.4.54 or newer, we're done.
if version_ge "$UPSTREAM_VER" "2.4.54"; then
echo "PATCHED"
exit 0
fi
# Debian/Ubuntu package checks for known backported fixed package strings.
if have_cmd dpkg-query; then
PKG_VER="$(dpkg-query -W -f='${Version}' apache2 2>/dev/null || true)"
if [ -n "$PKG_VER" ]; then
if [ "$DISTRO_ID" = "debian" ]; then
if dpkg --compare-versions "$PKG_VER" ge "2.4.54-1~deb11u1"; then
echo "PATCHED"
exit 0
fi
fi
if [ "$DISTRO_ID" = "ubuntu" ]; then
# Conservative: only assert patched for the known Ubuntu fixed string surfaced in public tracking.
if dpkg --compare-versions "$PKG_VER" ge "2.4.54-2ubuntu1"; then
echo "PATCHED"
exit 0
fi
fi
# Debian-family package exists but we cannot safely prove backport status.
echo "UNKNOWN"
exit 2
fi
fi
# RPM-family packages are often heavily backported; do not guess from package label alone.
if have_cmd rpm; then
if rpm -q httpd >/dev/null 2>&1 || rpm -q apache2 >/dev/null 2>&1; then
echo "UNKNOWN"
exit 2
fi
fi
# Source-built / non-packaged installs below 2.4.54 are vulnerable.
echo "VULNERABLE"
exit 1
If you remember one thing.
tenable:161948 hit as an Apache fire drill. First split the population into plain web servers versus reverse proxies/app gateways, then fast-track manual config review for anything using mod_proxy, mod_proxy_ajp, mod_lua, mod_sed, or Windows mod_isapi. For this MEDIUM reassessment there is no noisgate mitigation SLA — go straight to the 365-day remediation window; apply the upstream or distro-fixed package within the noisgate remediation SLA of <= 365 days. If you find a public reverse proxy whose backend relies on source-IP or forwarded-header trust for auth, treat that host as an exception and patch it early even though the overall bundle is only medium priority.Sources
- Tenable Nessus Plugin 161948 changelog
- Apache HTTP Server 2.4 vulnerability list
- NVD: CVE-2022-26377
- Synacktiv write-up for CVE-2022-31813
- Ubuntu CVE tracker: CVE-2022-31813
- Debian security tracker: CVE-2022-31813
- CISA Known Exploited Vulnerabilities Catalog
- Bitsight Apache HTTP Server 2.4.53 observation footprint
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.