← Back to Feed CACHED · 2026-09-17 09:06:34 · CACHE_KEY tenable:241680
tenable:241680 · CWE-190 · Disclosed 2025-07-10

Apache Tomcat 9.0.0.M1 < 9.0.107 multiple vulnerabilities

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

Someone can rattle your front door hard enough to jam the lock, but they still can't get inside

Tenable plugin 241680 bundles three CVEs fixed in Apache Tomcat 9.0.107, all affecting versions 9.0.0.M1 through 9.0.106. CVE-2025-52520 is an integer overflow in the postSize accumulator during multipart file uploads — the int wraps negative, bypassing maxPostSize and letting an attacker exhaust disk or memory. CVE-2025-52434 is a race condition in the APR/Native connector during HTTP/2 connection teardown that can crash the JVM. CVE-2025-53506 exploits the gap before a client ACKs the server's SETTINGS frame to open unlimited HTTP/2 streams, exhausting threads and memory. All three are availability-only — zero impact on confidentiality or integrity.

The vendor CVSS of 7.5 HIGH is technically correct for a network-reachable, unauthenticated DoS with no user interaction. But it overstates real-world urgency. CVE-2025-52434 only fires if you run the APR/Native connector — most production Tomcat deployments use the default NIO connector and are immune. The other two require HTTP/2 to be enabled. None of these bugs chain to code execution, privilege escalation, or data exfiltration. Tenable's own VPR score of 3.0 (23rd percentile) already signals this is low-priority, and no active exploitation or public PoC exists. A MEDIUM reassessment better reflects the operational reality.

"Three DoS-only bugs in Tomcat 9 — no RCE, no data leak, low real-world risk"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Identify internet-facing Tomcat instance

The attacker scans for Apache Tomcat servers exposed to the internet using Shodan, Censys, or custom banner-grabbing scripts. Tomcat's default error pages and Server headers leak version information, making fingerprinting trivial. Of ~378K internet-facing Tomcat instances, a fraction will be running 9.0.x < 9.0.107.
Conditions required:
  • Target Tomcat instance is network-reachable on HTTP/HTTPS port
Where this breaks in practice:
  • Many enterprise Tomcat instances sit behind reverse proxies (nginx, Apache httpd, F5) that strip version headers
  • WAFs and CDNs may front the service, absorbing malformed requests
Detection/coverage: Shodan query product:Apache Tomcat version:9.0 identifies exposed instances. Nessus plugin 241680 detects the vulnerable version range.
STEP 02

Select attack vector based on connector type

The attacker determines whether the target uses APR/Native (needed for CVE-2025-52434) or has HTTP/2 enabled (needed for CVE-2025-52434 and CVE-2025-53506). For CVE-2025-52520, only multipart upload endpoints are needed. The attacker probes for HTTP/2 support via ALPN negotiation and checks for multipart-accepting endpoints.
Conditions required:
  • HTTP/2 enabled on the target (for CVE-2025-52434 and CVE-2025-53506)
  • APR/Native connector in use (for CVE-2025-52434 specifically)
  • At least one endpoint accepts multipart uploads (for CVE-2025-52520)
Where this breaks in practice:
  • APR/Native connector is not the default — most Tomcat installations use NIO or NIO2
  • HTTP/2 requires explicit configuration in Tomcat 9.x; many deployments remain HTTP/1.1-only
  • Multipart upload endpoints may require authentication, reducing the attack surface for CVE-2025-52520
STEP 03

Send crafted requests to trigger DoS

For CVE-2025-52520: the attacker sends a multipart request with parts totaling > 2^31 bytes to overflow the int postSize accumulator, bypassing maxPostSize and filling disk/memory. For CVE-2025-53506: the attacker opens an HTTP/2 connection, ignores the server's SETTINGS frame, and opens thousands of concurrent streams. For CVE-2025-52434: the attacker opens and rapidly closes HTTP/2 connections to trigger the race condition in the APR/Native socket cleanup code.
Conditions required:
  • Network connectivity to the Tomcat port
  • No rate limiting or connection throttling in front of Tomcat
Where this breaks in practice:
  • Load balancers and reverse proxies typically enforce connection limits and rate limiting
  • Cloud WAFs (Cloudflare, AWS WAF, Akamai) detect and block HTTP/2 abuse patterns
  • The integer overflow in CVE-2025-52520 requires sending >2GB of data — easily detected and blocked by upstream infrastructure
Detection/coverage: HTTP/2 rapid-reset and stream-flood patterns are detectable by most modern WAFs and IDS. Unusual multipart upload sizes trigger alerts in application-layer monitoring.
STEP 04

Service degradation or crash

If successful, the Tomcat instance experiences memory exhaustion (CVE-2025-52520, CVE-2025-53506) or a JVM crash (CVE-2025-52434). The impact is a temporary denial of service. The service restarts automatically if managed by systemd, Docker, or a process manager. No persistent compromise occurs — no files are written, no credentials are stolen, no backdoor is planted.
Conditions required:
  • Attack traffic reaches Tomcat without being filtered
Where this breaks in practice:
  • Production Tomcat is typically behind HA clusters — one node crash triggers failover
  • Auto-restart via systemd/container orchestration limits downtime to seconds
  • No persistence — attacker must maintain continuous traffic to sustain the DoS
Detection/coverage: JVM crash logs, OOM errors, and HTTP 503 spikes are visible in APM tools (Datadog, New Relic, Dynatrace) and standard monitoring.
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone observed. Not listed in CISA KEV. No known campaigns targeting these CVEs as of September 2026.
Proof-of-conceptNo public PoC available. No exploit code found on GitHub, Exploit-DB, or security researcher blogs for any of the three CVEs.
EPSS scoreNot yet scored or very low. Tenable VPR is 3.0 (23.86th percentile), indicating minimal predicted exploitation probability.
CISA KEV statusNot listed. None of these three CVEs appear in the Known Exploited Vulnerabilities catalog.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H — Network-reachable, no auth, availability-only impact. The C:N/I:N is the key differentiator from truly critical Tomcat bugs like CVE-2025-24813 (RCE).
Affected versionsApache Tomcat 9.0.0.M1 through 9.0.106 (also 10.1.0-M1 through 10.1.42, 11.0.0-M1 through 11.0.8, and EOL 8.5.0 through 8.5.100)
Fixed versions9.0.107 (Tomcat 9), 10.1.43 (Tomcat 10.1), 11.0.9 (Tomcat 11). Distro backports: check RHEL, Ubuntu, Amazon Linux advisories for backported fixes.
Scanning / exposure dataShodan reports ~378K internet-facing Tomcat instances globally. Actual vulnerable subset (9.0.x < 9.0.107 with HTTP/2 or APR/Native enabled) is a small fraction.
Disclosure date2025-07-10 — all three CVEs disclosed simultaneously with the 9.0.107 release.
ReporterReported to the Apache Tomcat security team on 2025-06-06. Specific researcher names not publicly attributed.
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to MEDIUM (5.5/10)

These are three availability-only denial-of-service bugs with no path to code execution, data access, or privilege escalation — the single most decisive downgrade factor is the DoS-only impact ceiling (C:N/I:N in CVSS), which caps the blast radius at temporary service disruption regardless of deployment role. No public PoC, no active exploitation, and two of the three CVEs require non-default configurations (APR/Native connector, HTTP/2) that narrow the reachable population further.

HIGH Vulnerability impact assessment (DoS-only, no RCE)
HIGH Affected version range and fix availability
MEDIUM Exploitation probability (no PoC found, but DoS bugs are simple to craft)

Why this verdict

  • DoS-only impact ceiling: All three CVEs have C:N/I:N/A:H — the worst outcome is a service restart, not data breach or persistent compromise. This fundamentally caps severity regardless of deployment role.
  • Non-default configuration requirements: CVE-2025-52434 requires the APR/Native connector (most deployments use NIO). CVE-2025-53506 and CVE-2025-52434 require HTTP/2, which is not enabled by default in Tomcat 9.x. This narrows the actually-vulnerable population to an estimated <20% of installations.
  • No exploitation evidence: Zero public PoCs, no KEV listing, no threat intel reports, and Tenable's own VPR of 3.0 places these in the bottom quartile of risk. The 34-day disclosure-to-fix window closed cleanly.
  • Role multiplier: Tomcat serves as an application server across roles from dev sandboxes (low-value) to production API tiers and identity-adjacent services (high-value). Even in the worst case — a production Tomcat fronting a critical application — the chain terminates at temporary unavailability, not domain takeover or data exfiltration. HA clusters and auto-restart mechanisms further reduce blast radius to seconds of downtime. The DoS-only impact means the high-value-role floor does not elevate to HIGH because the chain outcome is availability loss, not fleet compromise or identity compromise.
  • Infrastructure friction: Production Tomcat deployments commonly sit behind reverse proxies, load balancers, or CDN/WAFs that absorb or block the attack patterns (HTTP/2 stream floods, >2GB multipart uploads) before they reach the vulnerable code.

Why not higher?

These CVEs do not enable remote code execution, privilege escalation, or data exfiltration. The blast radius is capped at temporary service unavailability — even on a critical production Tomcat instance, the attacker gains no foothold, no credentials, and no lateral movement capability. Two of three CVEs require non-default configurations, and no exploitation has been observed.

Why not lower?

Despite the friction, all three CVEs are unauthenticated and network-reachable with no user interaction — a motivated attacker can reach them without any prior access. Tomcat is enormously widespread (~378K internet-facing instances), and availability disruption of production services has real business cost. A LOW or IGNORE rating would understate the ease of triggering the condition for the subset of deployments that do run HTTP/2 or APR/Native.

05 · Compensating Control

What to do — in priority order.

  1. Deploy a reverse proxy or WAF in front of Tomcat — A reverse proxy (nginx, Apache httpd, HAProxy) or WAF with HTTP/2 stream limits and request-size enforcement blocks all three attack vectors before traffic reaches Tomcat. Most production deployments already have this. No mitigation SLA for MEDIUM — go straight to the 365-day remediation window.
  2. Disable HTTP/2 if not required — Remove the h2 protocol from the <UpgradeProtocol> configuration in server.xml to eliminate the attack surface for CVE-2025-52434 and CVE-2025-53506. This is a zero-cost change if your application doesn't depend on HTTP/2 features.
  3. Switch from APR/Native to NIO connector — If you're running the APR/Native connector, switch to NIO or NIO2 in server.xml to eliminate CVE-2025-52434 entirely. NIO is the default and recommended connector for most workloads.
  4. Enforce maxPostSize explicitly — Set maxPostSize in your Connector configuration and validate it with application-layer checks. While CVE-2025-52520 bypasses the Tomcat-level check via integer overflow, upstream request-size limits in your reverse proxy will catch the >2GB payload.
  5. Enable connection rate limiting — Configure connection rate limiting at the load balancer or reverse proxy layer to throttle rapid connection open/close patterns that trigger CVE-2025-52434's race condition.
What doesn't work
  • Java Security Manager — deprecated in Java 17+ and does not protect against DoS via resource exhaustion; it controls code permissions, not connection/memory limits.
  • Network-layer firewall ACLs — these CVEs use legitimate HTTP/HTTPS ports and protocols; port-based filtering won't help unless you restrict source IPs (impractical for public-facing services).
  • Tomcat's built-in maxConnections setting — while it limits total connections, CVE-2025-53506 exploits the window *before* settings are acknowledged, so the stream limit isn't enforced yet; this setting alone is insufficient.
06 · Verification

Crowdsourced verification payload.

Run this script on each Tomcat host (or remotely if you can reach the Tomcat manager/version endpoint). It checks the installed Tomcat version from catalina.sh version or the RELEASE-NOTES file. Requires read access to the Tomcat installation directory. Example: bash check_tomcat_241680.sh /opt/tomcat

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# check_tomcat_241680.sh — Tenable 241680 / CVE-2025-52520, CVE-2025-52434, CVE-2025-53506
# Usage: bash check_tomcat_241680.sh /path/to/tomcat
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -euo pipefail

CATALINA_HOME="${1:-/opt/tomcat}"
FIXED_MAJOR=9
FIXED_MINOR=0
FIXED_PATCH=107

# Try catalina.sh version first, fall back to RELEASE-NOTES
if [[ -x "${CATALINA_HOME}/bin/catalina.sh" ]]; then
  VERSION_LINE=$("${CATALINA_HOME}/bin/catalina.sh" version 2>/dev/null | grep 'Server number:' || true)
  VERSION=$(echo "$VERSION_LINE" | grep -oP '[0-9]+\.[0-9]+\.[0-9]+' || true)
fi

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" 2>/dev/null || true)
fi

if [[ -z "${VERSION:-}" ]]; then
  # Try lib/catalina.jar manifest
  if [[ -f "${CATALINA_HOME}/lib/catalina.jar" ]]; then
    VERSION=$(unzip -p "${CATALINA_HOME}/lib/catalina.jar" META-INF/MANIFEST.MF 2>/dev/null | grep -oP 'Implementation-Version: \K[0-9]+\.[0-9]+\.[0-9]+' || true)
  fi
fi

if [[ -z "${VERSION:-}" ]]; then
  echo "UNKNOWN — could not determine Tomcat version at ${CATALINA_HOME}"
  exit 2
fi

IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"

echo "Detected Tomcat version: ${VERSION}"

# Only applies to Tomcat 9.x
if [[ "$MAJOR" -ne 9 ]]; then
  echo "UNKNOWN — Tomcat ${VERSION} is not in the 9.x branch (plugin 241680 covers 9.0.x only)"
  exit 2
fi

if [[ "$MINOR" -gt "$FIXED_MINOR" ]] || { [[ "$MINOR" -eq "$FIXED_MINOR" ]] && [[ "$PATCH" -ge "$FIXED_PATCH" ]]; }; then
  echo "PATCHED — Tomcat ${VERSION} >= 9.0.107"
  exit 0
else
  echo "VULNERABLE — Tomcat ${VERSION} < 9.0.107 (CVE-2025-52520, CVE-2025-52434, CVE-2025-53506)"
  # Check for additional risk factors
  SERVER_XML="${CATALINA_HOME}/conf/server.xml"
  if [[ -f "$SERVER_XML" ]]; then
    if grep -qi 'Apr' "$SERVER_XML" 2>/dev/null; then
      echo "  WARNING: APR/Native connector detected — CVE-2025-52434 applies"
    fi
    if grep -qi 'h2' "$SERVER_XML" 2>/dev/null; then
      echo "  WARNING: HTTP/2 (h2) protocol detected — CVE-2025-52434 and CVE-2025-53506 apply"
    fi
  fi
  exit 1
fi
07 · Bottom Line

If you remember one thing.

TL;DR
These three DoS-only CVEs pose limited real-world risk — no code execution, no data access, and two of three require non-default Tomcat configurations. At a MEDIUM reassessed severity, there is no noisgate mitigation SLA — go straight to the 365-day noisgate remediation SLA and patch to Tomcat 9.0.107 during your next scheduled maintenance window. If you run APR/Native or HTTP/2 on internet-facing Tomcat instances, prioritize those hosts first and consider switching to the NIO connector or disabling h2 as a low-effort compensating control. If your Tomcat fleet is entirely behind reverse proxies with request-size limits and HTTP/2 stream throttling, these CVEs are effectively neutralized and can be treated as routine backlog patching. Do not let this plugin bump higher-priority items (like any open RCE or auth-bypass findings) down your queue.

Sources

  1. Tenable Plugin 241680
  2. Apache Tomcat 9 Security Advisories
  3. CVE-2025-52520 — oss-security Advisory
  4. CVE-2025-52434 — GitHub Advisory GHSA-4j3c-42xv-3f84
  5. CVE-2025-53506 — GitHub Advisory GHSA-25xr-qj8w-c4vf
  6. Rapid7 — CVE-2025-52520
  7. Shodan Tomcat CVE Dashboard
  8. F5 Advisory K000152908
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.