A 9.8 alarm bell wired to a door that almost nobody has installed
This Tenable plugin (211503) bundles two CVEs affecting Apache Tomcat 9.0.92 through 9.0.95, fixed in 9.0.96. CVE-2024-52316 (CVSS 9.8) is an authentication bypass that fires only when Tomcat is configured with a *custom* Jakarta Authentication (JASPIC) ServerAuthContext component that throws an exception during authentication *without* explicitly setting an HTTP failure status — Apache's own advisory notes no known components behave this way. CVE-2024-52317 (CVSS 6.5) is an HTTP/2 request/response object-recycling bug that can leak one user's request or response data to another user, a genuine information-disclosure concern wherever HTTP/2 is enabled on affected versions.
The vendor CVSS 9.8 is technically defensible *if* you assume the JASPIC precondition is met, but it wildly overstates real-world risk. Tenable's own VPR score — 4.9, medium — tells you what the vendor's own risk model actually thinks after adjusting for exploitability. The JASPIC prerequisite is so exotic that it functions as a near-perfect filter: the population of Tomcat deployments running custom ServerAuthContext implementations that also mishandle exceptions is vanishingly small. The HTTP/2 mixup is more broadly reachable but its impact ceiling is session/data leakage, not RCE or full auth bypass. Taken together, this plugin deserves a MEDIUM in any fleet that hasn't hand-rolled JASPIC plumbing.
4 steps from start to impact.
Identify Tomcat instance on affected version
/docs default app. Version disclosure is common on unhardened instances. Shodan/FOFA queries surface Tomcat version strings routinely.- Target runs Tomcat 9.0.92–9.0.95
- Tomcat is network-reachable (internal or internet-facing)
- Version range is narrow — only four minor releases spanning ~3 months of builds
- Many enterprises proxy Tomcat behind a reverse proxy that strips version headers
(CVE-2024-52316) Trigger exception in custom JASPIC ServerAuthContext
ServerAuthContext to throw an exception. If the custom component does not explicitly set an HTTP status code indicating failure before throwing, Tomcat treats the authentication as successful. The attacker lands an authenticated session without valid credentials.- Tomcat must be configured with Jakarta Authentication (JASPIC)
- A custom
ServerAuthContextmust be deployed - The custom component must throw exceptions without setting HTTP failure status
- No known Jakarta Authentication components behave this way per Apache's own advisory
- JASPIC adoption in Tomcat is extremely niche — most deployments use Realm-based auth, Spring Security, or container-managed FORM/BASIC auth
- Even custom JASPIC implementations that do exist typically set failure status codes as part of normal error handling
jaspic-providers.xml or application code required.(CVE-2024-52317) Exploit HTTP/2 object recycling for data leakage
- HTTP/2 must be enabled on the Tomcat connector
- Multiple concurrent users must be active on the same connector
- Target runs 9.0.92–9.0.95
- Many Tomcat deployments terminate TLS/HTTP2 at the load balancer or reverse proxy, so Tomcat itself speaks HTTP/1.1 only
- Exploitation is non-deterministic — attacker cannot target a specific victim's session
- Impact ceiling is information disclosure, not code execution
Leverage leaked session or auth bypass for lateral movement
- Prior step must succeed
- Application behind Tomcat must expose high-value data or admin functionality
- CVE-2024-52316 path is gated by an almost-nonexistent prerequisite
- CVE-2024-52317 path yields partial, non-deterministic data leakage
- Application-layer controls (RBAC, CSRF tokens, short-lived JWTs) limit blast radius of leaked fragments
The supporting signals.
| In-the-Wild Exploitation | No confirmed exploitation. Neither CVE is in the CISA KEV catalog. No credible reports of active campaigns targeting these specific flaws. |
|---|---|
| Proof of Concept | CVE-2024-52316: TAM-K592/CVE-2024-52316 on GitHub — demonstrates the auth bypass but requires you to build and deploy a custom vulnerable JASPIC provider first. Not a point-and-shoot exploit. CVE-2024-52317: No public PoC. |
| EPSS | CVE-2024-52316: ~1.3%–6.3% (varies by source/update date). CVE-2024-52317: low, not prominently scored. Both well below the 10% threshold that typically signals imminent exploitation. |
| CISA KEV | Not listed for either CVE as of September 2026. |
| CVSS Vectors | CVE-2024-52316: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (9.8) — note AC:L is debatable given the custom-JASPIC prerequisite. CVE-2024-52317: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N (6.5). |
| Tenable VPR | 4.9 (Medium, 57th percentile) — Tenable's own risk-adjusted score is dramatically lower than the CVSS 9.8, reflecting the impractical prerequisites. |
| Affected Versions | CVE-2024-52316: Tomcat 9.0.0.M1–9.0.95, 10.1.0.M1–10.1.30, 11.0.0.M1–11.0.0.M26 (plus EOL 8.5.x). CVE-2024-52317: Tomcat 9.0.92–9.0.95, 10.1.27–10.1.30, 11.0.0.M23–11.0.0.M26. |
| Fixed Versions | 9.0.96, 10.1.31, 11.0.0. Distro backports: check RHEL, Ubuntu, Amazon Linux advisories for backported fixes. |
| Exposure Data | Apache Tomcat is massively deployed — Shodan shows hundreds of thousands of internet-facing instances across all versions. However, the *vulnerable configuration* (custom JASPIC) is effectively unmeasurable because it requires application-level inspection, not banner grabbing. |
| Disclosure & Credit | Disclosed 2024-11-18 via Apache Tomcat security mailing list. CVE-2024-52316 reported to Apache; CVE-2024-52317 identified during internal code review. |
noisgate verdict.
The single most decisive factor is the near-zero real-world prevalence of the prerequisite configuration: CVE-2024-52316's 9.8 score requires a custom JASPIC ServerAuthContext that mishandles exceptions — a configuration Apache itself says no known component exhibits. Stripping that phantom attack surface leaves CVE-2024-52317's HTTP/2 data-leakage bug (CVSS 6.5) as the only broadly reachable flaw, which caps impact at information disclosure rather than code execution or full authentication bypass.
Why this verdict
- Phantom prerequisite: CVE-2024-52316 requires a custom JASPIC
ServerAuthContextthat throws exceptions without setting failure status. Apache's advisory states no known component behaves this way. The CVSS 9.8 scores a scenario that effectively does not exist in production. - Tenable's own VPR agrees: Tenable rates this plugin at VPR 4.9 (Medium) — a 5-point drop from the CVSS base. When the vendor's own risk model disagrees with the CVSS this strongly, the CVSS is measuring theoretical ceiling, not operational risk.
- Narrow version window: CVE-2024-52317 only affects 9.0.92–9.0.95, a span of four minor releases over ~3 months. Enterprises on LTS or slightly older tracks (9.0.x < 9.0.92) are not affected by the HTTP/2 bug at all.
- HTTP/2 termination architecture: Many enterprise Tomcat deployments terminate HTTP/2 at the load balancer or reverse proxy (NGINX, HAProxy, F5), meaning Tomcat's own HTTP/2 connector is never exercised — further reducing the CVE-2024-52317 population.
- Role multiplier: Tomcat serves as an application server across roles from dev sandboxes to production API tiers. In high-value roles (e.g., hosting an identity service or admin console), the HTTP/2 data-leakage bug could expose tokens or PII, but the blast radius is *per-session fragment leakage*, not domain takeover or fleet compromise. The JASPIC auth-bypass chain does not succeed in any role without the custom component. No high-value-role outcome reaches the domain/fleet/supply-chain threshold, so no verdict floor override applies.
- No exploitation signal: Not in CISA KEV, no confirmed campaigns, EPSS under 7%, PoC requires self-deployed vulnerable JASPIC provider. The threat-intel signal is quiet.
Why not higher?
Upgrading to HIGH would require either active exploitation evidence, a broadly reachable attack path leading to code execution, or a high-value-role blast radius reaching domain/fleet scale. None of these conditions are met. The auth-bypass path is gated by a prerequisite that doesn't exist in known deployments, and the HTTP/2 mixup caps at partial information disclosure. Tenable's own VPR of 4.9 corroborates that MEDIUM is already generous.
Why not lower?
CVE-2024-52317's HTTP/2 request/response mixup is a real bug that can leak user data without authentication on affected versions. It's not purely theoretical — any Tomcat instance serving HTTP/2 directly on 9.0.92–9.0.95 with concurrent users is vulnerable. Information disclosure between users is a meaningful confidentiality impact that keeps this above LOW. Additionally, the PoC availability for CVE-2024-52316, while requiring self-built prerequisites, means the mechanism is documented and understood.
What to do — in priority order.
- Audit for JASPIC configuration — Run
grep -r 'jaspic\|ServerAuthContext\|AuthConfigProvider' $CATALINA_BASE/conf/ $CATALINA_BASE/webapps/across your fleet. If zero hits (expected for >99% of deployments), CVE-2024-52316 is not exploitable in your environment. Document this finding and deprioritize that CVE. No mitigation SLA applies for MEDIUM — go straight to the 365-day remediation window. - Terminate HTTP/2 at the reverse proxy — If Tomcat connectors are configured with
protocol="org.apache.coyote.http2.Http2Protocol"orh2upgrade support, consider terminating HTTP/2 at your load balancer (NGINX, HAProxy, F5) and speaking HTTP/1.1 to Tomcat backends. This eliminates the CVE-2024-52317 attack surface entirely without patching. Implement within your standard change window. - Upgrade to Tomcat 9.0.96+ — The definitive fix. Version 9.0.96 was released October 2024. As a MEDIUM finding, the noisgate remediation SLA gives you 365 days. Plan this in your next quarterly patch cycle.
- Restrict Tomcat management interfaces — Ensure
/manager,/host-manager, and any admin endpoints are not exposed to untrusted networks. This limits the blast radius of any auth bypass, even a theoretical one.
- WAF rules for auth bypass — CVE-2024-52316 is triggered by the *server-side JASPIC exception handling*, not by a malicious request payload. No WAF signature can block a server misconfiguration from being exploitable.
- Disabling HTTP/2 at the TLS level only — If Tomcat's connector itself supports HTTP/2 cleartext (h2c) and clients connect directly, TLS-level ALPN changes won't help. You must disable HTTP/2 on the Tomcat connector or ensure no direct client access.
Crowdsourced verification payload.
Run this script on each Tomcat host as any user with read access to $CATALINA_HOME and $CATALINA_BASE. Example: bash check_tomcat_211503.sh /opt/tomcat. It checks the installed version and JASPIC configuration presence.
#!/usr/bin/env bash
# check_tomcat_211503.sh — Verify exposure to Tenable 211503 (CVE-2024-52316 + CVE-2024-52317)
# Usage: bash check_tomcat_211503.sh /path/to/tomcat
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -euo pipefail
CATALINA_HOME="${1:-${CATALINA_HOME:-}}"
if [[ -z "$CATALINA_HOME" ]]; then
echo "UNKNOWN — provide CATALINA_HOME as argument or env var"
exit 2
fi
# Extract version
VERSION_FILE="$CATALINA_HOME/lib/catalina.jar"
if [[ ! -f "$VERSION_FILE" ]]; then
echo "UNKNOWN — cannot find $VERSION_FILE"
exit 2
fi
VERSION=$(unzip -p "$VERSION_FILE" org/apache/catalina/util/ServerInfo.properties 2>/dev/null \
| grep 'server.number' | cut -d= -f2 | tr -d '[:space:]')
if [[ -z "$VERSION" ]]; then
echo "UNKNOWN — could not parse Tomcat version"
exit 2
fi
echo "Detected Tomcat version: $VERSION"
# Parse major.minor.patch
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"
# Check if in vulnerable range: 9.0.92 <= version <= 9.0.95
VULN_VERSION=false
if [[ "$MAJOR" -eq 9 && "$MINOR" -eq 0 && "$PATCH" -ge 92 && "$PATCH" -le 95 ]]; then
VULN_VERSION=true
fi
if [[ "$VULN_VERSION" == false ]]; then
echo "PATCHED — version $VERSION is outside the affected range (9.0.92–9.0.95)"
exit 0
fi
# Check for JASPIC configuration (CVE-2024-52316 relevance)
CATALINA_BASE="${CATALINA_BASE:-$CATALINA_HOME}"
JASPIC_CONF="$CATALINA_BASE/conf/jaspic-providers.xml"
JASPIC_FOUND=false
if [[ -f "$JASPIC_CONF" ]] && grep -qi 'AuthConfigProvider\|ServerAuthContext' "$JASPIC_CONF" 2>/dev/null; then
JASPIC_FOUND=true
fi
# Check for HTTP/2 connector (CVE-2024-52317 relevance)
SERVER_XML="$CATALINA_BASE/conf/server.xml"
H2_FOUND=false
if [[ -f "$SERVER_XML" ]] && grep -qiE 'Http2Protocol|h2c|upgradeProtocol.*HTTP2' "$SERVER_XML" 2>/dev/null; then
H2_FOUND=true
fi
echo "JASPIC custom config detected: $JASPIC_FOUND"
echo "HTTP/2 connector detected: $H2_FOUND"
if [[ "$JASPIC_FOUND" == true ]]; then
echo "VULNERABLE — version $VERSION is affected AND custom JASPIC configuration found (CVE-2024-52316 + CVE-2024-52317)"
exit 1
elif [[ "$H2_FOUND" == true ]]; then
echo "VULNERABLE — version $VERSION is affected AND HTTP/2 connector enabled (CVE-2024-52317)"
exit 1
else
echo "VULNERABLE — version $VERSION is in affected range, but neither JASPIC nor HTTP/2 connectors detected. Effective risk is minimal. Upgrade recommended."
exit 1
fiIf you remember one thing.
Sources
- Tenable Plugin 211503
- Apache Tomcat 9 Security Advisories
- CVE-2024-52316 – Tarlogic Analysis
- CVE-2024-52316 – GitHub Advisory GHSA-xcpr-7mr4-h4xq
- CVE-2024-52316 PoC – TAM-K592
- CVE-2024-52317 – oss-security Disclosure
- CVE-2024-52317 – Red Hat Bugzilla
- HKCERT Advisory – Apache Tomcat Multiple Vulnerabilities
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.