← Back to Feed CACHED · 2026-09-17 09:51:25 · CACHE_KEY tenable:271691
tenable:271691 · CWE-23 · Disclosed 2025-10-27

Apache Tomcat 9.0.0.M11 < 9.0.109 multiple vulnerabilities

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

Like finding a secret passage that only exists if someone installed two optional trap doors and left them both unlocked

CVE-2025-55752 is a relative path traversal in Apache Tomcat's RewriteValve caused by a regression in the fix for bug 60013. The rewritten URL is normalized *before* it is decoded, letting an attacker slip URL-encoded ../ sequences past the security filter to reach /WEB-INF/ and /META-INF/. If HTTP PUT is also enabled for untrusted users, a JSP webshell can be uploaded into those directories — full RCE. Affected versions: Tomcat 9.0.0.M11–9.0.108, 10.1.0-M1–10.1.44, 11.0.0-M1–11.0.10, and EOL 8.5.6–8.5.100. Fixed in 9.0.109, 10.1.45, and 11.0.11. The Tenable plugin also references CVE-2025-55754 (ANSI escape injection, CVSS 9.6) and CVE-2025-61795 (multipart DoS, CVSS 5.3), but the actionable risk is overwhelmingly concentrated in CVE-2025-55752.

The vendor CVSS of 7.5 HIGH is defensible *in theory* — the path-traversal-to-RCE chain is real. But it overstates the risk for the vast majority of production Tomcat deployments. RewriteValve is an optional component (Tomcat's equivalent of Apache mod_rewrite) that many shops never enable, and the DefaultServlet ships with readonly=true, meaning PUT is disabled out of the box. You need both non-default settings simultaneously for RCE. Without PUT, the impact drops to information disclosure of deployment descriptors and compiled classes — sensitive, but not fleet-ending. CVE-2025-55754's 9.6 is frankly absurd: it requires a Windows admin to be watching Tomcat logs in a raw console, then paste from a manipulated clipboard. That's social-engineering theater, not a network-exploitable vulnerability.

"Path traversal needs RewriteValve AND PUT enabled — two non-default configs most shops never touch"
02 · The Attack Path

5 steps from start to impact.

STEP 01

Identify Tomcat with RewriteValve

The attacker fingerprints a Tomcat instance (trivial via Server header or error pages) and probes for URL rewriting behavior. RewriteValve is configured in server.xml or context.xml and activated per-host or per-context. The attacker sends canary requests with encoded path segments to confirm rewrite rules are active and that the normalize-before-decode regression is present.
Conditions required:
  • Target runs Tomcat 9.0.0.M11–9.0.108 (or equivalent 10.x/11.x range)
  • RewriteValve is enabled with rules that rewrite query parameters into the URL path
Where this breaks in practice:
  • RewriteValve is not enabled by default — many deployments use a reverse proxy (nginx, Apache httpd) for rewriting instead
  • The specific rewrite rule pattern (query-to-path) is a subset of all RewriteValve usage
Detection/coverage: Nessus plugin 271691 detects the vulnerable version range. Qualys QID for CVE-2025-55752 available. WAF rules for ../ sequences in URL-encoded form (%2e%2e%2f) can flag attempts.
STEP 02

Traverse to /WEB-INF/ or /META-INF/

Using a crafted request with double-encoded or mixed-encoding path traversal sequences (e.g., %2e%2e%2f), the attacker bypasses the Tomcat security constraint that normally blocks access to /WEB-INF/ and /META-INF/. The normalize-before-decode bug means the traversal payload survives normalization and resolves after decoding. This yields read access to web.xml, compiled .class files, and configuration resources.
Conditions required:
  • Step 1 confirmed: RewriteValve active with vulnerable rewrite pattern
Where this breaks in practice:
  • A properly configured reverse proxy in front of Tomcat may independently reject or normalize these sequences before they reach Tomcat
  • IDS/IPS rules for directory traversal patterns will fire on the encoded sequences
Detection/coverage: WAF/IDS signatures for path traversal (Snort SIDs, ModSecurity CRS rules). Access logs will show unusual encoded .. sequences in the request URI.
STEP 03

Exfiltrate sensitive deployment descriptors

With read access to /WEB-INF/web.xml and property files, the attacker extracts database credentials, API keys, LDAP bind passwords, and application configuration. Compiled .class files can be decompiled to reveal business logic and hardcoded secrets. This is the terminal impact if PUT is *not* enabled — information disclosure, not RCE.
Conditions required:
  • Step 2 succeeded
Where this breaks in practice:
  • Modern deployments externalize secrets to vaults (HashiCorp Vault, AWS Secrets Manager) or environment variables rather than embedding them in WEB-INF
  • Decompiling classes requires effort and may not yield actionable credentials
Detection/coverage: DLP monitoring on outbound traffic for known config file patterns. Anomalous GET requests to paths resolving to WEB-INF resources in access logs.
STEP 04

Upload webshell via PUT (RCE path)

If the Tomcat DefaultServlet has readonly=false (enabling HTTP PUT), the attacker uploads a malicious JSP file (e.g., a webshell) into the web application directory via the same traversal path. The JSP is compiled and executed by Tomcat's Jasper engine on the next request, granting the attacker code execution as the Tomcat service account. PoC exploits from TAM-K592 and masahiro331 on GitHub automate this chain end-to-end.
Conditions required:
  • Step 2 succeeded
  • DefaultServlet readonly parameter set to false (non-default)
  • PUT method accessible to untrusted users (no authentication gate)
Where this breaks in practice:
  • DefaultServlet ships with readonly=true — PUT is disabled by default
  • Enterprise deployments behind a reverse proxy typically do not forward PUT to Tomcat
  • Even if PUT is enabled, authentication requirements on the endpoint may block anonymous upload
Detection/coverage: HTTP PUT requests to unusual paths are high-signal in most Tomcat deployments. EDR on the Tomcat host will flag new .jsp file creation in the webapps directory.
STEP 05

Post-exploitation as Tomcat service account

With webshell access, the attacker operates as the Tomcat process owner (often tomcat on Linux, a service account on Windows). Lateral movement depends on what the service account can reach — database connections, internal APIs, cloud metadata endpoints. On a domain-joined Windows host running Tomcat as a domain service account, this could feed into AD attack paths.
Conditions required:
  • Step 4 succeeded
Where this breaks in practice:
  • Tomcat best practice is to run as a low-privilege dedicated user with no shell
  • Container deployments (Docker/K8s) limit blast radius to the pod
  • Network segmentation limits lateral movement from the app tier
Detection/coverage: EDR behavioral detection for child processes spawned by the Java/Tomcat process. SIEM correlation of new outbound connections from the Tomcat host.
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNot confirmed. No CISA KEV listing as of 2026-09-17. No named campaigns. Belgian CCB warned exploitation was *likely* near disclosure.
Proof-of-conceptPublic and weaponized. 10+ GitHub repos including TAM-K592/CVE-2025-55752 and masahiro331/CVE-2025-55752. End-to-end exploit chains available.
EPSS0.6654 (66.5%) — 99th percentile. Model heavily weights PoC availability and Tomcat's install base. High EPSS but no confirmed exploitation suggests the model is front-running actual threat activity.
KEV statusNot listed on CISA KEV as of 2026-09-17.
CVSS vectorCVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H (7.5 HIGH). Note AC:H — even the vendor acknowledges high attack complexity due to the RewriteValve prerequisite.
Affected versionsTomcat 9.0.0.M11–9.0.108, 10.1.0-M1–10.1.44, 11.0.0-M1–11.0.10, EOL 8.5.6–8.5.100
Fixed versions9.0.109, 10.1.45, 11.0.11. Distro backports: RHEL/CentOS via tomcat package updates, Debian/Ubuntu via tomcat9 package, Amazon Linux via ALAS advisories.
Scanning/exposureShodan indexes millions of Tomcat instances globally, but RewriteValve + PUT-enabled subset is not externally fingerprint-able. CyCognito reports the *reachable* population is a small fraction of total Tomcat installs.
Disclosure date2025-10-27 (Tenable plugin published). Apache advisory dated 2025-09-05 (patch release).
Researcher/orgReported to Apache Software Foundation. PoCs by TAM-K592, masahiro331, and others.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.5/10)

The single most decisive factor is the dual non-default configuration prerequisite: RCE requires both RewriteValve with query-to-path rewrite rules AND DefaultServlet readonly=false, neither of which is enabled in Tomcat's default configuration. Without both, the maximum impact is information disclosure of deployment descriptors — a real but bounded risk that does not justify a HIGH classification for fleet-wide prioritization.

HIGH Vulnerability mechanics and prerequisite chain
MEDIUM Fraction of Tomcat installs running RewriteValve with vulnerable patterns
LOW Fraction of those also exposing PUT to untrusted users

Why this verdict

  • Dual non-default prerequisite: RCE requires RewriteValve *and* readonly=false simultaneously. Neither is a default setting. The CVSS vector already encodes AC:H for this reason, but even 7.5 overstates fleet-wide risk because most Tomcat instances satisfy zero of the two prerequisites.
  • Information-disclosure-only path is the realistic ceiling: Without PUT, the attacker reads /WEB-INF/ contents. Sensitive, but bounded — especially in shops that externalize secrets to vaults or environment variables. This maps to a ~5.0–6.0 range, not 7.5.
  • EPSS is high but unconfirmed: 66.5% EPSS at the 99th percentile is a strong predictive signal, but no KEV listing, no named threat actor campaigns, and no GreyNoise confirmed exploitation tags exist as of September 2026. The EPSS score is driven by PoC availability and Tomcat's popularity, not observed exploitation.
  • Role multiplier: Tomcat occupies the application-tier role in most deployments — a *typical* role (category b), not inherently a high-value identity/infrastructure tier. While Tomcat *can* host identity apps or CI/CD front-ends (Jenkins), the exploit chain's success depends on Tomcat-level config (RewriteValve + PUT), not the hosted application's role. Even on a Jenkins-hosting Tomcat, the RewriteValve + PUT combo is exceedingly rare. No high-value role scenario plausibly reaches fleet/domain compromise at ≥1% of the installed base through *this specific chain*.
  • No KEV, no active exploitation: Absence from KEV after nearly 12 months since disclosure is a meaningful negative signal for a vulnerability with public PoCs in a widely deployed component.

Why not higher?

Upgrading to HIGH would require either confirmed in-the-wild exploitation, KEV listing, or a single-prerequisite path to RCE. None of these conditions are met. The RCE path requires two independent non-default configurations, which compounds the friction multiplicatively — this is not a 'scan and pwn' vulnerability. The high EPSS score is noted but is a *prediction*, not evidence of exploitation.

Why not lower?

Dropping to LOW would ignore the real information-disclosure path that requires only one non-default setting (RewriteValve). RewriteValve is a legitimate, documented feature that a meaningful minority of Tomcat deployments use. Reading /WEB-INF/web.xml can expose database credentials and internal architecture. The 10+ public PoCs lower the skill barrier. MEDIUM correctly reflects a vulnerability that matters for the subset of deployments using RewriteValve but does not warrant emergency patching for the general Tomcat population.

05 · Compensating Control

What to do — in priority order.

  1. Audit and disable HTTP PUT on DefaultServlet — Confirm readonly=true (the default) in web.xml for every Tomcat instance. This eliminates the RCE path entirely and takes minutes per host. No mitigation SLA applies at MEDIUM — go straight to the 365-day remediation window, but this check is trivial and should be done immediately as hygiene.
  2. Move URL rewriting to the reverse proxy — If you use RewriteValve, migrate rewrite rules to nginx, Apache httpd, or your load balancer. This removes the vulnerable code path from Tomcat entirely. If RewriteValve must stay, audit rules to ensure none rewrite query parameters into the URL path.
  3. Block encoded path traversal at WAF/reverse proxy — Deploy WAF rules that reject requests containing %2e%2e, %252e, or other double-encoded traversal sequences in the URI. ModSecurity CRS rule 930100 and similar cover this pattern.
  4. Externalize secrets from WEB-INF — Move database credentials, API keys, and LDAP bind passwords out of web.xml and property files into a secrets manager or environment variables. This limits the blast radius of the information-disclosure path.
What doesn't work
  • Network segmentation alone does not help — the attack arrives as a normal HTTP request on the application's listening port, which must be reachable for the app to function.
  • Tomcat's built-in SecurityManager is deprecated since Tomcat 9 and removed in later versions; it cannot be relied upon as a compensating control.
  • Disabling directory listings has no effect — this is a path traversal, not a directory listing vulnerability. The attacker requests specific files by name.
06 · Verification

Crowdsourced verification payload.

Run this on each Tomcat host as any user with read access to the Tomcat installation directory. Example: bash check_cve_2025_55752.sh /opt/tomcat or bash check_cve_2025_55752.sh /usr/share/tomcat9. No root required.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# check_cve_2025_55752.sh — Detect CVE-2025-55752 exposure in Apache Tomcat 9.x
# Usage: bash check_cve_2025_55752.sh <CATALINA_HOME>
# 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

# Detect version from catalina.jar manifest or version.sh
VERSION=""
if [ -f "$CATALINA_HOME/lib/catalina.jar" ]; then
  VERSION=$(unzip -p "$CATALINA_HOME/lib/catalina.jar" META-INF/MANIFEST.MF 2>/dev/null | grep 'Implementation-Version' | cut -d' ' -f2 | tr -d '\r')
fi
if [ -z "$VERSION" ] && [ -x "$CATALINA_HOME/bin/version.sh" ]; then
  VERSION=$("$CATALINA_HOME/bin/version.sh" 2>/dev/null | grep 'Server number' | awk '{print $3}')
fi
if [ -z "$VERSION" ]; then
  echo "UNKNOWN — could not determine Tomcat version in $CATALINA_HOME"
  exit 2
fi

echo "Detected Tomcat version: $VERSION"

# Parse major.minor.patch
MAJOR=$(echo "$VERSION" | cut -d. -f1)
MINOR=$(echo "$VERSION" | cut -d. -f2)
PATCH=$(echo "$VERSION" | cut -d. -f3)

# Check if version is in affected range for 9.x
VULNERABLE=0
if [ "$MAJOR" -eq 9 ] && [ "$MINOR" -eq 0 ]; then
  if [ "$PATCH" -lt 109 ]; then
    VULNERABLE=1
  fi
elif [ "$MAJOR" -eq 10 ] && [ "$MINOR" -eq 1 ]; then
  if [ "$PATCH" -lt 45 ]; then
    VULNERABLE=1
  fi
elif [ "$MAJOR" -eq 11 ] && [ "$MINOR" -eq 0 ]; then
  if [ "$PATCH" -lt 11 ]; then
    VULNERABLE=1
  fi
fi

# Check for RewriteValve (amplifying factor)
RW_FOUND=0
for f in "$CATALINA_HOME"/conf/server.xml "$CATALINA_HOME"/conf/context.xml $(find "$CATALINA_HOME/conf" -name '*.xml' 2>/dev/null); do
  if [ -f "$f" ] && grep -qi 'RewriteValve' "$f" 2>/dev/null; then
    RW_FOUND=1
    echo "WARNING: RewriteValve found in $f"
    break
  fi
done

# Check for PUT enabled (RCE amplifier)
PUT_ENABLED=0
for f in $(find "$CATALINA_HOME" -name 'web.xml' 2>/dev/null); do
  if grep -qi 'readonly.*false' "$f" 2>/dev/null; then
    PUT_ENABLED=1
    echo "WARNING: PUT enabled (readonly=false) in $f"
    break
  fi
done

if [ "$VULNERABLE" -eq 1 ]; then
  echo "VULNERABLE — Tomcat $VERSION is affected by CVE-2025-55752"
  [ "$RW_FOUND" -eq 1 ] && echo "  -> RewriteValve active: path traversal is exploitable"
  [ "$PUT_ENABLED" -eq 1 ] && echo "  -> PUT enabled: RCE path is open"
  [ "$RW_FOUND" -eq 0 ] && echo "  -> RewriteValve not found: exploitation requires it (lower risk)"
  exit 1
else
  echo "PATCHED — Tomcat $VERSION is not affected by CVE-2025-55752"
  exit 0
fi
07 · Bottom Line

If you remember one thing.

TL;DR
This is a MEDIUM after reassessment — not the emergency the CVSS 7.5 label suggests for most Tomcat fleets. Start by running the verification script across your estate to identify which instances actually use RewriteValve and have PUT enabled; those rare hosts are your real exposure and should be patched or have PUT disabled within the week. For the general Tomcat 9.x population, no noisgate mitigation SLA applies at MEDIUM — go straight to the 365-day noisgate remediation SLA and fold the upgrade to 9.0.109+ into your next scheduled maintenance cycle. If your scan finds any instance with *both* RewriteValve and readonly=false, treat that specific host as HIGH: apply the compensating controls (disable PUT, move rewrite rules to your reverse proxy) within 30 days and patch within 180 days per the noisgate remediation SLA for HIGH. Do not let CVE-2025-55754's inflated 9.6 CVSS score distract you — it requires a Windows admin to paste from a poisoned clipboard while watching raw console logs, which is not a realistic attack in any modern SOC.

Sources

  1. Tenable Plugin 271691
  2. Apache Tomcat 9.x Security Advisories
  3. NVD — CVE-2025-55752
  4. CyCognito Emerging Threat Analysis
  5. SOC Prime — CVE-2025-55752 and CVE-2025-55754
  6. TAM-K592 PoC Exploit
  7. HeroDevs — RewriteValve Path Traversal Analysis
  8. Red Hat CVE Page
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.