Like leaving a coffee shop's lost-and-found bin open where strangers can peek at the last customer's receipt
This Tenable plugin (194473) bundles two CVEs fixed in Apache Tomcat 9.0.44, released March 2021 — over five years ago. CVE-2021-41079 (CVSS 7.5 HIGH) is a denial-of-service via infinite loop triggered by a malformed TLS packet, but *only* when Tomcat is configured with NIO+OpenSSL or NIO2+OpenSSL connectors — a non-default configuration most deployments never enable. CVE-2024-21733 (CVSS 5.3 MEDIUM) is an information-disclosure flaw where an incomplete POST request causes Tomcat's error page to leak body data from a *different user's prior request*, potentially exposing credentials or session tokens.
Tenable rates the plugin MEDIUM, which is reasonable. The NVD HIGH score for CVE-2021-41079 overstates real-world risk because it ignores the OpenSSL connector prerequisite that eliminates the vast majority of Tomcat deployments. CVE-2024-21733 is the more broadly applicable issue — it requires no authentication, works over the network, and has a public PoC — but its impact ceiling is partial confidentiality loss (leaked fragments), not code execution or persistent compromise. The MEDIUM rating holds.
3 steps from start to impact.
Identify vulnerable Tomcat instance
Server: Apache-Coyote/1.1) or error pages. Shodan shows ~378K Tomcat instances globally, though the fraction still running pre-9.0.44 after 5+ years is shrinking rapidly.- Tomcat instance reachable on HTTP/HTTPS port
- Version < 9.0.44
- 9.0.44 was released March 2021 — most maintained deployments have long since upgraded
- Many Tomcat instances sit behind reverse proxies that strip version headers
apache-tomcat-detect templateCVE-2024-21733: Send incomplete POST to leak cross-user data
- Any HTTP endpoint on the vulnerable Tomcat
- No authentication required
- Leaked data is probabilistic — attacker cannot target a specific user or request
- WAFs with request-body validation may reject malformed/truncated POSTs
- Data leaked is partial fragments, not complete request bodies in most cases
Content-Length, application error logs showing 400-series responses with unexpected body contentCVE-2021-41079: Send malformed TLS packet for DoS
- Tomcat configured with
protocol="org.apache.coyote.http11.Http11NioProtocol"AND OpenSSL via tc-native - Direct TLS termination at Tomcat (not offloaded to load balancer)
- NIO+OpenSSL is not the default — most deployments use JSSE for TLS or offload TLS at a reverse proxy/load balancer
- Enterprise deployments almost universally terminate TLS at F5, NGINX, or ALB, never at Tomcat directly
- Even when triggered, impact is availability-only and recoverable via restart
The supporting signals.
| In-the-Wild Exploitation | No known active exploitation campaigns. Neither CVE appears in CISA KEV. No threat intel reports document weaponization in ransomware or APT activity. |
|---|---|
| Proof-of-Concept | CVE-2024-21733: Public PoC by LtmThink on GitHub — Python script sending incomplete POST requests. CVE-2021-41079: No public exploit code identified. |
| EPSS Scores | CVE-2024-21733: 0.1429 (96.4th percentile) — elevated exploitation probability. CVE-2021-41079: 0.0718 (94.0th percentile) — moderate. |
| CISA KEV Status | Not listed for either CVE. |
| CVSS Vectors | CVE-2021-41079: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H (7.5 HIGH) — network-reachable DoS, no confidentiality/integrity impact. CVE-2024-21733: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N (5.3 MEDIUM) — partial confidentiality loss only. |
| Affected Versions | CVE-2021-41079: 9.0.0-M1 through 9.0.43 (also 8.5.0–8.5.63, 10.0.0-M1–10.0.2). CVE-2024-21733: 9.0.0-M11 through 9.0.43 (also 8.5.7–8.5.63). |
| Fixed Versions | 9.0.44 (released 2021-03-10). Distro backports: Debian tomcat9 packages updated in respective stable repos; RHEL/Amazon Linux via ALASTOMCAT8.5-2024-017. |
| Exposure Data | Shodan reports ~378K Tomcat instances globally (March 2025 scan). Fraction running pre-9.0.44 after 5+ years estimated at <5% of the installed base. Most enterprise Tomcat sits behind reverse proxies. |
| Disclosure Date | CVE-2021-41079: 2021-09-16 (fix committed 2021-03-10). CVE-2024-21733: 2024-01-19 (reported 2023-12-20, fix already shipped in 9.0.44 from March 2021). |
| Credit | CVE-2021-41079: Thomas Wozenilek. CVE-2024-21733: Reported via Apache security team, HackerOne disclosure #2327341. |
noisgate verdict.
The single most decisive factor is that the highest-severity CVE (CVE-2021-41079, CVSS 7.5) requires a non-default NIO+OpenSSL connector configuration that the vast majority of Tomcat deployments do not use, collapsing its effective reach to a small fraction of the installed base. The broadly applicable CVE-2024-21733 is already rated MEDIUM at 5.3 with impact limited to partial, probabilistic data leakage — not code execution or persistent compromise.
Why this verdict
- Non-default prerequisite narrows CVE-2021-41079 to near-irrelevance. The DoS requires
NIO+OpenSSLorNIO2+OpenSSLconnector config AND direct TLS termination at Tomcat. Enterprise deployments overwhelmingly offload TLS at load balancers or reverse proxies, making this condition rare. - CVE-2024-21733 impact ceiling is partial confidentiality. The info leak is probabilistic — the attacker cannot target specific users or guarantee useful data in the leaked buffer fragments. No path to code execution, privilege escalation, or lateral movement exists from this flaw alone.
- Role multiplier: Tomcat occupies roles ranging from dev sandbox (low-value) to production application tier hosting business-critical apps (typical) to identity-adjacent services like SSO portals or admin consoles (high-value). Even in high-value roles, neither CVE enables RCE, domain compromise, or supply-chain pivot. The DoS is recoverable; the info leak is partial. The blast radius is host-level availability or partial single-request confidentiality — not fleet-scale. No floor elevation is warranted.
- Age and adoption of fix. The patch (9.0.44) shipped in March 2021 — over 5 years ago. Any system still vulnerable has likely been scanned and reported multiple times. The residual vulnerable population is small and shrinking.
- No KEV, no campaigns, no weaponization. Despite public PoC for CVE-2024-21733 and a 96th-percentile EPSS, there are no documented threat campaigns, no ransomware adoption, and no KEV listing.
Why not higher?
Neither CVE enables remote code execution, privilege escalation, or any write-side impact. CVE-2021-41079 is availability-only and gated behind an uncommon configuration. CVE-2024-21733 leaks partial request data probabilistically — there is no reliable path from this leak to account takeover or lateral movement. Absent RCE or KEV listing, HIGH is not justified.
Why not lower?
CVE-2024-21733 is unauthenticated, network-reachable, requires no user interaction, and has a working public PoC with a 96th-percentile EPSS score. The leaked data *can* include credentials or tokens in POST bodies. Dismissing this as LOW would understate the real confidentiality risk for internet-facing Tomcat instances that have not patched in over five years.
What to do — in priority order.
- Deploy a reverse proxy or WAF in front of Tomcat — A reverse proxy (NGINX, HAProxy, F5) that terminates TLS eliminates CVE-2021-41079 entirely and can filter malformed POST requests that trigger CVE-2024-21733. If not already in place, deploy within the 365-day noisgate remediation window.
- Disable NIO+OpenSSL connector if configured — Switch
server.xmlconnector protocol to default NIO with JSSE (Http11NioProtocolwithout tc-native) to eliminate CVE-2021-41079. This is a configuration change, not a code change — low risk to deploy. - Upgrade to Tomcat 9.0.44 or later — The definitive fix. Given the MEDIUM verdict, target the noisgate remediation SLA of 365 days — though given these patches are 5+ years old, there is no reason to delay if a maintenance window is available.
- Enable custom error pages — Configure
<error-page>directives inweb.xmlto suppress default Tomcat error responses, reducing the data exposed by CVE-2024-21733's error-message leak.
- Network segmentation alone — CVE-2024-21733 is exploitable by any client that can reach the Tomcat HTTP port, including authenticated internal users or compromised workstations. Segmentation does not help if the attacker is already on the allowed network.
- Rate limiting — The info leak requires only two requests and is not a volume-based attack. Rate limiting will not prevent exploitation.
Crowdsourced verification payload.
Run this script on the Tomcat host (or any host with curl access to the target). Invoke as: bash check_tomcat_194473.sh https://target:8443. No special privileges required — it only issues HTTP requests and parses the response.
#!/usr/bin/env bash
# check_tomcat_194473.sh — Detect Apache Tomcat < 9.0.44 (Tenable 194473)
# Usage: bash check_tomcat_194473.sh <BASE_URL>
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -euo pipefail
URL="${1:-}"
if [ -z "$URL" ]; then
echo "Usage: $0 <BASE_URL>" >&2
exit 2
fi
# Attempt to extract Tomcat version from a 404 error page
RESP=$(curl -sk -o - -w '\n%{http_code}' "${URL}/noisgate-version-check-$(date +%s)" 2>/dev/null || true)
if echo "$RESP" | grep -qiE 'Apache Tomcat/[0-9]'; then
VERSION=$(echo "$RESP" | grep -oiE 'Apache Tomcat/[0-9]+\.[0-9]+\.[0-9]+' | head -1 | cut -d'/' -f2)
if [ -z "$VERSION" ]; then
echo "UNKNOWN — Could not parse Tomcat version from response."
exit 2
fi
MAJOR=$(echo "$VERSION" | cut -d. -f1)
MINOR=$(echo "$VERSION" | cut -d. -f2)
PATCH=$(echo "$VERSION" | cut -d. -f3)
echo "Detected: Apache Tomcat/$VERSION"
if [ "$MAJOR" -eq 9 ] && [ "$MINOR" -eq 0 ] && [ "$PATCH" -lt 44 ]; then
echo "VULNERABLE — Tomcat $VERSION is < 9.0.44 (affected by CVE-2021-41079, CVE-2024-21733)"
exit 1
elif [ "$MAJOR" -eq 9 ] && [ "$MINOR" -eq 0 ] && [ "$PATCH" -ge 44 ]; then
echo "PATCHED — Tomcat $VERSION is >= 9.0.44"
exit 0
elif [ "$MAJOR" -lt 9 ]; then
echo "VULNERABLE — Tomcat $VERSION is in an older major branch (check 8.5.x separately)"
exit 1
else
echo "PATCHED — Tomcat $VERSION is a newer branch"
exit 0
fi
else
# Fallback: check via manager or version endpoint
echo "UNKNOWN — Tomcat version not disclosed in error page (version hiding or WAF in front)."
echo "Verify manually: check CATALINA_HOME/lib/catalina.jar META-INF/MANIFEST.MF or run 'catalina.sh version'"
exit 2
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.