← Back to Feed CACHED · 2026-09-17 10:10:44 · CACHE_KEY tenable:299397
tenable:299397 · CWE-295 · Disclosed 2026-02-17

Apache Tomcat 9.0.0.M1 < 9.0.113 multiple vulnerabilities

ASSESSED — NOISGATE
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

It's like finding out your office badge reader can be tricked — but only in a building with two lobbies sharing one turnstile, and one lobby doesn't check badges

CVE-2025-66614 is a client certificate authentication bypass in Apache Tomcat 9.0.0.M1 through 9.0.112 (also affecting 10.1.x < 10.1.50 and 11.0.x < 11.0.15). Tomcat failed to validate that the hostname in the TLS SNI extension matched the hostname in the HTTP Host header. If an instance ran multiple virtual hosts where one required client certificate authentication at the Connector level and another did not, an attacker could route through the unauthenticated vhost's TLS handshake while targeting the authenticated vhost's HTTP endpoint. The bundled CVE-2026-24733 is a low-severity HTTP/0.9 method constraint bypass requiring an even more obscure configuration (HEAD-allowed but GET-denied security constraints).

The NVD CVSS 9.1 CRITICAL rating uses AC:L (low attack complexity) — this is flatly wrong. The attack requires a specific multi-vhost TLS configuration that most Tomcat deployments don't use. Apache themselves rated CVE-2025-66614 as Moderate, and Red Hat scored it with AC:H/UI:R yielding roughly a 5.3. Tenable's own VPR is 4.3. The NVD score is a textbook example of context-free CVSS inflation. The real-world exploitability is dramatically lower than the headline number suggests.

"NVD 9.1 is fantasy — this needs multi-vhost client-cert configs almost nobody runs"
02 · The Attack Path

3 steps from start to impact.

STEP 01

Identify multi-vhost Tomcat with mixed TLS configs

The attacker must discover a Tomcat instance serving multiple virtual hosts over TLS, where at least one vhost enforces client certificate authentication at the Connector level and another does not. This is not detectable via simple port scanning — it requires probing TLS behavior across different SNI values on the same endpoint.
Conditions required:
  • Target runs Tomcat 9.0.0.M1–9.0.112 (or equivalent 10.1.x/11.0.x range)
  • Multiple virtual hosts configured on the same Connector
  • At least one vhost requires client cert auth, another does not
  • Client cert auth enforced at Connector level, NOT at the web application level
Where this breaks in practice:
  • Most Tomcat deployments are single-application or single-vhost
  • Client certificate authentication is uncommon — most use form/token/SAML auth
  • Connector-level client cert enforcement (as opposed to web.xml) is a minority pattern
  • External scanners cannot easily fingerprint this specific configuration
Detection/coverage: Tenable plugin 299397 detects the vulnerable version range but cannot confirm the prerequisite configuration. No scanner distinguishes Connector-level vs web-app-level client cert enforcement.
STEP 02

Craft SNI/Host header mismatch request

The attacker sends a TLS ClientHello with the SNI extension set to the non-authenticated vhost hostname. The TLS handshake completes without requesting a client certificate. The attacker then sends an HTTP request with the Host header set to the authenticated vhost's hostname. Tomcat routes the request to the cert-protected vhost without having verified a client certificate. PoC code exists in at least 6 GitHub repositories demonstrating this technique.
Conditions required:
  • Network access to the Tomcat TLS port
  • Knowledge of both vhost hostnames
Where this breaks in practice:
  • The attacker must know both virtual host names — the protected one and the unprotected one
  • Reverse proxies (nginx, Apache httpd, F5) in front of Tomcat that terminate TLS will neutralize this entirely
  • WAFs performing SNI-to-Host consistency checks block this
Detection/coverage: TLS inspection appliances logging SNI vs Host mismatches would flag this. Most SIEM correlation rules do not check for this by default.
STEP 03

Access client-cert-protected resources

With the bypass achieved, the attacker can access resources on the client-cert-protected vhost as if they had presented a valid certificate. The impact is confidentiality and integrity of whatever that vhost serves. There is no privilege escalation beyond the authentication bypass itself — the attacker lands as an unauthenticated session, not as a specific certificate identity.
Conditions required:
  • Successful SNI/Host mismatch from step 2
  • Protected vhost serves sensitive resources without additional auth layers
Where this breaks in practice:
  • Many deployments layer additional authentication (OAuth, SAML, form login) behind the client cert requirement
  • The bypass grants unauthenticated access, not impersonation of a specific cert identity
  • If the application performs its own certificate checks via request.getAttribute("javax.servlet.request.X509Certificate"), this bypass may still fail at the app layer
Detection/coverage: Application-level access logs would show requests without an associated client certificate identity, which should be anomalous for a cert-required vhost.
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationNo confirmed exploitation. Not listed in CISA KEV. No threat intelligence reports of active campaigns targeting this CVE.
Proof-of-Concept6 public PoC repositories on GitHub. Exploitation is straightforward *if* the prerequisite configuration exists, but the PoCs are configuration-dependent demos, not weaponized tools.
EPSS Score0.14549 (~14.5th percentile) — low predicted exploitation probability. Consistent with the narrow prerequisite configuration.
KEV StatusNot listed. No CISA binding operational directive applies.
CVSS VectorsNVD: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N (9.1). Red Hat: CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N (~5.3). Red Hat's vector is far more accurate — the multi-vhost prerequisite is high complexity, not low.
Affected VersionsTomcat 9.0.0.M1–9.0.112, 10.1.0.M1–10.1.49, 11.0.0.M1–11.0.14, 8.5.0–8.5.100 (EOL)
Fixed Versions9.0.113+, 10.1.50+, 11.0.15+. RHEL/JBoss Web Server backports available via jws6.0 channels.
Exposure DataShodan shows ~5.8M Tomcat instances internet-facing. However, the subset using multi-vhost + Connector-level client cert auth is estimated at <1% of total deployments based on configuration rarity.
Disclosure TimelineReported 2025-10-15 → Fixed 2025-12-07 → Public 2026-02-17. Responsible disclosure, no zero-day window.
ReporterReported to Apache by an external researcher. No specific attribution in the advisory.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.0/10)

The single most decisive factor is the narrow prerequisite configuration: exploitation requires multi-vhost Tomcat with mixed Connector-level client certificate requirements, a pattern present in fewer than 5% of real-world Tomcat deployments. The NVD's AC:L rating is factually incorrect for this attack chain; Red Hat's AC:H is the accurate assessment.

HIGH Vulnerability mechanics and prerequisites are well-documented by Apache
HIGH Configuration rarity assessment — client cert auth at Connector level is a known minority pattern
MEDIUM Installed base share estimate (<5%) — based on practitioner consensus, not hard telemetry

Why this verdict

  • Configuration prerequisite is rare: The attack requires multi-vhost Tomcat with asymmetric client cert enforcement at the Connector level. Most Tomcat instances are single-app deployments or use form/token authentication. This alone compresses the reachable population below 5%.
  • NVD vector is demonstrably wrong: AC:L implies any attacker can trivially exploit this. The reality is AC:H — the attacker needs a specific, uncommon server configuration to exist. Red Hat and Apache both scored this lower than NVD.
  • No active exploitation or KEV listing: EPSS at 14.5th percentile, zero confirmed in-the-wild campaigns. Six PoCs exist but are configuration-dependent demonstrations, not spray-and-pray tools.
  • TLS-terminating reverse proxies neutralize the attack: Enterprises running Tomcat behind nginx, Apache httpd, HAProxy, or any L7 load balancer that terminates TLS are not vulnerable regardless of Tomcat version, because the SNI mismatch is resolved at the proxy layer.
  • Role multiplier: Tomcat occupies high-value roles (app servers behind identity flows, internal APIs). However, the specific prerequisite — Connector-level client cert auth with mixed vhosts — is a configuration pattern, not a role pattern. A domain controller equivalent this is not. Even on a high-value Tomcat instance serving an IdP, if it doesn't run multi-vhost with mixed client cert configs (and most don't), the chain doesn't start. The blast radius when the chain *does* succeed is authentication bypass → unauthorized access to a single vhost's resources (tenant-level, not fleet-level). This does not meet the HIGH floor threshold because the affected configuration represents well under 1% of the Tomcat installed base in typical enterprise deployments.

Why not higher?

Upgrading to HIGH would require either active exploitation, a broader attack surface, or fleet-scale blast radius. None apply. The prerequisite configuration is uncommon enough that even with 5.8M internet-facing Tomcat instances, the actually-vulnerable population is a small fraction. The blast radius is bounded to a single vhost's resources — there is no lateral movement, privilege escalation, or code execution in this chain.

Why not lower?

Despite the narrow prerequisites, the PoCs are public, the bypass is clean when conditions are met, and client certificate authentication is typically used to protect *sensitive* resources (mutual TLS for APIs, admin panels, regulated data endpoints). Organizations that *do* use this pattern tend to rely on it as a primary security boundary. A LOW rating would understate the impact for the minority of environments where this configuration exists.

05 · Compensating Control

What to do — in priority order.

  1. Verify whether your Tomcat instances use multi-vhost with Connector-level client cert auth — Run a configuration audit across your fleet. If no instances match this pattern, the vulnerability is not exploitable in your environment and you can deprioritize accordingly. Check server.xml for multiple <Host> elements under a single <Connector> with clientAuth attributes. Complete this within the 365-day noisgate remediation SLA window.
  2. Move client certificate enforcement to the web application layer — Configure client cert requirements in web.xml using <auth-constraint> and <login-config> with CLIENT-CERT rather than at the Connector level. This makes the application enforce cert checks regardless of TLS-level behavior, neutralizing the SNI bypass. Deploy within the 365-day remediation window.
  3. Terminate TLS at a reverse proxy upstream of Tomcat — If you use nginx, Apache httpd, HAProxy, or a cloud load balancer for TLS termination, Tomcat never sees the raw TLS handshake and the SNI mismatch attack is impossible. Most enterprise deployments already do this. Confirm your architecture and document it.
  4. Upgrade to Tomcat 9.0.113+ (or 10.1.50+ / 11.0.15+) — The definitive fix. Apply within the 365-day noisgate remediation SLA for MEDIUM findings. Note that 9.0.113 itself has subsequent CVEs — target 9.0.118+ if possible to sweep up later fixes.
What doesn't work
  • WAF rules alone — while a WAF *could* check SNI-to-Host consistency, most WAF rulesets do not include this check by default. Don't assume your WAF covers this without explicit verification.
  • Network segmentation — this is a TLS-layer bypass, not a network-layer attack. If the attacker can reach the Tomcat port, segmentation doesn't help.
  • Upgrading to exactly 9.0.113 — the fix for CVE-2025-66614 in 9.0.113 was later found to be incomplete (CVE-2026-29145, CVE-2026-32990). Target 9.0.116+ for a complete fix.
06 · Verification

Crowdsourced verification payload.

Run this on each Tomcat host or from a management workstation with access to Tomcat's server.xml. No special privileges needed beyond read access to the Tomcat configuration directory. Example: bash check_tomcat_sni_bypass.sh /opt/tomcat

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# check_tomcat_sni_bypass.sh — Check for CVE-2025-66614 / CVE-2026-24733 exposure
# Usage: bash check_tomcat_sni_bypass.sh <CATALINA_HOME>
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -euo pipefail

CATALINA_HOME="${1:-}"
if [ -z "$CATALINA_HOME" ]; then
  echo "Usage: $0 <CATALINA_HOME>"
  exit 2
fi

# Step 1: Detect Tomcat version
VERSION_FILE="$CATALINA_HOME/lib/catalina.jar"
if [ ! -f "$VERSION_FILE" ]; then
  echo "UNKNOWN — catalina.jar not found at $CATALINA_HOME/lib/"
  exit 2
fi

VERSION=$(unzip -p "$VERSION_FILE" org/apache/catalina/util/ServerInfo.properties 2>/dev/null | grep 'server.info' | sed 's/.*\///' || echo "")
if [ -z "$VERSION" ]; then
  echo "UNKNOWN — could not extract Tomcat version"
  exit 2
fi

echo "Detected Tomcat version: $VERSION"

# Step 2: Compare version (for 9.0.x branch)
MAJOR=$(echo "$VERSION" | cut -d. -f1)
MINOR=$(echo "$VERSION" | cut -d. -f2)
PATCH=$(echo "$VERSION" | cut -d. -f3)

VULNERABLE_VERSION=false
if [ "$MAJOR" -eq 9 ] && [ "$MINOR" -eq 0 ]; then
  if [ "$PATCH" -lt 116 ]; then
    VULNERABLE_VERSION=true
  fi
elif [ "$MAJOR" -eq 10 ] && [ "$MINOR" -eq 1 ]; then
  if [ "$PATCH" -lt 50 ]; then
    VULNERABLE_VERSION=true
  fi
elif [ "$MAJOR" -eq 11 ] && [ "$MINOR" -eq 0 ]; then
  if [ "$PATCH" -lt 15 ]; then
    VULNERABLE_VERSION=true
  fi
fi

if [ "$VULNERABLE_VERSION" = false ]; then
  echo "PATCHED — Tomcat $VERSION is not in the vulnerable range"
  exit 0
fi

# Step 3: Check for multi-vhost + client cert config (actual exploitability)
SERVER_XML="$CATALINA_HOME/conf/server.xml"
if [ ! -f "$SERVER_XML" ]; then
  echo "VULNERABLE — Tomcat $VERSION is vulnerable (could not check server.xml for config)"
  exit 1
fi

HOST_COUNT=$(grep -c '<Host ' "$SERVER_XML" 2>/dev/null || echo 0)
CLIENT_AUTH=$(grep -i 'clientAuth' "$SERVER_XML" 2>/dev/null || echo "")

if [ "$HOST_COUNT" -gt 1 ] && [ -n "$CLIENT_AUTH" ]; then
  echo "VULNERABLE — Tomcat $VERSION with multi-vhost and clientAuth config detected. HIGH RISK for CVE-2025-66614."
  exit 1
elif [ "$HOST_COUNT" -le 1 ]; then
  echo "VULNERABLE — Tomcat $VERSION is in the affected range but single-vhost config detected. Low exploitability for CVE-2025-66614. Patch recommended (target 9.0.116+)."
  exit 1
else
  echo "VULNERABLE — Tomcat $VERSION is in the affected range. Patch to 9.0.116+."
  exit 1
fi
07 · Bottom Line

If you remember one thing.

TL;DR
This is a MEDIUM finding after reassessment — the NVD CRITICAL 9.1 is not credible for real-world deployments. First, audit your Tomcat fleet for multi-vhost configurations with Connector-level clientAuth settings; if none exist, this CVE is not exploitable in your environment and can ride the standard patch cycle. Per the noisgate remediation SLA for MEDIUM findings, there is no mitigation SLA — go straight to the 365-day remediation window. Target Tomcat 9.0.116+ (not just 9.0.113, which has its own subsequent CVEs) within that window. If you *do* find instances with the vulnerable multi-vhost + client-cert configuration, treat those specific hosts as HIGH priority and apply the patch or move client cert enforcement to the web application layer within 30 days. No active exploitation or KEV listing means there is no emergency override in play.

Sources

  1. Tenable Plugin 299397
  2. Apache Tomcat 9 Security Advisories
  3. CVE-2025-66614 — Red Hat Portal
  4. CVE-2025-66614 — GitHub Advisory (GHSA-fpj8-gq4v-p354)
  5. CVE-2026-24733 — GitHub Advisory (GHSA-qq5r-98hh-rxc9)
  6. HeroDevs: CVE-2025-66614 & CVE-2026-24733 Impact on Spring Boot
  7. CVE-2025-66614 — CVEFeed Detail
  8. Rapid7: CVE-2026-24733
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.