Monitor vulnerabilities like this one.
Sign up free to get alerted when software you use is affected.
7.5
Eclipse Jetty Server: Gzip request can cause memory leak
CVE-2026-1605
GHSA-xxh7-fcf3-rj7f
GHSA-xxh7-fcf3-rj7f
Summary
A bug in the Eclipse Jetty Server can cause the system to run out of memory (OOM) when handling certain types of requests. This can happen when the server is under a heavy load and can be exploited by attackers to cause a denial-of-service (DoS) attack. To fix this issue, the Jetty developers need to modify the code to ensure that the memory is released properly after each request is handled.
What to do
- Update eclipse org.eclipse.jetty:jetty-server to version 12.1.6.
- Update eclipse org.eclipse.jetty:jetty-server to version 12.0.32.
Affected software
| Vendor | Product | Affected versions | Fix available |
|---|---|---|---|
| eclipse | org.eclipse.jetty:jetty-server | > 12.1.0 , <= 12.1.5 | 12.1.6 |
| eclipse | org.eclipse.jetty:jetty-server | > 12.0.0 , <= 12.0.31 | 12.0.32 |
| eclipse | jetty | > 12.0.0 , <= 12.0.32 | – |
| eclipse | jetty | > 12.1.0 , <= 12.1.6 | – |
| eclipse | org.eclipse.jetty:jetty-server | > 12.1.0 , <= 12.1.6 | 12.1.6 |
| eclipse | org.eclipse.jetty:jetty-server | > 12.0.0 , <= 12.0.32 | 12.0.32 |
Original title
The Eclipse Jetty Server Artifact has a Gzip request memory leak
Original description
### Description (as reported)
There is a memory leak when using `GzipHandler` in jetty-12.0.30 that can cause off-heap OOMs. This can be used for DoS attacks so I'm reporting this as a vulnerability.
The leak is created by requests where the request is inflated (`Content-Encoding: gzip`) and the response is not deflated (no `Accept-Encoding: gzip`). In these conditions, a new inflator will be created by `GzipRequest` and never released back into `GzipRequest.__inflaterPool` because `gzipRequest.destory()` is not called.
In heap dumps one can see thousands of `java.util.zip.Inflator` objects, which use both Java heaps and native memory. Leaking native memory causes of off-heap OOMs.
Code path in `GzipHandler.handle()`:
1. Line 601: `GzipRequest` is created when request inflation is needed.
2. Lines 611-616: The callback is only wrapped in `GzipResponseAndCallback` when both inflation and deflation are needed.
3. Lines 619-625: If the handler accepts the request (returns true), `gzipRequest.destroy()` is only called in the "request not accepted" path (returns false)
When deflation is needed, `GzipResponseAndCallback` (lines 102 and 116) properly calls `gzipRequest.destroy()` in its `succeeded()` and `failed()` methods. But this wrapper is only created when deflation is needed.
Possible fix:
The callback should be wrapped whenever a `GzipRequest` is created, not just when deflation is needed. This ensures `gzipRequest.destroy()` is always called when the request completes.
### Impact
The leak causes the JVM to crash with OOME.
### Patches
No patches yet.
### Workarounds
Disable `GzipHandler`.
### References
https://github.com/jetty/jetty.project/issues/14260
https://gitlab.eclipse.org/security/cve-assignment/-/issues/79
There is a memory leak when using `GzipHandler` in jetty-12.0.30 that can cause off-heap OOMs. This can be used for DoS attacks so I'm reporting this as a vulnerability.
The leak is created by requests where the request is inflated (`Content-Encoding: gzip`) and the response is not deflated (no `Accept-Encoding: gzip`). In these conditions, a new inflator will be created by `GzipRequest` and never released back into `GzipRequest.__inflaterPool` because `gzipRequest.destory()` is not called.
In heap dumps one can see thousands of `java.util.zip.Inflator` objects, which use both Java heaps and native memory. Leaking native memory causes of off-heap OOMs.
Code path in `GzipHandler.handle()`:
1. Line 601: `GzipRequest` is created when request inflation is needed.
2. Lines 611-616: The callback is only wrapped in `GzipResponseAndCallback` when both inflation and deflation are needed.
3. Lines 619-625: If the handler accepts the request (returns true), `gzipRequest.destroy()` is only called in the "request not accepted" path (returns false)
When deflation is needed, `GzipResponseAndCallback` (lines 102 and 116) properly calls `gzipRequest.destroy()` in its `succeeded()` and `failed()` methods. But this wrapper is only created when deflation is needed.
Possible fix:
The callback should be wrapped whenever a `GzipRequest` is created, not just when deflation is needed. This ensures `gzipRequest.destroy()` is always called when the request completes.
### Impact
The leak causes the JVM to crash with OOME.
### Patches
No patches yet.
### Workarounds
Disable `GzipHandler`.
### References
https://github.com/jetty/jetty.project/issues/14260
https://gitlab.eclipse.org/security/cve-assignment/-/issues/79
nvd CVSS3.1
7.5
Vulnerability type
CWE-400
Uncontrolled Resource Consumption
CWE-401
Memory Leak
- https://nvd.nist.gov/vuln/detail/CVE-2026-1605
- https://github.com/jetty/jetty.project/security/advisories/GHSA-xxh7-fcf3-rj7f Vendor Advisory
- https://github.com/jetty/jetty.project/issues/14260
- https://gitlab.eclipse.org/security/cve-assignment/-/issues/79
- https://github.com/advisories/GHSA-xxh7-fcf3-rj7f
- https://github.com/jetty/jetty.project Product
Published: 5 Mar 2026 · Updated: 13 Mar 2026 · First seen: 6 Mar 2026