First published: Thu Apr 01 2021(Updated: )
### Impact When using SSL/TLS with Jetty, either with HTTP/1.1, HTTP/2, or WebSocket, the server may receive an invalid large (greater than 17408) TLS frame that is incorrectly handled, causing CPU resources to eventually reach 100% usage. ### Workarounds The problem can be worked around by compiling the following class: ```java package org.eclipse.jetty.server.ssl.fix6072; import java.nio.ByteBuffer; import javax.net.ssl.SSLEngine; import javax.net.ssl.SSLEngineResult; import javax.net.ssl.SSLException; import javax.net.ssl.SSLHandshakeException; import org.eclipse.jetty.io.EndPoint; import org.eclipse.jetty.io.ssl.SslConnection; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.SslConnectionFactory; import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.annotation.Name; import org.eclipse.jetty.util.ssl.SslContextFactory; public class SpaceCheckingSslConnectionFactory extends SslConnectionFactory { public SpaceCheckingSslConnectionFactory(@Name("sslContextFactory") SslContextFactory factory, @Name("next") String nextProtocol) { super(factory, nextProtocol); } @Override protected SslConnection newSslConnection(Connector connector, EndPoint endPoint, SSLEngine engine) { return new SslConnection(connector.getByteBufferPool(), connector.getExecutor(), endPoint, engine, isDirectBuffersForEncryption(), isDirectBuffersForDecryption()) { @Override protected SSLEngineResult unwrap(SSLEngine sslEngine, ByteBuffer input, ByteBuffer output) throws SSLException { SSLEngineResult results = super.unwrap(sslEngine, input, output); if ((results.getStatus() == SSLEngineResult.Status.BUFFER_UNDERFLOW || results.getStatus() == SSLEngineResult.Status.OK && results.bytesConsumed() == 0 && results.bytesProduced() == 0) && BufferUtil.space(input) == 0) { BufferUtil.clear(input); throw new SSLHandshakeException("Encrypted buffer max length exceeded"); } return results; } }; } } ``` This class can be deployed by: + The resulting class file should be put into a jar file (eg sslfix6072.jar) + The jar file should be made available to the server. For a normal distribution this can be done by putting the file into ${jetty.base}/lib + Copy the file `${jetty.home}/modules/ssl.mod` to `${jetty.base}/modules` + Edit the `${jetty.base}/modules/ssl.mod` file to have the following section: ``` [lib] lib/sslfix6072.jar ``` + Copy the file `${jetty.home}/etc/jetty-https.xml` and`${jetty.home}/etc/jetty-http2.xml` to `${jetty.base}/etc` + Edit files `${jetty.base}/etc/jetty-https.xml` and `${jetty.base}/etc/jetty-http2.xml`, changing any reference of `org.eclipse.jetty.server.SslConnectionFactory` to `org.eclipse.jetty.server.ssl.fix6072.SpaceCheckingSslConnectionFactory`. For example: ```xml <Call name="addIfAbsentConnectionFactory"> <Arg> <New class="org.eclipse.jetty.server.ssl.fix6072.SpaceCheckingSslConnectionFactory"> <Arg name="next">http/1.1</Arg> <Arg name="sslContextFactory"><Ref refid="sslContextFactory"/></Arg> </New> </Arg> </Call> ``` + Restart Jetty
Credit: emo@eclipse.org emo@eclipse.org
Affected Software | Affected Version | How to fix |
---|---|---|
maven/org.eclipse.jetty:jetty-server | >=11.0.0<11.0.2 | 11.0.2 |
maven/org.eclipse.jetty:jetty-server | >=10.0.0<10.0.2 | 10.0.2 |
maven/org.eclipse.jetty:jetty-server | >=7.2.2<9.4.39 | 9.4.39 |
redhat/rh-eclipse-jetty | <0:9.4.40-1.1.el7_9 | 0:9.4.40-1.1.el7_9 |
redhat/jenkins | <0:2.277.3.1620393611-1.el8 | 0:2.277.3.1620393611-1.el8 |
redhat/runc | <0:1.0.0-95.rhaos4.8.gitcd80260.el8 | 0:1.0.0-95.rhaos4.8.gitcd80260.el8 |
debian/jetty9 | 9.4.16-0+deb10u1 9.4.50-4+deb10u1 9.4.39-3+deb11u2 9.4.50-4+deb11u1 9.4.50-4+deb12u2 9.4.53-1 | |
redhat/jetty | <9.4.39 | 9.4.39 |
redhat/jetty | <10.0.2 | 10.0.2 |
redhat/jetty | <11.0.2 | 11.0.2 |
Eclipse Jetty | >=7.2.2<9.4.39 | |
Eclipse Jetty | >=10.0.0<10.0.2 | |
Eclipse Jetty | >=11.0.0<11.0.2 | |
Oracle Autovue For Agile Product Lifecycle Management | =21.0.2 | |
Oracle Communications Cloud Native Core Policy | =1.14.0 | |
Oracle Communications Element Manager | =8.2.2 | |
Oracle Communications Services Gatekeeper | =7.0 | |
Oracle Communications Session Report Manager | >=8.0.0.0<=8.2.4.0 | |
Oracle Communications Session Route Manager | >=8.0.0.0<=8.2.4.0 | |
Oracle REST Data Services | <21.3 | |
Oracle Siebel Core - Automation | <=21.9 | |
Jenkins Jenkins | <2.277.3 | |
Jenkins Jenkins | <2.286 | |
NetApp Cloud Manager | <3.9.8 | |
Netapp E-series Performance Analyzer | <3.0 | |
NetApp E-Series SANtricity OS Controller | >=11.0.0<11.70.1 | |
Netapp E-series Santricity Storage Vcenter | <1.10 | |
Netapp E-series Santricity Web Services Web Services Proxy | <5.1 | |
Netapp Ontap Tools Vmware Vsphere | <9.10 | |
Netapp Santricity Cloud Connector | ||
NetApp SANtricity Web Services Proxy | <5.1 | |
Netapp Snapcenter | <4.6 | |
Netapp Storage Replication Adapter For Clustered Data Ontap Vmware Vsphere | <9.10 | |
Netapp Vasa Provider For Clustered Data Ontap | <9.10 |
Sign up to SecAlerts for real-time vulnerability data matched to your software, aggregated from hundreds of sources.
(Appears in the following advisories)
The vulnerability ID is CVE-2021-28165.
The severity of CVE-2021-28165 is high (7.5).
Jetty server versions 7.2.2 to 9.4.38, 10.0.0.alpha0 to 10.0.1, and 11.0.0.alpha0 to 11.0.1 are affected by CVE-2021-28165.
To fix CVE-2021-28165, you should update Jetty server to version 9.4.39, 10.0.2, or 11.0.2.
You can find more information about CVE-2021-28165 at the following references: - [GitHub Security Advisory](https://github.com/eclipse/jetty.project/security/advisories/GHSA-26vr-8j45-3r4w) - [NIST NVD](https://nvd.nist.gov/vuln/detail/CVE-2021-28165) - [Apache ZooKeeper Mailing List](https://lists.apache.org/thread.html/r002258611ed0c35b82b839d284b43db9dcdec120db8afc1c993137dc@%3Cnotifications.zookeeper.apache.org%3E)