Skip to content

Commit 96e9898

Browse files
willyborankingithub-actions[bot]
authored andcommitted
[Backport 1.x] Bump BouncyCastle from jdk15on to jdk15to18 (#2901) (#2919)
jdk15to18 contains fix for - CVE-2023-33201 - Medium Severity Vulnerability (cherry picked from commit 9a72355) Signed-off-by: Andrey Pleskach <ples@aiven.io> (cherry picked from commit 8e6eef7)
1 parent c72e00d commit 96e9898

File tree

3 files changed

+36
-31
lines changed

3 files changed

+36
-31
lines changed

build.gradle

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,20 @@ configurations.all {
9292
}
9393

9494
dependencies {
95+
96+
modules {
97+
module("org.bouncycastle:bcprov-jdk15on") {
98+
replacedBy("org.bouncycastle:bcprov-jdk15to18", "the jdk15on artifacts are not supported anymore")
99+
}
100+
}
101+
95102
implementation 'jakarta.annotation:jakarta.annotation-api:1.3.5'
96103
implementation "org.opensearch.plugin:transport-netty4-client:${opensearch_version}"
97104
implementation "org.opensearch.client:opensearch-rest-high-level-client:${opensearch_version}"
98105
implementation 'com.google.guava:guava:30.0-jre'
99106
implementation 'org.greenrobot:eventbus:3.2.0'
100107
implementation 'commons-cli:commons-cli:1.3.1'
101-
implementation 'org.bouncycastle:bcprov-jdk15on:1.70'
108+
implementation 'org.bouncycastle:bcprov-jdk15to18:1.75'
102109
implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.1'
103110
implementation 'org.ldaptive:ldaptive:1.2.3'
104111
implementation 'org.apache.httpcomponents:httpclient-cache:4.5.13'

plugin-security.policy

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,13 @@ grant {
5959
permission java.net.NetPermission "getNetworkInformation";
6060
permission java.net.NetPermission "getProxySelector";
6161
permission java.net.SocketPermission "*", "connect,accept,resolve";
62-
62+
63+
// BouncyCastle permissions
6364
permission java.security.SecurityPermission "putProviderProperty.BC";
6465
permission java.security.SecurityPermission "insertProvider.BC";
65-
66+
permission java.security.SecurityPermission "removeProviderProperty.BC";
67+
permission java.util.PropertyPermission "jdk.tls.rejectClientInitiatedRenegotiation", "write";
68+
6669
permission java.lang.RuntimePermission "accessUserInformation";
6770

6871
permission java.security.SecurityPermission "org.apache.xml.security.register";

src/main/java/org/opensearch/security/ssl/DefaultSecurityKeyStore.java

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
package org.opensearch.security.ssl;
1919

20+
import com.google.common.collect.ImmutableList;
2021
import io.netty.buffer.PooledByteBufAllocator;
2122
import io.netty.handler.ssl.ApplicationProtocolConfig;
2223
import io.netty.handler.ssl.ClientAuth;
@@ -58,6 +59,7 @@
5859
import javax.net.ssl.SSLException;
5960
import javax.net.ssl.SSLParameters;
6061

62+
import org.bouncycastle.asn1.ASN1Object;
6163
import org.opensearch.security.ssl.util.CertFileProps;
6264
import org.opensearch.security.ssl.util.CertFromFile;
6365
import org.opensearch.security.ssl.util.CertFromKeystore;
@@ -985,34 +987,27 @@ public String getSubjectAlternativeNames(X509Certificate cert) {
985987
}
986988

987989
private List<String> getOtherName(List<?> altName) {
988-
ASN1Primitive oct = null;
989-
try {
990-
byte[] altNameBytes = (byte[]) altName.get(1);
991-
oct = (new ASN1InputStream(new ByteArrayInputStream(altNameBytes)).readObject());
992-
} catch (IOException e) {
993-
throw new RuntimeException("Could not read ASN1InputStream", e);
994-
}
995-
if (oct instanceof ASN1TaggedObject) {
996-
oct = ((ASN1TaggedObject) oct).getObject();
997-
}
998-
ASN1Sequence seq = ASN1Sequence.getInstance(oct);
999-
1000-
// Get object identifier from first in sequence
1001-
ASN1ObjectIdentifier asnOID = (ASN1ObjectIdentifier) seq.getObjectAt(0);
1002-
String oid = asnOID.getId();
1003-
1004-
// Get value of object from second element
1005-
final ASN1TaggedObject obj = (ASN1TaggedObject) seq.getObjectAt(1);
1006-
// Could be tagged twice due to bug in java cert.getSubjectAltName
1007-
ASN1Primitive prim = obj.getObject();
1008-
if (prim instanceof ASN1TaggedObject) {
1009-
prim = ASN1TaggedObject.getInstance(((ASN1TaggedObject) prim)).getObject();
1010-
}
1011-
1012-
if (prim instanceof ASN1String) {
1013-
return Collections.unmodifiableList(Arrays.asList(oid, ((ASN1String) prim).getString()));
990+
if (altName.size() < 2) {
991+
log.warn("Couldn't parse subject alternative names");
992+
return null;
993+
}
994+
try (final ASN1InputStream in = new ASN1InputStream((byte[]) altName.get(1))) {
995+
final ASN1Primitive asn1Primitive = in.readObject();
996+
final ASN1Sequence sequence = ASN1Sequence.getInstance(asn1Primitive);
997+
final ASN1ObjectIdentifier asn1ObjectIdentifier = ASN1ObjectIdentifier.getInstance(sequence.getObjectAt(0));
998+
final ASN1TaggedObject asn1TaggedObject = ASN1TaggedObject.getInstance(sequence.getObjectAt(1));
999+
ASN1Object maybeTaggedAsn1Primitive = asn1TaggedObject.getBaseObject();
1000+
if (maybeTaggedAsn1Primitive instanceof ASN1TaggedObject) {
1001+
maybeTaggedAsn1Primitive = ASN1TaggedObject.getInstance(maybeTaggedAsn1Primitive).getBaseObject();
1002+
}
1003+
if (maybeTaggedAsn1Primitive instanceof ASN1String) {
1004+
return ImmutableList.of(asn1ObjectIdentifier.getId(), maybeTaggedAsn1Primitive.toString());
1005+
} else {
1006+
log.warn("Couldn't parse subject alternative names");
1007+
return null;
1008+
}
1009+
} catch (final Exception ioe) { // catch all exception here since BC throws diff exceptions
1010+
throw new RuntimeException("Couldn't parse subject alternative names", ioe);
10141011
}
1015-
1016-
return null;
10171012
}
10181013
}

0 commit comments

Comments
 (0)