← Back to Feed CACHED · 2026-09-17 02:44:18 · CACHE_KEY tenable:192042
tenable:192042 · CWE-20 · Disclosed 2024-03-13

Apache Tomcat 9.0.0.M1 < 9.0.86 multiple vulnerabilities

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

Like someone hogging all the checkout lanes at a grocery store but never actually stealing anything

This Tenable plugin bundles two denial-of-service vulnerabilities in Apache Tomcat 9.0.0-M1 through 9.0.85, both fixed in 9.0.86. CVE-2024-24549 (CVSS 7.5) allows an unauthenticated attacker to send HTTP/2 requests with oversized headers; Tomcat fails to reset the stream until *after* processing all headers, consuming excessive CPU and memory. CVE-2024-23672 (CVSS ~6.3) lets a WebSocket client hold connections open indefinitely, exhausting server resources. Both were discovered by or reported to the Tomcat Security Team in January 2024 and publicly disclosed on March 13, 2024. Affected branches include Tomcat 8.x (<8.5.99), 9.x (<9.0.86), 10.x (<10.1.19), and 11.x (<11.0.0-M17).

The vendor (Apache) rates both as Important, and the highest NVD CVSS base score is 7.5 — placing it at the top of the MEDIUM / bottom of HIGH range. Tenable's own VPR score of 3.0 (Low) already signals that the real-world risk is lower than the CVSS face value. That's the right instinct: these are availability-only impacts with zero confidentiality or integrity consequences. An attacker can make your Tomcat instance sluggish or unresponsive, but they cannot execute code, read data, or pivot deeper into your network. For most enterprises, a Tomcat restart resolves the condition.

"Two DoS-only bugs in Tomcat — disruptive but not destructive. Patch in cycle, don't scramble."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Identify exposed Tomcat with HTTP/2 or WebSocket

The attacker scans for Tomcat instances that have HTTP/2 enabled on the connector (the h2 protocol in server.xml) or expose WebSocket endpoints. Shodan and FOFA can fingerprint Tomcat version banners, though many production deployments strip or obscure them. The attacker needs network-level access to the Tomcat HTTP port (typically 8080/8443).
Conditions required:
  • Target Tomcat is version 9.0.0-M1 through 9.0.85
  • HTTP/2 connector or WebSocket endpoint is reachable
Where this breaks in practice:
  • Many production Tomcats sit behind a reverse proxy (nginx, HAProxy, F5) that terminates HTTP/2 before it reaches Tomcat — the vulnerable code path is never hit
  • WebSocket endpoints require the application to have implemented them — not all Tomcat deployments use WebSockets
Detection/coverage: Nessus plugin 192042 detects the vulnerable version via banner or authenticated checks. Qualys QID and Rapid7 checks exist for both CVEs.
STEP 02

Send oversized HTTP/2 headers (CVE-2024-24549)

The attacker crafts HTTP/2 requests with header blocks exceeding maxHeaderCount or maxHeaderSize limits. Because Tomcat processes *all* headers before resetting the stream, each malicious request consumes CPU cycles and memory during parsing. Repeated requests amplify the effect. No authentication or valid session is required.
Conditions required:
  • HTTP/2 is enabled on the Tomcat connector directly (not terminated upstream)
  • Attacker can send multiple concurrent HTTP/2 streams
Where this breaks in practice:
  • Rate limiting or connection limits at load balancer / WAF layer will throttle inbound streams
  • Tomcat's maxConcurrentStreams setting (default 200) bounds parallelism per connection
  • Cloud WAFs (Cloudflare, AWS WAF) often normalize or reject oversized headers before they reach origin
Detection/coverage: Anomalous HTTP/2 HEADERS frame sizes in access logs or WAF telemetry. No specific IDS signature widely deployed, but generic HTTP/2 abuse rules exist in ModSecurity and cloud WAFs.
STEP 03

Hold WebSocket connections open (CVE-2024-23672)

Alternatively or additionally, the attacker opens many WebSocket connections and keeps them alive without completing the close handshake. Each connection holds a thread and memory allocation in Tomcat's thread pool. Once the pool is exhausted, legitimate requests queue and eventually time out. This is a classic slow-resource-exhaustion DoS pattern.
Conditions required:
  • Application exposes at least one WebSocket endpoint
  • No connection-count or idle-timeout enforcement upstream
Where this breaks in practice:
  • Many applications don't expose WebSocket endpoints at all
  • Reverse proxies typically enforce idle timeouts (e.g., nginx proxy_read_timeout) that close stale WebSocket connections
  • Thread pool exhaustion triggers Tomcat health-check failures, and orchestrators (K8s, ECS) will restart the pod automatically
Detection/coverage: Monitor Tomcat thread pool utilization (currentThreadsBusy JMX metric). Alert when active threads approach maxThreads. Connection tracking at the load balancer shows abnormal long-lived connections.
STEP 04

Temporary service degradation or outage

If the attack succeeds, the Tomcat instance becomes unresponsive to legitimate traffic. This is a temporary, recoverable condition. A restart of the Tomcat service clears all held resources. There is no data exfiltration, no code execution, and no persistence. The blast radius is limited to the single Tomcat instance (or set of instances behind the same load balancer if the attacker can target all of them).
Conditions required:
  • Attack traffic was not filtered by upstream controls
Where this breaks in practice:
  • Load-balanced deployments with health checks will route traffic to healthy instances
  • Auto-scaling groups will spin up replacement instances
  • On-call teams typically restore Tomcat within minutes
Detection/coverage: Standard availability monitoring (HTTP health probes, APM latency alerts) will detect the outage within seconds.
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNo known active exploitation. Neither CVE appears in CISA KEV or in tracked ransomware/APT campaigns. No incident reports reference these CVEs as an initial access or lateral movement vector.
Proof-of-conceptPoC scripts exist in public CVE aggregator repos (e.g., yrekx/cve, 0xMarcio/pocindex) for CVE-2024-24549. These are straightforward HTTP/2 header-flooding scripts in Python. No weaponized exploit frameworks (Metasploit, Nuclei templates with significant adoption) confirmed.
EPSSCVE-2024-24549: 0.2307 (97.64th percentile) — high probability of exploitation attempt, consistent with easy-to-trigger network DoS. CVE-2024-23672: 0.0231 (82.54th percentile) — moderate.
KEV statusNot listed in CISA KEV as of 2026-09-17.
CVSS vectorsCVE-2024-24549: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H = 7.5. Key: network-reachable, no auth, but impact is availability-only (C:N/I:N). CVE-2024-23672: CVSS v3 base ~6.3, also availability-only.
Affected versionsTomcat 9.0.0-M1 through 9.0.85. Also affects: 8.5.0–8.5.98, 10.1.0-M1–10.1.18, 11.0.0-M1–11.0.0-M16.
Fixed versions9.0.86, 8.5.99, 10.1.19, 11.0.0-M17. Distro backports: RHEL/CentOS packages tomcat-9.0.87+, Ubuntu tomcat9 via USN-6943-1, SUSE via SUSE-SU-2024:1205-1.
Scanning / exposureTenable VPR: 3.0 (Low). Apache Tomcat is the world's most deployed Java servlet container, but the majority of production instances sit behind reverse proxies that terminate HTTP/2, significantly reducing the reachable attack surface for CVE-2024-24549.
Disclosure dateReported to Apache January 2024. Public disclosure 2024-03-13.
CreditCVE-2024-24549 reported externally to the Tomcat Security Team (2024-01-24). CVE-2024-23672 identified internally by the Tomcat Security Team (2024-01-17).
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.5/10)

Both vulnerabilities are availability-only denial-of-service with zero confidentiality or integrity impact — the single most decisive downgrade factor. Even with CVE-2024-24549's unauthenticated network vector, the attack ceiling is a temporary, recoverable service disruption on a single Tomcat instance, with no path to code execution, data access, or lateral movement.

HIGH Vulnerability mechanics and impact ceiling (DoS only, well-documented by Apache)
HIGH No KEV listing or active exploitation campaigns
MEDIUM Real-world exposure estimate (reverse proxy prevalence is assumed, not measured)

Why this verdict

  • Impact ceiling is availability-only. Both CVEs have C:N/I:N in their CVSS vectors. No code execution, no data exfiltration, no credential theft. The worst outcome is a temporary outage on the targeted Tomcat instance, recoverable by restart.
  • Tenable's own VPR confirms low real-world risk. Tenable's Vulnerability Priority Rating is 3.0 (Low), despite the CVSS 7.5 base score. VPR factors in exploit maturity and threat context — both agree this is not an urgent risk.
  • Reverse proxy friction reduces reachable population. CVE-2024-24549 requires HTTP/2 to reach Tomcat directly. In most enterprise deployments, a reverse proxy (nginx, HAProxy, F5, cloud ALB) terminates HTTP/2 before it hits Tomcat, meaning the vulnerable code path is never exercised. This narrows the exposed population significantly.
  • No active exploitation or KEV listing. Neither CVE is in CISA KEV. No ransomware campaigns, APT groups, or incident reports reference these vulnerabilities. The high EPSS for CVE-2024-24549 (23%) reflects ease of triggering, not observed exploitation.
  • Role multiplier: Tomcat as application server. Tomcat's canonical role is a line-of-business application tier — not an identity provider, domain controller, hypervisor, or backup server. Even in high-value deployments (e.g., Tomcat hosting a payment gateway), DoS impact is bounded to service disruption, not data breach or fleet compromise. Load-balanced and auto-scaled deployments further limit blast radius. The DoS-only impact means no high-value-role floor applies — even on a critical Tomcat instance, the chain never reaches domain takeover, data exfiltration, or supply-chain pivot.

Why not higher?

A HIGH rating would require either active exploitation evidence, a path to code execution / data compromise, or a blast radius beyond a single service. None of these conditions are met. The attack is a recoverable DoS with no persistence, no lateral movement capability, and no confidentiality/integrity impact. The high EPSS score reflects exploit simplicity, not severity of outcome.

Why not lower?

A LOW or IGNORE rating would undercount the unauthenticated, network-reachable attack vector of CVE-2024-24549 and its high EPSS (97th percentile). While the impact is limited to availability, an unmitigated internet-facing Tomcat with HTTP/2 directly exposed could experience real service disruption. The breadth of affected versions (every 9.x milestone release) also argues against dismissing it entirely.

05 · Compensating Control

What to do — in priority order.

  1. Terminate HTTP/2 at the reverse proxy, not at Tomcat — Configure your load balancer or reverse proxy (nginx, HAProxy, F5, AWS ALB) to accept HTTP/2 from clients and proxy to Tomcat over HTTP/1.1. This eliminates CVE-2024-24549's attack surface entirely. Most enterprise deployments already do this. Verify within the noisgate 365-day remediation window.
  2. Enforce WebSocket idle timeouts upstream — Set proxy_read_timeout (nginx) or equivalent to 300s or less for WebSocket connections. This prevents CVE-2024-23672's slow-drain resource exhaustion. The reverse proxy will close idle connections before they can accumulate.
  3. Tune Tomcat connector limits — In server.xml, set maxHeaderCount="100", maxHeaderSize="8192", and maxConcurrentStreams="100" on the HTTP/2 connector. Also set maxConnections and connectionTimeout to bound total resource consumption. These don't fix the bug but reduce the amplification factor.
  4. Enable health-check-based auto-restart — If running in Kubernetes, ECS, or behind a load balancer, ensure HTTP health probes will detect unresponsive Tomcat instances and trigger automatic restart/replacement. This limits DoS impact to seconds rather than minutes.
What doesn't work
  • WAF rules targeting specific payloads — these are protocol-level abuses (oversized HTTP/2 headers, long-lived WebSocket), not application-layer exploits with a signature. Generic WAF rules won't reliably distinguish attack traffic from legitimate large-header requests.
  • IP-based rate limiting alone — a distributed botnet can source the DoS from thousands of IPs, bypassing per-IP rate limits. Connection-count limits are more effective than request-rate limits for these vulns.
  • Disabling HTTP/2 at the Tomcat level without updating — while this mitigates CVE-2024-24549, it doesn't address CVE-2024-23672 (WebSocket), and you lose HTTP/2 performance benefits. Patching is the complete fix.
06 · Verification

Crowdsourced verification payload.

Run this on each Tomcat host (or from a central auditor workstation with SSH access). Invoke with: bash check_tomcat_cve.sh /opt/tomcat (pass the Tomcat installation directory as the first argument). Requires read access to the Tomcat lib/ directory. No root required.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_tomcat_cve.sh — Verify Apache Tomcat against CVE-2024-24549 / CVE-2024-23672
# Usage: bash check_tomcat_cve.sh /path/to/tomcat
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN

set -euo pipefail

TOMCAT_HOME="${1:-}"

if [[ -z "$TOMCAT_HOME" ]]; then
  echo "Usage: $0 /path/to/tomcat"
  exit 2
fi

# Try catalina.jar for version info
CATALINA_JAR="$TOMCAT_HOME/lib/catalina.jar"
if [[ ! -f "$CATALINA_JAR" ]]; then
  # Try alternate locations
  CATALINA_JAR="$TOMCAT_HOME/server/lib/catalina.jar"
fi

if [[ ! -f "$CATALINA_JAR" ]]; then
  echo "UNKNOWN — Cannot find catalina.jar in $TOMCAT_HOME"
  exit 2
fi

# Extract version from MANIFEST.MF or ServerInfo.properties
VERSION=$(unzip -p "$CATALINA_JAR" 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 determine Tomcat version from $CATALINA_JAR"
  exit 2
fi

echo "Detected Tomcat version: $VERSION"

# Parse major.minor.patch
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"

# Check Tomcat 9.x branch: vulnerable if < 9.0.86
if [[ "$MAJOR" -eq 9 ]]; then
  if [[ "$MINOR" -eq 0 && "$PATCH" -lt 86 ]]; then
    echo "VULNERABLE — Tomcat $VERSION is affected by CVE-2024-24549 and CVE-2024-23672 (fixed in 9.0.86)"
    exit 1
  else
    echo "PATCHED — Tomcat $VERSION is >= 9.0.86"
    exit 0
  fi
# Check Tomcat 8.5.x branch: vulnerable if < 8.5.99
elif [[ "$MAJOR" -eq 8 && "$MINOR" -eq 5 ]]; then
  if [[ "$PATCH" -lt 99 ]]; then
    echo "VULNERABLE — Tomcat $VERSION is affected (fixed in 8.5.99)"
    exit 1
  else
    echo "PATCHED — Tomcat $VERSION is >= 8.5.99"
    exit 0
  fi
# Check Tomcat 10.1.x branch: vulnerable if < 10.1.19
elif [[ "$MAJOR" -eq 10 && "$MINOR" -eq 1 ]]; then
  if [[ "$PATCH" -lt 19 ]]; then
    echo "VULNERABLE — Tomcat $VERSION is affected (fixed in 10.1.19)"
    exit 1
  else
    echo "PATCHED — Tomcat $VERSION is >= 10.1.19"
    exit 0
  fi
# Check Tomcat 11.x: vulnerable if < 11.0.0-M17 (simplified: any 11.0.0 milestone)
elif [[ "$MAJOR" -eq 11 ]]; then
  echo "UNKNOWN — Tomcat 11.x detected ($VERSION). Manually verify >= 11.0.0-M17."
  exit 2
else
  echo "UNKNOWN — Unexpected Tomcat version: $VERSION"
  exit 2
fi
07 · Bottom Line

If you remember one thing.

TL;DR
Both CVEs in this Tenable plugin are denial-of-service only — no code execution, no data breach, no lateral movement. noisgate downgrades this from the vendor's HIGH to MEDIUM. There is no mitigation SLA at MEDIUM severity — go straight to the noisgate remediation SLA of 365 days and patch to Tomcat 9.0.86+ (or the equivalent fix in your branch: 8.5.99, 10.1.19, 11.0.0-M17) within your normal patch cycle. If you have internet-facing Tomcat instances with HTTP/2 terminating directly at Tomcat (not behind a reverse proxy), prioritize those first and confirm your reverse proxy is handling HTTP/2 termination — that single architecture check eliminates the primary attack vector immediately. For everything else, slot this into your next quarterly Tomcat upgrade window. Do not let this finding displace higher-priority RCE or auth-bypass patches from your sprint.

Sources

  1. Tenable Plugin 192042
  2. Apache Tomcat 9.x Security Advisories
  3. NVD — CVE-2024-24549
  4. NVD — CVE-2024-23672
  5. Aqua Security — CVE-2024-24549
  6. FIRST EPSS API
  7. CISA KEV Catalog
  8. Tomitribe — Tomcat 9.0.86 CVE Patching
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.