[CVE-2018-1000180, CVE-2018-1000613] Upgrade Bouncycastle to 1.60
This upgrade fixes CVE-2018-1000180 [1]:
Bouncy Castle BC 1.54 - 1.59, BC-FJA 1.0.0, BC-FJA 1.0.1 and earlier
have a flaw in the Low-level interface to RSA key pair generator,
specifically RSA Key Pairs generated in low-level API with added
certainty may have less M-R tests than expected. This appears to be
fixed in versions BC 1.60 beta 4 and later, BC-FJA 1.0.2 and later.
and CVE-2018-1000613 [2]:
Bouncy Castle Java Cryptography APIs version prior to version 1.60
contains a CWE-470: Use of Externally-Controlled Input to Select
Classes or Code ('Unsafe Reflection') vulnerability in XMSS/XMSS^MT
private key deserialization that can result in Deserializing an
XMSS/XMSS^MT private key can result in the execution of unexpected
code. This attack appear to be exploitable via a handcrafted private
key can include references to unexpected classes which will be picked
up from the class path for the executing application. This
vulnerability appears to have been fixed in 1.60 and later.
Bouncycastle 1.57 introduced generics in its APIs. Remove the casts
and @SuppressWarnings("unchecked") annotations that are not necessary
any more.
[1] https://nvd.nist.gov/vuln/detail/CVE-2018-1000180
[2] https://nvd.nist.gov/vuln/detail/CVE-2018-1000613
Bug: Issue 9952
Change-Id: I9b25b1568ac7da555de96d82c597b3dff47966c6
This commit is contained in:
@@ -585,24 +585,25 @@ maven_jar(
|
||||
sha1 = "bb562ee73f740bb6b2bf7955f97be6b870d9e9f0",
|
||||
)
|
||||
|
||||
BC_VERS = "1.56"
|
||||
# When updating Bouncy Castle, also update it in bazlets.
|
||||
BC_VERS = "1.60"
|
||||
|
||||
maven_jar(
|
||||
name = "bcprov",
|
||||
artifact = "org.bouncycastle:bcprov-jdk15on:" + BC_VERS,
|
||||
sha1 = "a153c6f9744a3e9dd6feab5e210e1c9861362ec7",
|
||||
sha1 = "bd47ad3bd14b8e82595c7adaa143501e60842a84",
|
||||
)
|
||||
|
||||
maven_jar(
|
||||
name = "bcpg",
|
||||
artifact = "org.bouncycastle:bcpg-jdk15on:" + BC_VERS,
|
||||
sha1 = "9c3f2e7072c8cc1152079b5c25291a9f462631f1",
|
||||
sha1 = "13c7a199c484127daad298996e95818478431a2c",
|
||||
)
|
||||
|
||||
maven_jar(
|
||||
name = "bcpkix",
|
||||
artifact = "org.bouncycastle:bcpkix-jdk15on:" + BC_VERS,
|
||||
sha1 = "4648af70268b6fdb24674fb1fd7c1fcc73db1231",
|
||||
sha1 = "d0c46320fbc07be3a24eb13a56cee4e3d38e0c75",
|
||||
)
|
||||
|
||||
# TODO(davido): Remove exlusion of file system provider, when this issue is fixed:
|
||||
|
||||
@@ -963,7 +963,6 @@ public class AccountIT extends AbstractDaemonTest {
|
||||
assertThat(actual.fingerprint)
|
||||
.named(id)
|
||||
.isEqualTo(Fingerprint.toString(expected.getPublicKey().getFingerprint()));
|
||||
@SuppressWarnings("unchecked")
|
||||
List<String> userIds = ImmutableList.copyOf(expected.getPublicKey().getUserIDs());
|
||||
assertThat(actual.userIds).named(id).containsExactlyElementsIn(userIds);
|
||||
assertThat(actual.key).named(id).startsWith("-----BEGIN PGP PUBLIC KEY BLOCK-----\n");
|
||||
|
||||
@@ -176,7 +176,6 @@ public class GerritPublicKeyChecker extends PublicKeyChecker {
|
||||
|
||||
private boolean hasAllowedUserId(PGPPublicKey key, Set<String> allowedUserIds)
|
||||
throws PGPException {
|
||||
@SuppressWarnings("unchecked")
|
||||
Iterator<String> userIds = key.getUserIDs();
|
||||
while (userIds.hasNext()) {
|
||||
String userId = userIds.next();
|
||||
|
||||
@@ -381,7 +381,6 @@ public class PublicKeyChecker {
|
||||
}
|
||||
|
||||
List<CheckResult> signerResults = new ArrayList<>();
|
||||
@SuppressWarnings("unchecked")
|
||||
Iterator<String> userIds = key.getUserIDs();
|
||||
while (userIds.hasNext()) {
|
||||
String userId = userIds.next();
|
||||
|
||||
@@ -398,7 +398,6 @@ public class PublicKeyStore implements AutoCloseable {
|
||||
}
|
||||
|
||||
public static String keyToString(PGPPublicKey key) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Iterator<String> it = key.getUserIDs();
|
||||
return String.format(
|
||||
"%s %s(%s)",
|
||||
|
||||
@@ -230,7 +230,6 @@ public class GpgKeys implements ChildCollection<AccountResource, GpgKey> {
|
||||
if (key != null) {
|
||||
info.id = PublicKeyStore.keyIdToString(key.getKeyID());
|
||||
info.fingerprint = Fingerprint.toString(key.getFingerprint());
|
||||
@SuppressWarnings("unchecked")
|
||||
Iterator<String> userIds = key.getUserIDs();
|
||||
info.userIds = ImmutableList.copyOf(userIds);
|
||||
|
||||
|
||||
@@ -373,7 +373,7 @@ public class GerritPublicKeyCheckerTest {
|
||||
|
||||
PGPPublicKeyRing keyRingB = keyB().getPublicKeyRing();
|
||||
PGPPublicKey keyB = keyRingB.getPublicKey();
|
||||
keyB = PGPPublicKey.removeCertification(keyB, (String) keyB.getUserIDs().next());
|
||||
keyB = PGPPublicKey.removeCertification(keyB, keyB.getUserIDs().next());
|
||||
keyRingB = PGPPublicKeyRing.insertPublicKey(keyRingB, keyB);
|
||||
add(keyRingB, addUser("userB"));
|
||||
|
||||
@@ -391,8 +391,7 @@ public class GerritPublicKeyCheckerTest {
|
||||
List<ExternalId> newExtIds = new ArrayList<>(2);
|
||||
newExtIds.add(ExternalId.create(toExtIdKey(kr.getPublicKey()), id));
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
String userId = (String) Iterators.getOnlyElement(kr.getPublicKey().getUserIDs(), null);
|
||||
String userId = Iterators.getOnlyElement(kr.getPublicKey().getUserIDs(), null);
|
||||
if (userId != null) {
|
||||
String email = PushCertificateIdent.parse(userId).getEmailAddress();
|
||||
assertThat(email).contains("@");
|
||||
|
||||
@@ -236,7 +236,6 @@ public class PublicKeyStoreTest {
|
||||
|
||||
private void assertUserIds(PGPPublicKeyRing keyRing, String... expected) throws Exception {
|
||||
List<String> actual = new ArrayList<>();
|
||||
@SuppressWarnings("unchecked")
|
||||
Iterator<String> userIds =
|
||||
store.get(keyRing.getPublicKey().getKeyID()).iterator().next().getPublicKey().getUserIDs();
|
||||
while (userIds.hasNext()) {
|
||||
|
||||
@@ -77,7 +77,7 @@ public class TestKey {
|
||||
}
|
||||
|
||||
public String getFirstUserId() {
|
||||
return (String) getPublicKey().getUserIDs().next();
|
||||
return getPublicKey().getUserIDs().next();
|
||||
}
|
||||
|
||||
public PGPPrivateKey getPrivateKey() throws PGPException {
|
||||
|
||||
Reference in New Issue
Block a user