This is an automated email from the ASF dual-hosted git repository.

mmerli pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 0f7434580f2 [fix][sec] Upgrade Bouncycastle to 1.75 to address 
CVE-2023-33201 (#20631)
0f7434580f2 is described below

commit 0f7434580f285d027a625d9de7ca41e3e74a6365
Author: Lari Hotari <lhot...@users.noreply.github.com>
AuthorDate: Fri Jun 23 15:18:35 2023 +0300

    [fix][sec] Upgrade Bouncycastle to 1.75 to address CVE-2023-33201 (#20631)
---
 bouncy-castle/bc/LICENSE                           |  6 +--
 bouncy-castle/bc/pom.xml                           |  4 +-
 distribution/server/pom.xml                        |  4 ++
 distribution/server/src/assemble/LICENSE.bin.txt   |  8 ++--
 distribution/shell/src/assemble/LICENSE.bin.txt    |  8 ++--
 pom.xml                                            | 46 +++++++++++++++++++---
 pulsar-broker-auth-athenz/pom.xml                  |  5 +++
 pulsar-client-auth-athenz/pom.xml                  |  5 +++
 .../pulsar/client/impl/crypto/MessageCryptoBc.java | 32 ++++++++++++---
 pulsar-io/aerospike/pom.xml                        | 10 +++++
 pulsar-sql/presto-distribution/LICENSE             |  8 ++--
 tests/integration/pom.xml                          |  5 +++
 tiered-storage/file-system/pom.xml                 | 18 +++++++--
 13 files changed, 127 insertions(+), 32 deletions(-)

diff --git a/bouncy-castle/bc/LICENSE b/bouncy-castle/bc/LICENSE
index 5921755346e..dae8f16df5b 100644
--- a/bouncy-castle/bc/LICENSE
+++ b/bouncy-castle/bc/LICENSE
@@ -205,6 +205,6 @@
 This projects includes binary packages with the following licenses:
 Bouncy Castle License
  * Bouncy Castle -- licenses/LICENSE-bouncycastle.txt
-    - org.bouncycastle-bcpkix-jdk15on-1.60.jar
-    - org.bouncycastle-bcprov-jdk15on-1.60.jar
-    - org.bouncycastle-bcprov-ext-jdk15on-1.60.jar
+    - org.bouncycastle-bcpkix-jdk18on-1.75.jar
+    - org.bouncycastle-bcprov-jdk18on-1.75.jar
+    - org.bouncycastle-bcprov-ext-jdk18on-1.75.jar
diff --git a/bouncy-castle/bc/pom.xml b/bouncy-castle/bc/pom.xml
index fdd3ebfcf0f..8a26082b126 100644
--- a/bouncy-castle/bc/pom.xml
+++ b/bouncy-castle/bc/pom.xml
@@ -42,13 +42,13 @@
 
     <dependency>
       <groupId>org.bouncycastle</groupId>
-      <artifactId>bcpkix-jdk15on</artifactId>
+      <artifactId>bcpkix-jdk18on</artifactId>
       <version>${bouncycastle.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.bouncycastle</groupId>
-      <artifactId>bcprov-ext-jdk15on</artifactId>
+      <artifactId>bcprov-ext-jdk18on</artifactId>
       <version>${bouncycastle.version}</version>
     </dependency>
   </dependencies>
diff --git a/distribution/server/pom.xml b/distribution/server/pom.xml
index 7ee2bd88128..0e033b10ed4 100644
--- a/distribution/server/pom.xml
+++ b/distribution/server/pom.xml
@@ -259,6 +259,10 @@
       <groupId>io.grpc</groupId>
       <artifactId>grpc-all</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.bouncycastle</groupId>
+      <artifactId>bcpkix-jdk18on</artifactId>
+    </dependency>
 
     <dependency>
       <groupId>io.perfmark</groupId>
diff --git a/distribution/server/src/assemble/LICENSE.bin.txt 
b/distribution/server/src/assemble/LICENSE.bin.txt
index c53da3bd536..8dc361cab3a 100644
--- a/distribution/server/src/assemble/LICENSE.bin.txt
+++ b/distribution/server/src/assemble/LICENSE.bin.txt
@@ -575,10 +575,10 @@ Creative Commons Attribution License
 
 Bouncy Castle License
  * Bouncy Castle -- ../licenses/LICENSE-bouncycastle.txt
-    - org.bouncycastle-bcpkix-jdk15on-1.69.jar
-    - org.bouncycastle-bcprov-ext-jdk15on-1.69.jar
-    - org.bouncycastle-bcprov-jdk15on-1.69.jar
-    - org.bouncycastle-bcutil-jdk15on-1.69.jar
+    - org.bouncycastle-bcpkix-jdk18on-1.75.jar
+    - org.bouncycastle-bcprov-ext-jdk18on-1.75.jar
+    - org.bouncycastle-bcprov-jdk18on-1.75.jar
+    - org.bouncycastle-bcutil-jdk18on-1.75.jar
 
 ------------------------
 
diff --git a/distribution/shell/src/assemble/LICENSE.bin.txt 
b/distribution/shell/src/assemble/LICENSE.bin.txt
index e69b74e7a9e..43bbfdec5bf 100644
--- a/distribution/shell/src/assemble/LICENSE.bin.txt
+++ b/distribution/shell/src/assemble/LICENSE.bin.txt
@@ -470,10 +470,10 @@ Creative Commons Attribution License
 
 Bouncy Castle License
  * Bouncy Castle -- ../licenses/LICENSE-bouncycastle.txt
-    - bcpkix-jdk15on-1.69.jar
-    - bcprov-ext-jdk15on-1.69.jar
-    - bcprov-jdk15on-1.69.jar
-    - bcutil-jdk15on-1.69.jar
+    - bcpkix-jdk18on-1.75.jar
+    - bcprov-ext-jdk18on-1.75.jar
+    - bcprov-jdk18on-1.75.jar
+    - bcutil-jdk18on-1.75.jar
 
 ------------------------
 
diff --git a/pom.xml b/pom.xml
index 0389eeed2ad..24b712bdadb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -152,7 +152,7 @@ flexible messaging model and an intuitive client 
API.</description>
     <slf4j.version>1.7.32</slf4j.version>
     <commons.collections4.version>4.4</commons.collections4.version>
     <log4j2.version>2.18.0</log4j2.version>
-    <bouncycastle.version>1.69</bouncycastle.version>
+    <bouncycastle.version>1.75</bouncycastle.version>
     <bouncycastle.bcpkix-fips.version>1.0.6</bouncycastle.bcpkix-fips.version>
     <bouncycastle.bc-fips.version>1.0.2.3</bouncycastle.bc-fips.version>
     <jackson.version>2.14.2</jackson.version>
@@ -824,9 +824,15 @@ flexible messaging model and an intuitive client 
API.</description>
       </dependency>
 
       <dependency>
-         <groupId>com.github.docker-java</groupId>
-         <artifactId>docker-java-core</artifactId>
-         <version>${docker-java.version}</version>
+        <groupId>com.github.docker-java</groupId>
+        <artifactId>docker-java-core</artifactId>
+        <version>${docker-java.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>*</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
       <dependency>
         <groupId>com.github.docker-java</groupId>
@@ -892,7 +898,7 @@ flexible messaging model and an intuitive client 
API.</description>
 
       <dependency>
         <groupId>org.bouncycastle</groupId>
-        <artifactId>bcpkix-jdk15on</artifactId>
+        <artifactId>bcpkix-jdk18on</artifactId>
         <version>${bouncycastle.version}</version>
       </dependency>
 
@@ -924,6 +930,24 @@ flexible messaging model and an intuitive client 
API.</description>
         <groupId>com.yahoo.athenz</groupId>
         <artifactId>athenz-cert-refresher</artifactId>
         <version>${athenz.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>*</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+
+      <dependency>
+        <groupId>com.yahoo.athenz</groupId>
+        <artifactId>athenz-auth-core</artifactId>
+        <version>${athenz.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>*</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
 
       <dependency>
@@ -1068,6 +1092,18 @@ flexible messaging model and an intuitive client 
API.</description>
         </exclusions>
       </dependency>
 
+      <dependency>
+        <groupId>io.grpc</groupId>
+        <artifactId>grpc-xds</artifactId>
+        <version>${grpc.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>*</artifactId>
+          </exclusion>
+        </exclusions>
+      </dependency>
+
       <dependency>
         <groupId>com.google.http-client</groupId>
         <artifactId>google-http-client</artifactId>
diff --git a/pulsar-broker-auth-athenz/pom.xml 
b/pulsar-broker-auth-athenz/pom.xml
index b8837ce67fc..6711a60bc89 100644
--- a/pulsar-broker-auth-athenz/pom.xml
+++ b/pulsar-broker-auth-athenz/pom.xml
@@ -53,6 +53,11 @@
       <artifactId>athenz-zpe-java-client</artifactId>
     </dependency>
 
+    <dependency>
+      <groupId>org.bouncycastle</groupId>
+      <artifactId>bcpkix-jdk18on</artifactId>
+    </dependency>
+
   </dependencies>
 
   <build>
diff --git a/pulsar-client-auth-athenz/pom.xml 
b/pulsar-client-auth-athenz/pom.xml
index 2149cfb2a2f..81315611e9b 100644
--- a/pulsar-client-auth-athenz/pom.xml
+++ b/pulsar-client-auth-athenz/pom.xml
@@ -52,6 +52,11 @@
       <artifactId>athenz-cert-refresher</artifactId>
     </dependency>
 
+    <dependency>
+      <groupId>org.bouncycastle</groupId>
+      <artifactId>bcpkix-jdk18on</artifactId>
+    </dependency>
+
     <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
diff --git 
a/pulsar-client-messagecrypto-bc/src/main/java/org/apache/pulsar/client/impl/crypto/MessageCryptoBc.java
 
b/pulsar-client-messagecrypto-bc/src/main/java/org/apache/pulsar/client/impl/crypto/MessageCryptoBc.java
index 2d7b779fa7b..146f066ae2c 100644
--- 
a/pulsar-client-messagecrypto-bc/src/main/java/org/apache/pulsar/client/impl/crypto/MessageCryptoBc.java
+++ 
b/pulsar-client-messagecrypto-bc/src/main/java/org/apache/pulsar/client/impl/crypto/MessageCryptoBc.java
@@ -35,6 +35,7 @@ import java.security.PrivateKey;
 import java.security.PublicKey;
 import java.security.SecureRandom;
 import java.security.Security;
+import java.security.spec.AlgorithmParameterSpec;
 import java.security.spec.InvalidKeySpecException;
 import java.util.HashMap;
 import java.util.List;
@@ -73,6 +74,7 @@ import org.bouncycastle.jce.provider.BouncyCastleProvider;
 import org.bouncycastle.jce.spec.ECParameterSpec;
 import org.bouncycastle.jce.spec.ECPrivateKeySpec;
 import org.bouncycastle.jce.spec.ECPublicKeySpec;
+import org.bouncycastle.jce.spec.IESParameterSpec;
 import org.bouncycastle.openssl.PEMException;
 import org.bouncycastle.openssl.PEMKeyPair;
 import org.bouncycastle.openssl.PEMParser;
@@ -172,6 +174,7 @@ public class MessageCryptoBc implements 
MessageCrypto<MessageMetadata, MessageMe
         dataKey = keyGenerator.generateKey();
 
         iv = new byte[IV_LEN];
+
     }
 
     private PublicKey loadPublicKey(byte[] keyBytes) throws Exception {
@@ -322,22 +325,27 @@ public class MessageCryptoBc implements 
MessageCrypto<MessageMetadata, MessageMe
         byte[] encryptedKey;
 
         try {
-
+            AlgorithmParameterSpec params = null;
             // Encrypt data key using public key
             if (RSA.equals(pubKey.getAlgorithm())) {
                 dataKeyCipher = Cipher.getInstance(RSA_TRANS, 
BouncyCastleProvider.PROVIDER_NAME);
             } else if (ECDSA.equals(pubKey.getAlgorithm())) {
                 dataKeyCipher = Cipher.getInstance(ECIES, 
BouncyCastleProvider.PROVIDER_NAME);
+                params = createIESParameterSpec();
             } else {
                 String msg = logCtx + "Unsupported key type " + 
pubKey.getAlgorithm() + " for key " + keyName;
                 log.error(msg);
                 throw new PulsarClientException.CryptoException(msg);
             }
-            dataKeyCipher.init(Cipher.ENCRYPT_MODE, pubKey);
+            if (params != null) {
+                dataKeyCipher.init(Cipher.ENCRYPT_MODE, pubKey, params);
+            } else {
+                dataKeyCipher.init(Cipher.ENCRYPT_MODE, pubKey);
+            }
             encryptedKey = dataKeyCipher.doFinal(dataKey.getEncoded());
 
         } catch (IllegalBlockSizeException | BadPaddingException | 
NoSuchAlgorithmException | NoSuchProviderException
-                | NoSuchPaddingException | InvalidKeyException e) {
+                 | NoSuchPaddingException | InvalidKeyException | 
InvalidAlgorithmParameterException e) {
             log.error("{} Failed to encrypt data key {}. {}", logCtx, keyName, 
e.getMessage());
             throw new PulsarClientException.CryptoException(e.getMessage());
         }
@@ -345,6 +353,13 @@ public class MessageCryptoBc implements 
MessageCrypto<MessageMetadata, MessageMe
         encryptedDataKeyMap.put(keyName, eki);
     }
 
+    // required since Bouncycastle 1.72 when using ECIES, it is required to 
pass in an IESParameterSpec
+    private IESParameterSpec createIESParameterSpec() {
+        // the IESParameterSpec to use was discovered by debugging 
BouncyCastle 1.69 and running the
+        // test 
org.apache.pulsar.client.api.SimpleProducerConsumerTest#testCryptoWithChunking
+        return new IESParameterSpec(null, null, 128);
+    }
+
     /*
      * Remove a key <p> Remove the key identified by the keyName from the list 
of keys.<p>
      *
@@ -474,23 +489,28 @@ public class MessageCryptoBc implements 
MessageCrypto<MessageMetadata, MessageMe
         byte[] keyDigest = null;
 
         try {
-
+            AlgorithmParameterSpec params = null;
             // Decrypt data key using private key
             if (RSA.equals(privateKey.getAlgorithm())) {
                 dataKeyCipher = Cipher.getInstance(RSA_TRANS, 
BouncyCastleProvider.PROVIDER_NAME);
             } else if (ECDSA.equals(privateKey.getAlgorithm())) {
                 dataKeyCipher = Cipher.getInstance(ECIES, 
BouncyCastleProvider.PROVIDER_NAME);
+                params = createIESParameterSpec();
             } else {
                 log.error("Unsupported key type {} for key {}.", 
privateKey.getAlgorithm(), keyName);
                 return false;
             }
-            dataKeyCipher.init(Cipher.DECRYPT_MODE, privateKey);
+            if (params != null) {
+                dataKeyCipher.init(Cipher.DECRYPT_MODE, privateKey, params);
+            } else {
+                dataKeyCipher.init(Cipher.DECRYPT_MODE, privateKey);
+            }
             dataKeyValue = dataKeyCipher.doFinal(encryptedDataKey);
 
             keyDigest = digest.digest(encryptedDataKey);
 
         } catch (IllegalBlockSizeException | BadPaddingException | 
NoSuchAlgorithmException | NoSuchProviderException
-                | NoSuchPaddingException | InvalidKeyException e) {
+                | NoSuchPaddingException | InvalidKeyException | 
InvalidAlgorithmParameterException e) {
             log.error("{} Failed to decrypt data key {} to decrypt messages 
{}", logCtx, keyName, e.getMessage());
             return false;
         }
diff --git a/pulsar-io/aerospike/pom.xml b/pulsar-io/aerospike/pom.xml
index 2b2a504147f..dc735577a59 100644
--- a/pulsar-io/aerospike/pom.xml
+++ b/pulsar-io/aerospike/pom.xml
@@ -52,6 +52,16 @@
       <groupId>com.aerospike</groupId>
       <artifactId>aerospike-client-bc</artifactId>
       <version>${aerospike-client.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.bouncycastle</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.bouncycastle</groupId>
+      <artifactId>bcpkix-jdk18on</artifactId>
     </dependency>
 
   </dependencies>
diff --git a/pulsar-sql/presto-distribution/LICENSE 
b/pulsar-sql/presto-distribution/LICENSE
index 29bde2dada2..8f67f2f7ef4 100644
--- a/pulsar-sql/presto-distribution/LICENSE
+++ b/pulsar-sql/presto-distribution/LICENSE
@@ -590,7 +590,7 @@ Creative Commons Attribution License
 
 Bouncy Castle License
  * Bouncy Castle -- licenses/LICENSE-bouncycastle.txt
-   - bcpkix-jdk15on-1.69.jar
-   - bcprov-ext-jdk15on-1.69.jar
-   - bcprov-jdk15on-1.69.jar
-   - bcutil-jdk15on-1.69.jar
+   - bcpkix-jdk18on-1.75.jar
+   - bcprov-ext-jdk18on-1.75.jar
+   - bcprov-jdk18on-1.75.jar
+   - bcutil-jdk18on-1.75.jar
diff --git a/tests/integration/pom.xml b/tests/integration/pom.xml
index c5acf24ab43..3600ead12f1 100644
--- a/tests/integration/pom.xml
+++ b/tests/integration/pom.xml
@@ -126,6 +126,11 @@
       <artifactId>docker-java-core</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.bouncycastle</groupId>
+      <artifactId>bcpkix-jdk18on</artifactId>
+      <scope>test</scope>
+    </dependency>
 
     <dependency>
       <groupId>org.apache.pulsar</groupId>
diff --git a/tiered-storage/file-system/pom.xml 
b/tiered-storage/file-system/pom.xml
index cf482f43a4e..5b4474c977b 100644
--- a/tiered-storage/file-system/pom.xml
+++ b/tiered-storage/file-system/pom.xml
@@ -110,13 +110,23 @@
             <version>${hdfs-offload-version3}</version>
             <scope>test</scope>
             <exclusions>
-              <exclusion>
-                <groupId>io.netty</groupId>
-                <artifactId>netty-all</artifactId>
-              </exclusion>
+                <exclusion>
+                    <groupId>io.netty</groupId>
+                    <artifactId>netty-all</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.bouncycastle</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
             </exclusions>
         </dependency>
 
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcpkix-jdk18on</artifactId>
+            <scope>test</scope>
+        </dependency>
+
         <dependency>
           <groupId>io.netty</groupId>
           <artifactId>netty-codec-http</artifactId>

Reply via email to