Four bugs in a trenchcoat pretending to be MEDIUM, but one of them is a KEV-listed DDoS cannon
Tenable plugin 182809 bundles four CVEs affecting Apache Tomcat 9.0.0.M1 through 9.0.80, fixed in 9.0.81. The headliner is CVE-2023-44487 (HTTP/2 Rapid Reset), an unauthenticated denial-of-service flaw that was exploited at unprecedented scale — Google saw 398 million requests/second, Cloudflare 201 million rps, Amazon 155 million rps. The remaining three are lower-impact: CVE-2023-45648 (request smuggling via malformed trailer headers, requires a reverse proxy, CVSS 5.3), CVE-2023-42795 (information leakage from incomplete object recycling, CVSS 5.3), and CVE-2023-42794 (temp-file DoS on Windows only, Low).
Tenable's plugin-level severity of MEDIUM / CVSS 5.3 is misleading because it appears to anchor on the request-smuggling CVE rather than the most dangerous bug in the bundle. CVE-2023-44487 carries CVSS 7.5, an EPSS of 0.99999 (99.997th percentile), and was added to CISA KEV on 2023-10-10 with a federal remediation deadline of 2023-10-31. When a vulnerability has confirmed mass exploitation *and* a KEV listing, rating the bundle MEDIUM sends the wrong signal to patch prioritization workflows. The VPR score of 7.3 (High) is closer to reality, but the plugin's headline severity still reads MEDIUM in most dashboards.
4 steps from start to impact.
Identify HTTP/2-capable Tomcat
Http11NioProtocol or Http11Nio2Protocol connector plus the UpgradeProtocol element. Shodan shows ~378,000 exposed Tomcat instances globally. No authentication or special knowledge is needed — the protocol handshake reveals support.- Target Tomcat is internet-facing
- HTTP/2 is enabled on the connector
- Many enterprise Tomcat deployments sit behind a load balancer or reverse proxy that terminates HTTP/2, meaning the proxy absorbs the attack rather than Tomcat itself
- Internal-only Tomcat instances are not reachable
Server: Apache-Coyote or Server: Apache with HTTP/2 ALPN. Nessus plugin 182809 detects the version range.Send Rapid Reset stream flood
h2load, custom Go scripts) can replicate the attack trivially.- Network path to the target on the HTTP/2 port
- CDNs and cloud WAFs with HTTP/2 flood protection (Cloudflare, AWS Shield, Akamai) absorb the attack upstream
- Rate-limiting on the reverse proxy or load balancer can blunt impact
Tomcat exhausts resources — OutOfMemoryError
OutOfMemoryError or connection refusal. The application becomes unavailable to legitimate users. Recovery typically requires a service restart. The impact is availability only — there is no code execution, privilege escalation, or data exfiltration from this CVE alone.- No upstream HTTP/2 flood mitigation in place
- Tomcat version < 9.0.81
- Impact is denial of service, not compromise — no lateral movement follows
- Tomcat auto-restarts in many orchestrated environments (Kubernetes, systemd)
(Opportunistic) Request smuggling via CVE-2023-45648
- Tomcat is behind a reverse proxy that passes trailer headers
- HTTP/1.1 with chunked transfer encoding is in use
- Many proxies strip or ignore trailer headers entirely
- Exploitation requires careful request alignment — not a point-and-shoot attack
- Impact depends on what the smuggled request targets in the application
The supporting signals.
| In-the-Wild Exploitation | Confirmed at massive scale. CVE-2023-44487 was exploited as a zero-day from August–October 2023 against Google, Cloudflare, and AWS infrastructure. Google recorded 398M rps, the largest DDoS attack ever observed at the time. |
|---|---|
| CISA KEV | Listed 2023-10-10, federal remediation deadline 2023-10-31. CISA advisory. |
| EPSS (CVE-2023-44487) | 0.99999 probability (99.997th percentile) — effectively certain exploitation activity within 30 days. |
| EPSS (other CVEs) | CVE-2023-45648 and CVE-2023-42795 have substantially lower EPSS scores; CVE-2023-42794 is negligible. |
| Proof-of-Concept | Trivially reproducible with h2load or custom HTTP/2 clients. For CVE-2023-45648, 8 public PoC repos on GitHub demonstrate trailer-header smuggling. |
| CVSS Vectors | CVE-2023-44487: CVSS 7.5 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H — CVE-2023-45648: CVSS 5.3 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N |
| Affected Versions | Apache Tomcat 9.0.0.M1 through 9.0.80 (also affects 8.5.0–8.5.93, 10.1.0-M1–10.1.13, 11.0.0-M1–11.0.0-M11) |
| Fixed Versions | 9.0.81, 8.5.94, 10.1.14, 11.0.0-M12. Distro backports: RHEL/CentOS via tomcat package updates, Debian/Ubuntu via tomcat9 security updates, Amazon Linux via ALAS advisories. |
| Exposure Data | Shodan reports ~378,000 internet-facing Tomcat instances globally, concentrated in China, Brazil, Morocco, and the US. |
| Reporter | CVE-2023-44487 discovered collaboratively by Google, Cloudflare, and AWS. Tomcat-specific CVEs reported to the Apache Tomcat security team. |
noisgate verdict.
The single most decisive factor is the active KEV listing for CVE-2023-44487 with confirmed mass exploitation at record-breaking scale, bundled inside a plugin that Tenable labels MEDIUM. While the impact ceiling is availability-only (DoS, no RCE), the unauthenticated-remote attack vector, trivial weaponization, and enormous exposed population make MEDIUM an inadequate signal for any organization running internet-facing Tomcat.
Why this verdict
- KEV-listed with mass exploitation: CVE-2023-44487 was added to CISA KEV on 2023-10-10 after confirmed zero-day exploitation at scales exceeding 398M rps. An EPSS of 0.99999 confirms this is not theoretical.
- Unauthenticated remote, zero friction: The HTTP/2 Rapid Reset attack requires no credentials, no special positioning, and no exploit development. Off-the-shelf tools replicate it. Any internet-facing Tomcat with HTTP/2 enabled is in the blast radius.
- Large exposed population: ~378,000 Tomcat instances are internet-facing per Shodan, and HTTP/2 support is a common configuration in Tomcat 9.x deployments.
- Role multiplier: Tomcat is a *typical-role* application server in most deployments (line-of-business apps, API tiers). It is not canonically a high-value-role component (not an IdP, DC, or hypervisor). However, Tomcat frequently hosts authentication endpoints, API gateways, and customer-facing portals where availability loss has direct revenue and SLA impact. The blast radius is service-level (one application), not fleet-level. This keeps the floor at HIGH rather than CRITICAL.
- Plugin CVSS anchored on wrong CVE: Tenable's plugin-level CVSS 5.3 reflects CVE-2023-45648 (request smuggling), not the most dangerous CVE in the bundle. The VPR of 7.3 partially corrects this, but the dashboard severity label remains MEDIUM.
Why not higher?
The impact ceiling of the dominant CVE (CVE-2023-44487) is denial of service only — no code execution, no data exfiltration, no lateral movement. Tomcat is not a canonically high-value-role component (it's not a DC, hypervisor, or IdP), so even successful exploitation doesn't yield fleet-scale compromise. Many production deployments sit behind CDNs or cloud WAFs that absorb HTTP/2 floods upstream, significantly narrowing the reachable population.
Why not lower?
A KEV-listed vulnerability with EPSS 0.99999 and confirmed mass exploitation at record-breaking scale cannot be rated MEDIUM regardless of impact type. Availability loss on customer-facing Tomcat instances has direct business impact, and the attack is unauthenticated-remote with zero friction. The request-smuggling CVE (CVE-2023-45648) adds integrity risk in reverse-proxy topologies, compounding the case against a downgrade.
What to do — in priority order.
- Deploy HTTP/2 flood protection at the edge — Enable HTTP/2 Rapid Reset mitigation on your CDN, cloud WAF, or load balancer (Cloudflare, AWS Shield, Akamai, F5 all shipped signatures in October 2023). This is the single highest-ROI control — it stops CVE-2023-44487 before traffic reaches Tomcat. Deploy within 30 days per noisgate mitigation SLA for HIGH.
- Disable HTTP/2 if not required — If your Tomcat connectors don't need HTTP/2, remove the
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />element fromserver.xml. This eliminates the attack surface for CVE-2023-44487 entirely. Deploy within 30 days. - Configure connection and stream limits — Set
maxConcurrentStreamsto a conservative value (e.g., 100) on the HTTP/2 upgrade protocol inserver.xml. This limits the amplification factor of rapid reset attacks. Also setmaxConnectionsandmaxThreadsappropriately for your capacity. - Strip or validate trailer headers at the reverse proxy — Configure your reverse proxy (nginx, HAProxy, Apache httpd) to strip HTTP trailer headers before forwarding to Tomcat. This mitigates CVE-2023-45648 request smuggling. Most proxies support this via configuration.
- Patch to Tomcat 9.0.81+ — The definitive fix. Upgrade to 9.0.81 or later (current latest 9.0.x recommended). This resolves all four CVEs. Target within the noisgate remediation SLA of 180 days for HIGH, but given KEV status, accelerate to weeks not months.
- Network-level rate limiting (IP-based): HTTP/2 Rapid Reset can be devastating from a single IP because the protocol multiplexes thousands of streams over one TCP connection. IP-based rate limiting won't help — you need HTTP/2-aware stream-level rate limiting.
- Traditional WAF signature rules: Generic WAF rules don't inspect HTTP/2 frame-level behavior. You need a WAF that specifically understands HTTP/2 stream resets. Check with your vendor for explicit CVE-2023-44487 mitigation.
- Application-layer firewalls without HTTP/2 decoding: If your WAF or IDS only inspects HTTP/1.1, it will not see the rapid reset attack happening on an HTTP/2 connection.
Crowdsourced verification payload.
Run this on each Tomcat host as a user with read access to the Tomcat installation directory. Example: bash check_tomcat_182809.sh /opt/tomcat or bash check_tomcat_182809.sh /usr/share/tomcat9. No root required — only needs to read lib/catalina.jar or RELEASE-NOTES.
#!/usr/bin/env bash
# check_tomcat_182809.sh — Checks if Apache Tomcat is vulnerable to
# CVE-2023-44487, CVE-2023-45648, CVE-2023-42795, CVE-2023-42794
# Fixed in: 9.0.81 (9.x branch)
# Usage: bash check_tomcat_182809.sh /path/to/tomcat
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -euo pipefail
CATALINA_HOME="${1:-}"
if [[ -z "$CATALINA_HOME" ]]; then
echo "Usage: $0 /path/to/tomcat"
exit 2
fi
# Try to get version from catalina.jar manifest
VERSION=""
JAR="$CATALINA_HOME/lib/catalina.jar"
if [[ -f "$JAR" ]]; then
VERSION=$(unzip -p "$JAR" META-INF/MANIFEST.MF 2>/dev/null | grep 'Implementation-Version' | head -1 | cut -d' ' -f2 | tr -d '\r')
fi
# Fallback: RELEASE-NOTES
if [[ -z "$VERSION" && -f "$CATALINA_HOME/RELEASE-NOTES" ]]; then
VERSION=$(grep -oP 'Apache Tomcat Version \K[0-9]+\.[0-9]+\.[0-9]+' "$CATALINA_HOME/RELEASE-NOTES" | head -1)
fi
# Fallback: version.sh
if [[ -z "$VERSION" && -x "$CATALINA_HOME/bin/version.sh" ]]; then
VERSION=$("$CATALINA_HOME/bin/version.sh" 2>/dev/null | grep 'Server number' | grep -oP '[0-9]+\.[0-9]+\.[0-9]+')
fi
if [[ -z "$VERSION" ]]; then
echo "UNKNOWN — could not determine Tomcat version at $CATALINA_HOME"
exit 2
fi
echo "Detected Tomcat version: $VERSION"
# Parse major.minor.patch
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
# Only checking 9.x branch (plugin scope)
if [[ "$MAJOR" -ne 9 ]]; then
echo "UNKNOWN — this check targets Tomcat 9.x, detected $MAJOR.x"
exit 2
fi
# Vulnerable: 9.0.0 through 9.0.80
# Fixed: 9.0.81+
if [[ "$MINOR" -eq 0 && "$PATCH" -lt 81 ]]; then
echo "VULNERABLE — Tomcat $VERSION is affected (fixed in 9.0.81)"
exit 1
else
echo "PATCHED — Tomcat $VERSION is >= 9.0.81"
exit 0
fiIf you remember one thing.
Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.