| Package | Affected versions | Patched versions |
|---|---|---|
| org.eclipse.jetty:jetty-server | ≥ 10.0.0, < 10.0.2≥ 11.0.0, < 11.0.2≥ 7.2.2, < 9.4.39 | 10.0.211.0.29.4.39 |
| jetty | ≥ 10.0.0, < 10.0.2≥ 11.0.0, < 11.0.2≥ 7.2.2, < 9.4.39 | 10.0.211.0.29.4.39 |
| jenkins | < 2.277.3< 2.286 | 2.277.32.286 |
| cloud manager | < 3.9.8 | 3.9.8 |
| e-series performance analyzer | < 3.0 | 3.0 |
| e-series santricity os controller | ≥ 11.0.0, < 11.70.1 | 11.70.1 |
| e-series santricity storage | < 1.10 | 1.10 |
| e-series santricity web services | < 5.1 | 5.1 |
| ontap tools | < 9.10 | 9.10 |
| santricity web services proxy | < 5.1 | 5.1 |
| snapcenter | < 4.6 | 4.6 |
| storage replication adapter for clustered data ontap | < 9.10 | 9.10 |
| vasa provider for clustered data ontap | < 9.10 | 9.10 |
| autovue for agile product lifecycle management | = 21.0.2 | |
| communications cloud native core policy | = 1.14.0 | |
| communications element manager | = 8.2.2 | |
| communications services gatekeeper | = 7.0 | |
| communications session report manager | ≥ 8.0.0.0, ≤ 8.2.4.0 | |
| communications session route manager | ≥ 8.0.0.0, ≤ 8.2.4.0 | |
| rest data services | < 21.3 | 21.3 |
| siebel core - automation | ≤ 21.9 |
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.
The problem can be worked around by compiling the following class:
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:
${jetty.home}/modules/ssl.mod to ${jetty.base}/modules${jetty.base}/modules/ssl.mod file to have the following section:[lib]
lib/sslfix6072.jar
${jetty.home}/etc/jetty-https.xml and to Running one of these products? Scan your site to see whether it exposes a vulnerable version.
Scan my site free${jetty.home}/etc/jetty-http2.xml${jetty.base}/etc${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: <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>