CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2024-7708

CVE-2024-7708: Resource Exhaustion via HTTP Connection Buffer Leak in Eclipse Jetty

Amit Schendel
Amit Schendel
Senior Security Researcher

Jul 22, 2026·6 min read·44 visits

Executive Summary (TL;DR)

Unauthenticated remote attackers can trigger a heap memory leak in Eclipse Jetty by sending requests that yield zero-byte reads (e.g., Expect: 100-Continue handshakes resulting in early 404 responses). Over repeated connections, this exhausts the RetainableByteBufferPool, leading to an OutOfMemoryError and service crash.

Eclipse Jetty is subject to an uncontrolled resource consumption vulnerability in its HTTP connection handling component. When processing certain HTTP request sequences, such as those invoking the Expect: 100-Continue handshake under specific network constraints, the server fails to return allocated buffers to its central pool. Over time, this leads to buffer pool exhaustion and a complete denial of service via memory starvation.

Vulnerability Overview

The vulnerability exists within the HTTP connection handling implementation of Eclipse Jetty, specifically inside the HttpConnection.fillRequestBuffer() method. Eclipse Jetty utilizes an internal buffer recycling mechanism to minimize memory fragmentation and reduce garbage collection overhead during high-throughput network operations. This system depends on the proper allocation and subsequent reclamation of buffer instances.

In affected versions, network conditions or specific application behaviors can cause the connection layer to allocate a buffer but abandon it without triggering the appropriate release cycle. The attack surface is exposed to any remote client capable of establishing a TCP connection to the Jetty HTTP connector. No authentication or specific privileges are required to reach the vulnerable code path.

Because the resource leak occurs within the server's core network transport layer, the degradation is cumulative. Every instance of an abandoned buffer reduces the available capacity of the shared buffer pool. Under sustained or repeated invocation, the pool is depleted, preventing the server from accepting new connections and ultimately triggering an unrecoverable system failure.

Root Cause Analysis

The root cause of CVE-2024-7708 lies in the logical control flow of org.eclipse.jetty.server.HttpConnection.fillRequestBuffer(). To optimize memory performance, Jetty utilizes RetainableByteBuffer objects obtained from a central RetainableByteBufferPool. The connection handler is designed to acquire a buffer from this pool, read incoming network packets via the underlying endpoint, and release the buffer once parsing is complete or when the connection state transitions.

A memory leak occurs when the server attempts to read from a connection's endpoint and the operation returns zero bytes, or when a non-I/O exception is thrown during processing. For example, if a client sends request headers indicating a payload is forthcoming (such as a Content-Length or chunked transfer encoding) but the connection is closed or stalled before payload bytes arrive, the endpoint read returns zero. In this state, the original implementation branched past the cleanup code, failing to call releaseRequestBuffer().

Furthermore, the error handling framework in the vulnerable versions was overly restrictive. The try-catch block surrounding the endpoint fill operation only caught IOException. If an unhandled RuntimeException or other error occurred during packet decoding or header parsing, the execution skipped the recovery block entirely, leaving the acquired RetainableByteBuffer permanently allocated in the pool.

Code Analysis

An analysis of the vulnerability patch in HttpConnection.java clarifies the precise location of the logical omission. The code block below compares the vulnerable handling with the corrected resource release logic.

// Vulnerable Flow vs Patched Flow in HttpConnection.java
 
                // Prior logic: only added bytes if filled > 0, otherwise branched to atEOF() without releasing buffer
                if (filled > 0)
                {
                    bytesIn.add(filled);
                }
                else
                {
                    if (filled < 0)
                        _parser.atEOF();
                    // FIX: Explicitly release the request buffer back to the pool if no bytes were read
                    releaseRequestBuffer();
                }
 
                if (LOG.isDebugEnabled())
                    LOG.debug("{} filled {} {}", this, filled, _retainableByteBuffer);
 
                return filled;
            }
            // FIX: Broadened catch block from IOException to Throwable to intercept all runtime exceptions
            catch (Throwable x)
            {
                if (LOG.isDebugEnabled())
                    LOG.debug("Unable to fill from endpoint {}", getEndPoint(), x);
                _parser.atEOF();
                // FIX: Ensure cleanup occurs and resource is released on any thrown exception
                if (_retainableByteBuffer != null)
                {
                    _retainableByteBuffer.clear();
                    releaseRequestBuffer();
                }
                return -1;
            }

The original implementation failed to address the scenario where filled == 0. In that condition, the connection did not call releaseRequestBuffer(), leading to an accumulation of retained buffers in memory. The corrected code ensures that any non-positive read outcome triggers an immediate release of the buffer. By broadening the exception handler to catch Throwable instead of just IOException, the patch prevents memory leaks stemming from unexpected application-level runtime failures.

Exploitation Methodology

Exploitation of CVE-2024-7708 requires an attacker to initiate HTTP transactions that result in empty read operations or early connection termination before the request body is transmitted. The most reliable method to achieve this condition involves using the Expect: 100-Continue HTTP header.

In a standard scenario, a client sends an HTTP request header containing Expect: 100-Continue to verify if the server will accept the payload. If the requested URL does not exist or triggers an immediate validation failure, Jetty generates a 404 Not Found or 400 Bad Request response prior to reading the request body. If the connection is then terminated, the server attempts to parse the remaining request envelope, resulting in zero bytes read and triggering the leak condition.

An attacker can automate this interaction by establishing multiple parallel TCP connections, sending headers containing Expect: 100-Continue to an invalid endpoint, and closing the write end of the socket. Because each transaction permanently leaks one RetainableByteBuffer in the shared RetainableByteBufferPool, executing this pattern at scale will steadily exhaust the server heap, leading to total service degradation without requiring high bandwidth.

Impact Assessment

The impact of this vulnerability is categorized as a high-severity Denial of Service (DoS). Because the leak targets the heap-allocated direct byte buffers used for network transport, memory exhaustion affects the entire Java Virtual Machine (JVM) hosting the Jetty container.

Once the RetainableByteBufferPool is fully depleted, the application server is unable to process any new incoming network requests. This results in standard socket connection timeouts for legitimate clients. If the leak continues, the JVM eventually throws an OutOfMemoryError (OOM), leading to abnormal termination of the server process.

This vulnerability has no direct impact on data confidentiality or integrity. It cannot be leveraged to execute arbitrary code or bypass security authorization controls. However, due to the ease of triggering the leak and the lack of authentication requirements, the potential for service disruption is significant.

Remediation and Mitigation Guidance

The definitive resolution for this vulnerability is to upgrade the Eclipse Jetty deployment to a patched release. All deployments using Jetty 10 or Jetty 11 should be transitioned to the corrected versions.

If an immediate upgrade is not feasible, operators can apply temporary configuration mitigations to reduce exposure. Implementing reverse proxies or Web Application Firewalls (WAFs) to filter or drop requests containing Expect: 100-Continue headers can mitigate the primary vector. Additionally, reducing the maximum idle timeouts on Jetty connectors limit the lifetime of stalled connections, reducing the rate of buffer accumulation.

Administrators should also configure JVM monitoring tools to track the utilization of Direct ByteBuffers and the JVM heap. A continuous upward trend in buffer allocation that does not return to baseline during idle periods is a strong indicator of active exploitation or unchecked memory leaks.

Official Patches

Eclipse FoundationGitHub Security Advisory GHSA-9299-c6m4-mjhc

Fix Analysis (1)

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
EPSS Probability
0.25%
Top 83% most exploited

Affected Systems

Eclipse Jetty 10.x (versions >= 10.0.7 and < 10.0.23)Eclipse Jetty 11.x (versions >= 11.0.7 and < 11.0.23)

Affected Versions Detail

Product
Affected Versions
Fixed Version
Jetty
Eclipse Foundation
>= 10.0.7, < 10.0.2310.0.23
Jetty
Eclipse Foundation
>= 11.0.7, < 11.0.2311.0.23
AttributeDetail
CWE IDCWE-400, CWE-401
Attack VectorNetwork (AV:N)
CVSS Severity7.5 (High)
EPSS Score0.00252
ImpactDenial of Service (DoS)
Exploit StatusProof of Concept (PoC) available
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
CWE-400
Uncontrolled Resource Consumption

The system does not limit or properly release allocated memory buffers, enabling remote attackers to consume all available memory resources.

Known Exploits & Detection

GitHub (Official Jetty JUnit Test Suite)Integration test HttpClientContinueTest.testExpect100ContinueThen404 replicates buffer leakage behavior.

Vulnerability Timeline

Code fix commit merged into Eclipse Jetty repository
2024-08-13
Fixed versions 10.0.23 and 11.0.23 released
2024-08-15
Vulnerability formally assigned and published as CVE-2024-7708
2026-07-14

References & Sources

  • [1]NVD Entry for CVE-2024-7708
  • [2]CVE.org Record
  • [3]GitLab Assignment Tracking Issue
  • [4]GitHub Pull Request
  • [5]Jetty 10.0.23 Release Notes
  • [6]Jetty 11.0.23 Release Notes

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•2 days ago•CVE-2026-107844
5.3

CVE-2026-107844: Path Traversal Vulnerability in Contao ImagesController

A path traversal vulnerability (CWE-22) in Contao CMS allows unauthenticated remote attackers to bypass directory boundary restrictions in ImagesController and access files within the project directory.

Amit Schendel
Amit Schendel
8 views•5 min read
•2 days ago•CVE-2026-107848
3.5

CVE-2026-107848: Cross-Site Request Forgery (CSRF) in Contao Backend Actions via GET Requests

Contao Open Source CMS versions 4.0.0 through 5.3.49 and 5.4.0-RC1 through 5.7.11 contain a Cross-Site Request Forgery (CSRF) vulnerability in backend parameter handling. The `RequestTokenListener` component validates anti-CSRF tokens solely for HTTP POST requests, while GET-based declarative guards run only when an `act` parameter is present in the query string. Consequently, custom backend actions dispatched via alternative parameters such as `key=` can execute without CSRF token verification when triggered by an authenticated user.

Amit Schendel
Amit Schendel
8 views•5 min read
•2 days ago•CVE-2026-107843
5.3

CVE-2026-107843: Unthrottled Activation Email Resend and Account Enumeration in Contao CMS

Contao CMS versions 4.1.0 through 5.3.49 and 5.4.0-RC1 through 5.7.11 fail to validate form submission tokens and enforce rate limiting when processing activation email resend requests via HTTP POST, enabling resource exhaustion and account state enumeration.

Amit Schendel
Amit Schendel
9 views•4 min read
•2 days ago•CVE-2026-107842
5.3

CVE-2026-107842: Information Disclosure via Stale Indexing in Contao Search Module

An information disclosure vulnerability in Contao CMS allows unauthenticated site visitors to view protected page titles, URLs, and text excerpts through search queries when protected page indexing is disabled after previously being enabled.

Amit Schendel
Amit Schendel
10 views•4 min read
•2 days ago•GHSA-G38J-7V97-X298
6.5

GHSA-G38J-7V97-X298: Missing Authorization Check in Vikunja CalDAV Task Relation Creation

In Vikunja prior to version 2.6.0, relation creation via the CalDAV endpoint fails to invoke the TaskRelation.CanCreate authorization check. This missing access control allows an authenticated user to establish unauthorized relationships and perform write operations against any task, provided its unique identifier (UID) is known.

Alon Barad
Alon Barad
12 views•5 min read
•2 days ago•GHSA-3HC7-R24J-RPWC
6.8

GHSA-3hc7-r24j-rpwc: Cross-Project Task Disclosure via Subtask Expansion in Vikunja

A cross-project information disclosure vulnerability in Vikunja allows authenticated users with read access to one project to view private task details from unauthorized projects via subtask expansion parameters.

Alon Barad
Alon Barad
9 views•5 min read