CVE-2024-8184
Medium · 5.9Eclipse Jetty's ThreadLimitHandler.getRemote() vulnerable to remote DoS attacks
CVSS
5.9
EPSS
1.0%
Published
Oct 14, 2024
CISA due date
—
Cloudanix analysis
Attackers can overload affected Jetty-based web services with repeated malicious requests until the service runs out of memory and becomes unavailable.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
This vulnerability affects Eclipse Jetty's ThreadLimitHandler.getRemote() logic. An unauthenticated remote client can send repeated crafted HTTP requests that cause Jetty to retain or allocate excessive memory while resolving or tracking remote request information for thread limiting. Sustained exploitation can trigger Java OutOfMemoryError conditions, destabilize the JVM, and make the Jetty-based service stop processing legitimate requests. The impact is availability loss rather than code execution or data disclosure.
Why it matters to the business
Successful exploitation can make Jetty-hosted applications unavailable, causing service outages, failed transactions, degraded customer experience, and operational incident response costs. The CVSS score is moderate and EPSS is currently low, with no CISA KEV listing or known ransomware association, but internet-facing Jetty services remain exposed to low-cost denial-of-service attempts because exploitation does not require authentication. Because Jetty is commonly embedded inside Java products and custom applications, exposure may exist indirectly through packaged software, not only where Jetty is explicitly deployed.
How an attack unfolds
An attacker first identifies an HTTP or HTTPS service backed by a vulnerable Jetty version or by software embedding vulnerable Jetty components. The attacker then repeatedly sends crafted requests designed to exercise the vulnerable ThreadLimitHandler.getRemote() path. Each request contributes to abnormal memory consumption or retention inside the Jetty process. As the request volume continues, heap usage rises, garbage collection becomes increasingly frequent and ineffective, request latency increases, and the JVM may eventually throw OutOfMemoryError. Once memory is exhausted, the service may reject new connections, return 5xx errors, restart repeatedly under a supervisor, or crash until the process is manually recovered or traffic is blocked.
How to fix it
Upgrade Eclipse Jetty to a fixed build that includes commit efe8023327e67287f9bfd006700e6a71d45b5dd6, or to the vendor-released Jetty version containing that fix for the affected release line. For applications that embed Jetty, update the Jetty dependency through the build system and redeploy the application; for third-party products that bundle Jetty, apply the vendor's patched product release. If immediate upgrade is not possible, reduce exposure by restricting access to Jetty services, placing services behind a reverse proxy or WAF with request-rate limits, enforcing per-client connection and request limits, tuning JVM heap and restart behavior to reduce outage duration, and monitoring for abnormal heap growth. Mitigations should be treated as temporary because they do not correct the vulnerable code path.
How to confirm the fix worked
Confirm the deployed Jetty artifact or embedded dependency includes the fixed code from commit efe8023327e67287f9bfd006700e6a71d45b5dd6 or a vendor release that documents this fix. Review dependency manifests such as Maven/Gradle lockfiles, SBOMs, container image package inventories, and application startup logs to identify Jetty versions. Validate that patched artifacts are present in the runtime image, not only in source control. After patching, perform controlled load testing with representative request patterns while monitoring JVM heap, garbage collection, Jetty request handling, and process stability. Exposure can also be checked by inventorying internet-facing HTTP services and correlating them with Jetty fingerprints or application dependency data.
Typical attack path
- Discover an exposed HTTP/HTTPS service running Eclipse Jetty or an application embedding Jetty.
- Confirm the target uses a vulnerable build or infer vulnerability from banners, behavior, dependency metadata, or product version information.
- Generate repeated crafted HTTP requests that reach Jetty's ThreadLimitHandler.getRemote() code path.
- Sustain or parallelize the request stream to increase heap pressure and garbage collection activity.
- Cause the Jetty JVM to throw OutOfMemoryError or become unresponsive due to memory exhaustion.
- Maintain pressure to keep the service unavailable or repeatedly crash it after automatic restart.
How to detect it
To determine whether exploitation already occurred, review application logs, Jetty logs, JVM stderr/stdout, container logs, service manager logs, APM telemetry, reverse-proxy logs, and load balancer metrics for periods of rapid heap growth followed by OutOfMemoryError, long garbage collection pauses, elevated 5xx responses, connection resets, or process restarts. Correlate these events with spikes in repeated HTTP requests from one or more source IPs, unusual request rates, repeated requests to the same endpoints, or requests with abnormal remote-address-related headers if the deployment trusts proxy headers. Look for restart loops in systemd, Kubernetes, Docker, or process supervisors around the same time as memory exhaustion. Because this vulnerability is a denial-of-service condition, evidence is more likely to appear as resource-exhaustion telemetry and request floods than as persistent files, new processes, privilege changes, or malware artifacts.
- java.lang.OutOfMemoryError
- OutOfMemoryError: Java heap space
- OutOfMemoryError
- GC overhead limit exceeded
- org.eclipse.jetty.server.handler.ThreadLimitHandler
- ThreadLimitHandler.getRemote
- Killed process java
- OOMKilled
- ExitCode 137
- CrashLoopBackOff
- HTTP 503
- HTTP 502
- HTTP 504
- java.lang.OutOfMemoryError: Java heap space
What your security team should do
- Prioritize patching internet-facing Jetty services and products that embed Jetty, especially where unauthenticated users can send arbitrary HTTP requests.
- Update Jetty dependencies to a release containing commit efe8023327e67287f9bfd006700e6a71d45b5dd6 and rebuild/redeploy affected Java applications and containers.
- Ask third-party vendors whether their products embed vulnerable Jetty versions and obtain patched releases where applicable.
- Apply temporary rate limiting, connection limiting, and reverse-proxy filtering for exposed services until all affected Jetty runtimes are patched.
- Enable JVM and Jetty health monitoring for heap usage, garbage collection pressure, request rates, 5xx responses, and process restarts.
- Search historical logs and monitoring data for unexplained OutOfMemoryError events, heap exhaustion, restart loops, and request floods against Jetty-backed services.
- Keep the vulnerability on a standard remediation timeline rather than emergency KEV handling unless local exposure is high or active exploitation is observed.
The record
There exists a security vulnerability in Jetty's `ThreadLimitHandler.getRemote()` which can be exploited by unauthorized users to cause remote denial-of-service (DoS) attack. By repeatedly sending crafted requests, attackers can trigger OutofMemory errors and exhaust the server's memory.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Maven | org.eclipse.jetty:jetty-server | 10.0.0 | 10.0.24 |
| Maven | org.eclipse.jetty:jetty-server | 11.0.0 | 11.0.24 |
| Maven | org.eclipse.jetty:jetty-server | 12.0.0 | 12.0.9 |
| Maven | org.eclipse.jetty:jetty-server | 9.3.12 | 9.4.56 |
| Chainguard | apache-hop | 0 | 2.16.0-r0 |
| Chainguard | apache-hop-fips | 0 | 2.16.0-r0 |
| Chainguard | apache-nifi | 0 | 2.3.0-r0 |
| Chainguard | apache-nifi-compat | 0 | 2.3.0-r0 |
| Chainguard | apache-nifi-toolkit | 0 | 2.3.0-r0 |
| Chainguard | apache-tika-2.9 | 0 | 2.9.2-r1 |
| Chainguard | apache-tika-2.9-compat | 0 | 2.9.2-r1 |
| Chainguard | cassandra-reaper | 0 | 4.0.1-r1 |
| Chainguard | cassandra-reaper-jre-bcfips | 0 | 3.7.1-r1 |
| Chainguard | cloudwatch-exporter | 0 | 0.16.0-r1 |
| Chainguard | confluent-kafka | 0 | 8.0.0.29-r0 |
| Chainguard | confluent-kafka-jre-bcfips | 0 | 8.0.0.41-r0 |
| Chainguard | druid | 0 | 31.0.0-r1 |
| Chainguard | druid-compat | 0 | 31.0.0-r1 |
| Chainguard | jenkins-2.452 | 0 | 2.452.4-r4 |
| Chainguard | jenkins-2.462 | 0 | 2.462.3-r0 |
| Chainguard | kafka-3.7 | 0 | 3.7.1-r2 |
| Chainguard | kafka-3.8 | 0 | 3.8.1-r46 |
| Chainguard | kafka-bitnami-compat-3.7 | 0 | 3.7.1-r2 |
| Chainguard | kafka-jre-bcfips | 0 | 3.8.0-r3 |
| Chainguard | kafka-strimzi-compat | 0 | 0.45.0-r1 |
| Chainguard | kafka_exporter-strimzi-compat | 0 | 0.45.0-r1 |
| Chainguard | neo4j | 0 | 5.25.1-r0 |
| Chainguard | neo4j-oci-entrypoint | 0 | 5.25.1-r0 |
| Chainguard | prometheus-jmx-exporter-strimzi-compat | 0 | 0.45.0-r1 |
| Chainguard | solr | 0 | 9.7.0-r1 |
| Chainguard | solr-oci-compat | 0 | 9.7.0-r1 |
| Chainguard | spark-3.4 | 0 | 3.4.4-r0 |
| Chainguard | spark-3.4-bitnami-compat | 0 | 3.4.4-r0 |
| Chainguard | spark-3.4-compat | 0 | 3.4.4-r0 |
| Chainguard | spark-3.4-minimal | 0 | 3.4.4-r0 |
| Chainguard | spark-3.4-minimal-openjdk-11 | 0 | 3.4.4-r0 |
| Chainguard | spark-3.4-minimal-openjdk-17 | 0 | 3.4.4-r0 |
| Chainguard | spark-3.4-minimal-openjdk-8 | 0 | 3.4.4-r0 |
| Chainguard | spark-3.4-openjdk-11 | 0 | 3.4.4-r0 |
| Chainguard | spark-3.4-openjdk-17 | 0 | 3.4.4-r0 |
| Chainguard | spark-3.4-openjdk-8 | 0 | 3.4.4-r0 |
| Chainguard | spark-3.5 | 0 | 3.5.3-r4 |
| Chainguard | spark-3.5 | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-bitnami-compat | 0 | 3.5.3-r4 |
| Chainguard | spark-3.5-compat | 0 | 3.5.3-r4 |
| Chainguard | spark-3.5-minimal-openjdk-11 | 0 | 3.5.3-r4 |
| Chainguard | spark-3.5-minimal-openjdk-17 | 0 | 3.5.3-r4 |
| Chainguard | spark-3.5-minimal-openjdk-8 | 0 | 3.5.3-r4 |
| Chainguard | spark-3.5-openjdk-11 | 0 | 3.5.3-r4 |
| Chainguard | spark-3.5-openjdk-17 | 0 | 3.5.3-r4 |
| Chainguard | spark-3.5-openjdk-8 | 0 | 3.5.3-r4 |
| Chainguard | spark-3.5-scala-2.12 | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.12-compat | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.12-iamguarded-compat | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.13 | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.13-compat | 0 | 3.5.7-r2 |
| Chainguard | strimzi-kafka-operator | 0 | 0.45.0-r1 |
| Chainguard | strimzi-kafka-operator-cluster-operator | 0 | 0.45.0-r1 |
| Chainguard | strimzi-kafka-operator-kafka-agent | 0 | 0.45.0-r1 |
| Chainguard | strimzi-kafka-operator-kafka-agent-3 | 0 | 0.45.0-r1 |
| Chainguard | strimzi-kafka-operator-kafka-base | 0 | 0.45.0-r1 |
| Chainguard | strimzi-kafka-operator-kafka-init | 0 | 0.45.0-r1 |
| Chainguard | strimzi-kafka-operator-kafka-thirdparty-libs | 0 | 0.45.0-r1 |
| Chainguard | strimzi-kafka-operator-kafka-thirdparty-libs-cc | 0 | 0.45.0-r1 |
| Chainguard | strimzi-kafka-operator-mirror-maker-agent | 0 | 0.45.0-r1 |
| Chainguard | strimzi-kafka-operator-topic-operator | 0 | 0.45.0-r1 |
| Chainguard | strimzi-kafka-operator-tracing-agent | 0 | 0.45.0-r1 |
| Chainguard | strimzi-kafka-operator-user-operator | 0 | 0.45.0-r1 |
| Chainguard | webswing | 0 | 24.2.2-r1 |
| Chainguard | zookeeper-3.8 | 0 | 3.8.4.0-r6 |
| Chainguard | zookeeper-3.8-compat | 0 | 3.8.4-r0 |
| Chainguard | zookeeper-3.8-iamguarded-compat | 0 | 3.8.4.0-r6 |
| Chainguard | zookeeper-3.9 | 0 | 3.9.3.2-r0 |
| Chainguard | zookeeper-3.9 | 0 | 3.9.3-r0 |
| Chainguard | zookeeper-3.9-iamguarded-compat | 0 | 3.9.3-r0 |
| Chainguard | zookeeper-bitnami-3.8-compat | 0 | 3.8.4.0-r6 |
| Chainguard | zookeeper-bitnami-3.9-compat | 0 | 3.9.3.2-r0 |
| Chainguard | zookeeper-bitnami-3.9-compat | 0 | 3.9.3-r0 |
| Chainguard | zookeeper-fips-3.9 | 0 | 3.9.3.1-r1 |
| Chainguard | zookeeper-fips-3.9-policy-140-2 | 0 | 3.9.3.1-r1 |
| Chainguard | zookeeper-fips-3.9-policy-140-3 | 0 | 3.9.3.1-r1 |
| Debian:11 | jetty9 | 0 | No fix |
| Debian:11 | jetty9 | 0 | 9.4.57-0+deb11u1 |
| Debian:12 | jetty9 | 0 | No fix |
| Debian:12 | jetty9 | 0 | 9.4.57-0+deb12u1 |
| Debian:13 | jetty9 | 0 | 9.4.56-1 |
| SUSE:Linux Enterprise Module for Development Tools 15 SP5 | jetty-minimal | 0 | 9.4.56-150200.3.28.1 |
| SUSE:Linux Enterprise Module for Development Tools 15 SP6 | jetty-minimal | 0 | 9.4.56-150200.3.28.1 |
| SUSE:Linux Enterprise Module for Package Hub 15 SP6 | jetty-minimal | 0 | 9.4.56-150200.3.28.1 |
| Ubuntu:14.04:LTS | jetty | 0 | No fix |
| Ubuntu:16.04:LTS | jetty | 0 | No fix |
| Ubuntu:Pro:14.04:LTS | jetty | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | jetty | 0 | No fix |
| Wolfi | apache-nifi | 0 | 2.3.0-r0 |
| Wolfi | apache-nifi-compat | 0 | 2.3.0-r0 |
| Wolfi | apache-nifi-toolkit | 0 | 2.3.0-r0 |
| Wolfi | cassandra-reaper | 0 | 4.0.1-r1 |
| Wolfi | cloudwatch-exporter | 0 | 0.16.0-r1 |
| Wolfi | confluent-kafka | 0 | 8.0.0.29-r0 |
| Wolfi | druid | 0 | 31.0.0-r1 |
| Wolfi | druid-compat | 0 | 31.0.0-r1 |
| Wolfi | kafka-3.8 | 0 | 3.8.1-r46 |
| Wolfi | kafka-strimzi-compat | 0 | 0.45.0-r1 |
| Wolfi | kafka_exporter-strimzi-compat | 0 | 0.45.0-r1 |
| Wolfi | neo4j | 0 | 5.25.1-r0 |
| Wolfi | neo4j-oci-entrypoint | 0 | 5.25.1-r0 |
| Wolfi | prometheus-jmx-exporter-strimzi-compat | 0 | 0.45.0-r1 |
| Wolfi | solr | 0 | 9.7.0-r1 |
| Wolfi | solr-oci-compat | 0 | 9.7.0-r1 |
| Wolfi | spark-3.5 | 0 | 3.5.3-r4 |
| Wolfi | spark-3.5 | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-bitnami-compat | 0 | 3.5.3-r4 |
| Wolfi | spark-3.5-compat | 0 | 3.5.3-r4 |
| Wolfi | spark-3.5-minimal-openjdk-11 | 0 | 3.5.3-r4 |
| Wolfi | spark-3.5-minimal-openjdk-17 | 0 | 3.5.3-r4 |
| Wolfi | spark-3.5-minimal-openjdk-8 | 0 | 3.5.3-r4 |
| Wolfi | spark-3.5-openjdk-11 | 0 | 3.5.3-r4 |
| Wolfi | spark-3.5-openjdk-17 | 0 | 3.5.3-r4 |
| Wolfi | spark-3.5-openjdk-8 | 0 | 3.5.3-r4 |
| Wolfi | spark-3.5-scala-2.12 | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.12-compat | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.12-iamguarded-compat | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.13 | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.13-compat | 0 | 3.5.7-r2 |
| Wolfi | strimzi-kafka-operator | 0 | 0.45.0-r1 |
| Wolfi | strimzi-kafka-operator-cluster-operator | 0 | 0.45.0-r1 |
| Wolfi | strimzi-kafka-operator-kafka-agent | 0 | 0.45.0-r1 |
| Wolfi | strimzi-kafka-operator-kafka-agent-3 | 0 | 0.45.0-r1 |
| Wolfi | strimzi-kafka-operator-kafka-base | 0 | 0.45.0-r1 |
| Wolfi | strimzi-kafka-operator-kafka-init | 0 | 0.45.0-r1 |
| Wolfi | strimzi-kafka-operator-kafka-thirdparty-libs | 0 | 0.45.0-r1 |
| Wolfi | strimzi-kafka-operator-kafka-thirdparty-libs-cc | 0 | 0.45.0-r1 |
| Wolfi | strimzi-kafka-operator-mirror-maker-agent | 0 | 0.45.0-r1 |
| Wolfi | strimzi-kafka-operator-topic-operator | 0 | 0.45.0-r1 |
| Wolfi | strimzi-kafka-operator-tracing-agent | 0 | 0.45.0-r1 |
| Wolfi | strimzi-kafka-operator-user-operator | 0 | 0.45.0-r1 |
| Wolfi | zookeeper-3.8 | 0 | 3.8.4.0-r6 |
| Wolfi | zookeeper-3.9 | 0 | 3.9.3.2-r0 |
| Wolfi | zookeeper-3.9 | 0 | 3.9.3-r0 |
| Wolfi | zookeeper-3.9-iamguarded-compat | 0 | 3.9.3-r0 |
| Wolfi | zookeeper-bitnami-3.8-compat | 0 | 3.8.4.0-r6 |
| Wolfi | zookeeper-bitnami-3.9-compat | 0 | 3.9.3.2-r0 |
| Wolfi | zookeeper-bitnami-3.9-compat | 0 | 3.9.3-r0 |
| maven | org.eclipse.jetty/jetty-server | 10.0.0 | 10.0.24 |
| maven | org.eclipse.jetty/jetty-server | 11.0.0 | 11.0.24 |
| maven | org.eclipse.jetty/jetty-server | 12.0.0 | 12.0.9 |
| maven | org.eclipse.jetty/jetty-server | 9.3.12 | 9.4.56 |
| openSUSE:Leap 15.5 | jetty-minimal | 0 | 9.4.56-150200.3.28.1 |
| openSUSE:Leap 15.6 | jetty-minimal | 0 | 9.4.56-150200.3.28.1 |
| openSUSE:Tumbleweed | jetty-minimal | 0 | 9.4.56-2.1 |
Related vulnerabilities
- CVE-2026-1605 In Eclipse Jetty, versions 12.0.0-12.0.31 and 12.1.0-12.0.5, class GzipHandler exposes a… Also affects org.eclipse.jetty:jetty-server
- CVE-2015-2080 The exception handling code in Eclipse Jetty before 9.2.9.v20150224 allows remote… Also affects org.eclipse.jetty:jetty-server
- CVE-2026-33871 Netty is an asynchronous, event-driven network application framework. Also affects apache-hop
- CVE-2025-11143 The Jetty URI parser has some key differences to other common parsers when evaluating… Also affects apache-hop
- CVE-2025-33042 Improper Control of Generation of Code ('Code Injection') vulnerability in Apache Avro… Also affects apache-hop
- CVE-2025-68161 Apache Log4j does not verify the TLS hostname in its Socket Appender Also affects apache-hop
- CVE-2025-67735 Netty has a CRLF Injection vulnerability in io.netty.handler.codec.http.HttpRequestEncoder Also affects apache-hop
- CVE-2025-66566 yawkat LZ4 Java provides LZ4 compression for Java. Also affects apache-hop