[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#935746: buster-pu: package nss/2:3.42.1-1+deb10u1



Package: release.debian.org
Severity: normal
Tags: buster
User: release.debian.org@packages.debian.org
Usertags: pu

The NSS update below fixes a few non-severe security issues. I've been
running this version with Firefox on Buster (which uses the system
copy of NSS unlike Firefox in Stretch) without any issues.

Cheers,
        Moritz

diff -Nru nss-3.42.1/debian/changelog nss-3.42.1/debian/changelog
--- nss-3.42.1/debian/changelog	2019-02-13 05:19:39.000000000 +0100
+++ nss-3.42.1/debian/changelog	2019-08-23 00:03:22.000000000 +0200
@@ -1,3 +1,10 @@
+nss (2:3.42.1-1+deb10u1) buster; urgency=medium
+
+  * Fixes for CVE-2019-11719, CVE-2019-11727 and CVE-2019-11729 (in unstable
+    these were addressed via the 2:3.45-1 upload to unstable)
+
+ -- Moritz Mühlenhoff <jmm@debian.org>  Fri, 23 Aug 2019 00:03:22 +0200
+
 nss (2:3.42.1-1) unstable; urgency=medium
 
   * New upstream release.
diff -Nru nss-3.42.1/debian/patches/CVE-2019-11719_CVE-2019-11727_CVE-2019-11729.patch nss-3.42.1/debian/patches/CVE-2019-11719_CVE-2019-11727_CVE-2019-11729.patch
--- nss-3.42.1/debian/patches/CVE-2019-11719_CVE-2019-11727_CVE-2019-11729.patch	1970-01-01 01:00:00.000000000 +0100
+++ nss-3.42.1/debian/patches/CVE-2019-11719_CVE-2019-11727_CVE-2019-11729.patch	2019-08-23 00:03:22.000000000 +0200
@@ -0,0 +1,410 @@
+Fixes for CVE-2019-11719, CVE-2019-11727 and CVE-2019-11729 which are based on
+the following upstream commits:
+
+https://hg.mozilla.org/projects/nss/rev/6cfb54d262d030783137aa6478b45ecb3cbfc624
+https://hg.mozilla.org/projects/nss/rev/0a4e8b72a92e144663c2f35d3836f7828cfc97f2
+https://hg.mozilla.org/projects/nss/rev/dabfe1160c682b4d1d19c5a7a13ab3828bb9d37f
+https://hg.mozilla.org/projects/nss/rev/ebc93d6daeaa9001d31fd18b5199779da99ae9aa
+
+--- nss-3.42.1.orig/nss/gtests/pk11_gtest/pk11_curve25519_unittest.cc
++++ nss-3.42.1/nss/gtests/pk11_gtest/pk11_curve25519_unittest.cc
+@@ -40,6 +40,9 @@ class Pkcs11Curve25519Test
+ 
+     ScopedCERTSubjectPublicKeyInfo certSpki(
+         SECKEY_DecodeDERSubjectPublicKeyInfo(&spkiItem));
++    if (!expect_success && !certSpki) {
++      return;
++    }
+     ASSERT_TRUE(certSpki);
+ 
+     ScopedSECKEYPublicKey pubKey(SECKEY_ExtractPublicKey(certSpki.get()));
+--- nss-3.42.1.orig/nss/gtests/ssl_gtest/ssl_auth_unittest.cc
++++ nss-3.42.1/nss/gtests/ssl_gtest/ssl_auth_unittest.cc
+@@ -342,6 +342,44 @@ TEST_P(TlsConnectTls12, ClientAuthIncons
+   ConnectExpectAlert(server_, kTlsAlertIllegalParameter);
+ }
+ 
++TEST_P(TlsConnectTls13, ClientAuthPkcs1SignatureScheme) {
++  static const SSLSignatureScheme kSignatureScheme[] = {
++      ssl_sig_rsa_pkcs1_sha256, ssl_sig_rsa_pss_rsae_sha256};
++
++  Reset(TlsAgent::kServerRsa, "rsa");
++  client_->SetSignatureSchemes(kSignatureScheme,
++                               PR_ARRAY_SIZE(kSignatureScheme));
++  server_->SetSignatureSchemes(kSignatureScheme,
++                               PR_ARRAY_SIZE(kSignatureScheme));
++  client_->SetupClientAuth();
++  server_->RequestClientAuth(true);
++
++  auto capture_cert_verify = MakeTlsFilter<TlsHandshakeRecorder>(
++      client_, kTlsHandshakeCertificateVerify);
++  capture_cert_verify->EnableDecryption();
++
++  Connect();
++  CheckSigScheme(capture_cert_verify, 0, server_, ssl_sig_rsa_pss_rsae_sha256,
++                 1024);
++}
++
++TEST_P(TlsConnectTls13, ClientAuthPkcs1SignatureSchemeOnly) {
++  static const SSLSignatureScheme kSignatureScheme[] = {
++      ssl_sig_rsa_pkcs1_sha256};
++
++  Reset(TlsAgent::kServerRsa, "rsa");
++  client_->SetSignatureSchemes(kSignatureScheme,
++                               PR_ARRAY_SIZE(kSignatureScheme));
++  server_->SetSignatureSchemes(kSignatureScheme,
++                               PR_ARRAY_SIZE(kSignatureScheme));
++  client_->SetupClientAuth();
++  server_->RequestClientAuth(true);
++
++  ConnectExpectAlert(server_, kTlsAlertHandshakeFailure);
++  server_->CheckErrorCode(SSL_ERROR_UNSUPPORTED_SIGNATURE_ALGORITHM);
++  client_->CheckErrorCode(SSL_ERROR_NO_CYPHER_OVERLAP);
++}
++
+ class TlsZeroCertificateRequestSigAlgsFilter : public TlsHandshakeFilter {
+  public:
+   TlsZeroCertificateRequestSigAlgsFilter(const std::shared_ptr<TlsAgent>& a)
+@@ -571,7 +609,7 @@ TEST_P(TlsConnectTls13, InconsistentSign
+   client_->CheckErrorCode(SSL_ERROR_INCORRECT_SIGNATURE_ALGORITHM);
+ }
+ 
+-TEST_P(TlsConnectTls12Plus, RequestClientAuthWithSha384) {
++TEST_P(TlsConnectTls12, RequestClientAuthWithSha384) {
+   server_->SetSignatureSchemes(kSignatureSchemeRsaSha384,
+                                PR_ARRAY_SIZE(kSignatureSchemeRsaSha384));
+   server_->RequestClientAuth(false);
+@@ -1033,12 +1071,21 @@ TEST_P(TlsSignatureSchemeConfiguration,
+ INSTANTIATE_TEST_CASE_P(
+     SignatureSchemeRsa, TlsSignatureSchemeConfiguration,
+     ::testing::Combine(
+-        TlsConnectTestBase::kTlsVariantsAll, TlsConnectTestBase::kTlsV12Plus,
++        TlsConnectTestBase::kTlsVariantsAll, TlsConnectTestBase::kTlsV12,
+         ::testing::Values(TlsAgent::kServerRsaSign),
+         ::testing::Values(ssl_auth_rsa_sign),
+         ::testing::Values(ssl_sig_rsa_pkcs1_sha256, ssl_sig_rsa_pkcs1_sha384,
+                           ssl_sig_rsa_pkcs1_sha512, ssl_sig_rsa_pss_rsae_sha256,
+                           ssl_sig_rsa_pss_rsae_sha384)));
++// RSASSA-PKCS1-v1_5 is not allowed to be used in TLS 1.3
++INSTANTIATE_TEST_CASE_P(
++    SignatureSchemeRsaTls13, TlsSignatureSchemeConfiguration,
++    ::testing::Combine(TlsConnectTestBase::kTlsVariantsAll,
++                       TlsConnectTestBase::kTlsV13,
++                       ::testing::Values(TlsAgent::kServerRsaSign),
++                       ::testing::Values(ssl_auth_rsa_sign),
++                       ::testing::Values(ssl_sig_rsa_pss_rsae_sha256,
++                                         ssl_sig_rsa_pss_rsae_sha384)));
+ // PSS with SHA-512 needs a bigger key to work.
+ INSTANTIATE_TEST_CASE_P(
+     SignatureSchemeBigRsa, TlsSignatureSchemeConfiguration,
+--- nss-3.42.1.orig/nss/gtests/ssl_gtest/ssl_ciphersuite_unittest.cc
++++ nss-3.42.1/nss/gtests/ssl_gtest/ssl_ciphersuite_unittest.cc
+@@ -68,12 +68,6 @@ class TlsCipherSuiteTestBase : public Tl
+   virtual void SetupCertificate() {
+     if (version_ >= SSL_LIBRARY_VERSION_TLS_1_3) {
+       switch (sig_scheme_) {
+-        case ssl_sig_rsa_pkcs1_sha256:
+-        case ssl_sig_rsa_pkcs1_sha384:
+-        case ssl_sig_rsa_pkcs1_sha512:
+-          Reset(TlsAgent::kServerRsaSign);
+-          auth_type_ = ssl_auth_rsa_sign;
+-          break;
+         case ssl_sig_rsa_pss_rsae_sha256:
+         case ssl_sig_rsa_pss_rsae_sha384:
+           Reset(TlsAgent::kServerRsaSign);
+@@ -330,6 +324,12 @@ static SSLSignatureScheme kSignatureSche
+     ssl_sig_rsa_pss_pss_sha256,     ssl_sig_rsa_pss_pss_sha384,
+     ssl_sig_rsa_pss_pss_sha512};
+ 
++static SSLSignatureScheme kSignatureSchemesParamsArrTls13[] = {
++    ssl_sig_ecdsa_secp256r1_sha256, ssl_sig_ecdsa_secp384r1_sha384,
++    ssl_sig_rsa_pss_rsae_sha256,    ssl_sig_rsa_pss_rsae_sha384,
++    ssl_sig_rsa_pss_rsae_sha512,    ssl_sig_rsa_pss_pss_sha256,
++    ssl_sig_rsa_pss_pss_sha384,     ssl_sig_rsa_pss_pss_sha512};
++
+ INSTANTIATE_CIPHER_TEST_P(RC4, Stream, V10ToV12, kDummyNamedGroupParams,
+                           kDummySignatureSchemesParams,
+                           TLS_RSA_WITH_RC4_128_SHA,
+@@ -394,7 +394,7 @@ INSTANTIATE_CIPHER_TEST_P(
+ #ifndef NSS_DISABLE_TLS_1_3
+ INSTANTIATE_CIPHER_TEST_P(TLS13, All, V13,
+                           ::testing::ValuesIn(kFasterDHEGroups),
+-                          ::testing::ValuesIn(kSignatureSchemesParamsArr),
++                          ::testing::ValuesIn(kSignatureSchemesParamsArrTls13),
+                           TLS_AES_128_GCM_SHA256, TLS_CHACHA20_POLY1305_SHA256,
+                           TLS_AES_256_GCM_SHA384);
+ INSTANTIATE_CIPHER_TEST_P(TLS13AllGroups, All, V13,
+--- nss-3.42.1.orig/nss/gtests/ssl_gtest/ssl_extension_unittest.cc
++++ nss-3.42.1/nss/gtests/ssl_gtest/ssl_extension_unittest.cc
+@@ -436,14 +436,14 @@ TEST_P(TlsExtensionTest12Plus, Signature
+ }
+ 
+ TEST_F(TlsExtensionTest13Stream, SignatureAlgorithmsPrecedingGarbage) {
+-  // 31 unknown signature algorithms followed by sha-256, rsa
++  // 31 unknown signature algorithms followed by sha-256, rsa-pss
+   const uint8_t val[] = {
+       0x00, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+       0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+-      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x01};
++      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x08, 0x04};
+   DataBuffer extension(val, sizeof(val));
+   MakeTlsFilter<TlsExtensionReplacer>(client_, ssl_signature_algorithms_xtn,
+                                       extension);
+--- nss-3.42.1.orig/nss/lib/cryptohi/seckey.c
++++ nss-3.42.1/nss/lib/cryptohi/seckey.c
+@@ -639,6 +639,11 @@ seckey_ExtractPublicKey(const CERTSubjec
+                     return pubk;
+                 break;
+             case SEC_OID_ANSIX962_EC_PUBLIC_KEY:
++                /* A basic sanity check on inputs. */
++                if (spki->algorithm.parameters.len == 0 || newOs.len == 0) {
++                    PORT_SetError(SEC_ERROR_INPUT_LEN);
++                    break;
++                }
+                 pubk->keyType = ecKey;
+                 pubk->u.ec.size = 0;
+ 
+--- nss-3.42.1.orig/nss/lib/freebl/dh.c
++++ nss-3.42.1/nss/lib/freebl/dh.c
+@@ -210,7 +210,8 @@ DH_Derive(SECItem *publicValue,
+     unsigned int len = 0;
+     unsigned int nb;
+     unsigned char *secret = NULL;
+-    if (!publicValue || !prime || !privateValue || !derivedSecret) {
++    if (!publicValue || !publicValue->len || !prime || !prime->len ||
++        !privateValue || !privateValue->len || !derivedSecret) {
+         PORT_SetError(SEC_ERROR_INVALID_ARGS);
+         return SECFailure;
+     }
+--- nss-3.42.1.orig/nss/lib/freebl/ec.c
++++ nss-3.42.1/nss/lib/freebl/ec.c
+@@ -202,8 +202,8 @@ ec_NewKey(ECParams *ecParams, ECPrivateK
+ #endif
+     MP_DIGITS(&k) = 0;
+ 
+-    if (!ecParams || !privKey || !privKeyBytes || (privKeyLen < 0) ||
+-        !ecParams->name) {
++    if (!ecParams || ecParams->name == ECCurve_noName ||
++        !privKey || !privKeyBytes || privKeyLen <= 0) {
+         PORT_SetError(SEC_ERROR_INVALID_ARGS);
+         return SECFailure;
+     }
+@@ -391,7 +391,7 @@ EC_NewKey(ECParams *ecParams, ECPrivateK
+     int len;
+     unsigned char *privKeyBytes = NULL;
+ 
+-    if (!ecParams) {
++    if (!ecParams || ecParams->name == ECCurve_noName || !privKey) {
+         PORT_SetError(SEC_ERROR_INVALID_ARGS);
+         return SECFailure;
+     }
+@@ -430,7 +430,8 @@ EC_ValidatePublicKey(ECParams *ecParams,
+     mp_err err = MP_OKAY;
+     int len;
+ 
+-    if (!ecParams || !publicValue || !ecParams->name) {
++    if (!ecParams || ecParams->name == ECCurve_noName ||
++        !publicValue || !publicValue->len) {
+         PORT_SetError(SEC_ERROR_INVALID_ARGS);
+         return SECFailure;
+     }
+@@ -536,8 +537,9 @@ ECDH_Derive(SECItem *publicValue,
+     int i;
+ #endif
+ 
+-    if (!publicValue || !ecParams || !privateValue || !derivedSecret ||
+-        !ecParams->name) {
++    if (!publicValue || !publicValue->len ||
++        !ecParams || ecParams->name == ECCurve_noName ||
++        !privateValue || !privateValue->len || !derivedSecret) {
+         PORT_SetError(SEC_ERROR_INVALID_ARGS);
+         return SECFailure;
+     }
+--- nss-3.42.1.orig/nss/lib/freebl/ecl/ecp_25519.c
++++ nss-3.42.1/nss/lib/freebl/ecl/ecp_25519.c
+@@ -114,6 +114,9 @@ ec_Curve25519_pt_mul(SECItem *X, SECItem
+         }
+         px = P->data;
+     }
++    if (k->len != 32) {
++        return SECFailure;
++    }
+ 
+     SECStatus rv = ec_Curve25519_mul(X->data, k->data, px);
+     if (NSS_SecureMemcmpZero(X->data, X->len) == 0) {
+--- nss-3.42.1.orig/nss/lib/pk11wrap/pk11akey.c
++++ nss-3.42.1/nss/lib/pk11wrap/pk11akey.c
+@@ -190,7 +190,6 @@ PK11_ImportPublicKey(PK11SlotInfo *slot,
+                 attrs++;
+                 PK11_SETATTRS(attrs, CKA_DERIVE, &cktrue, sizeof(CK_BBOOL));
+                 attrs++;
+-                signedattr = attrs;
+                 PK11_SETATTRS(attrs, CKA_EC_PARAMS,
+                               pubKey->u.ec.DEREncodedParams.data,
+                               pubKey->u.ec.DEREncodedParams.len);
+@@ -222,12 +221,14 @@ PK11_ImportPublicKey(PK11SlotInfo *slot,
+                 PORT_SetError(SEC_ERROR_BAD_KEY);
+                 return CK_INVALID_HANDLE;
+         }
+-
+         templateCount = attrs - theTemplate;
+-        signedcount = attrs - signedattr;
+         PORT_Assert(templateCount <= (sizeof(theTemplate) / sizeof(CK_ATTRIBUTE)));
+-        for (attrs = signedattr; signedcount; attrs++, signedcount--) {
+-            pk11_SignedToUnsigned(attrs);
++        if (pubKey->keyType != ecKey) {
++            PORT_Assert(signedattr);
++            signedcount = attrs - signedattr;
++            for (attrs = signedattr; signedcount; attrs++, signedcount--) {
++                pk11_SignedToUnsigned(attrs);
++            }
+         }
+         rv = PK11_CreateNewObject(slot, CK_INVALID_SESSION, theTemplate,
+                                   templateCount, isToken, &objectID);
+@@ -1074,9 +1075,13 @@ pk11_loadPrivKeyWithFlags(PK11SlotInfo *
+                                         &cktrue, &ckfalse);
+ 
+     /* Not everyone can handle zero padded key values, give
+-      * them the raw data as unsigned */
+-    for (ap = attrs; extra_count; ap++, extra_count--) {
+-        pk11_SignedToUnsigned(ap);
++     * them the raw data as unsigned. The exception is EC,
++     * where the values are encoded or zero-preserving
++     * per-RFC5915 */
++    if (privKey->keyType != ecKey) {
++        for (ap = attrs; extra_count; ap++, extra_count--) {
++            pk11_SignedToUnsigned(ap);
++        }
+     }
+ 
+     /* now Store the puppies */
+--- nss-3.42.1.orig/nss/lib/pk11wrap/pk11cert.c
++++ nss-3.42.1/nss/lib/pk11wrap/pk11cert.c
+@@ -184,7 +184,9 @@ PK11_IsUserCert(PK11SlotInfo *slot, CERT
+             SECKEY_DestroyPublicKey(pubKey);
+             return PR_FALSE;
+         }
+-        pk11_SignedToUnsigned(&theTemplate);
++        if (pubKey->keyType != ecKey) {
++            pk11_SignedToUnsigned(&theTemplate);
++        }
+         if (pk11_FindObjectByTemplate(slot, &theTemplate, 1) != CK_INVALID_HANDLE) {
+             SECKEY_DestroyPublicKey(pubKey);
+             return PR_TRUE;
+--- nss-3.42.1.orig/nss/lib/pk11wrap/pk11pk12.c
++++ nss-3.42.1/nss/lib/pk11wrap/pk11pk12.c
+@@ -505,7 +505,7 @@ PK11_ImportAndReturnPrivateKey(PK11SlotI
+             }
+             PK11_SETATTRS(attrs, CKA_ID, ck_id->data, ck_id->len);
+             attrs++;
+-            signedattr = attrs;
++            /* No signed attrs for EC */
+             /* curveOID always is a copy of AlgorithmID.parameters. */
+             PK11_SETATTRS(attrs, CKA_EC_PARAMS, lpk->u.ec.curveOID.data,
+                           lpk->u.ec.curveOID.len);
+@@ -523,11 +523,12 @@ PK11_ImportAndReturnPrivateKey(PK11SlotI
+     }
+     templateCount = attrs - theTemplate;
+     PORT_Assert(templateCount <= sizeof(theTemplate) / sizeof(CK_ATTRIBUTE));
+-    PORT_Assert(signedattr != NULL);
+-    signedcount = attrs - signedattr;
+-
+-    for (ap = signedattr; signedcount; ap++, signedcount--) {
+-        pk11_SignedToUnsigned(ap);
++    if (lpk->keyType != ecKey) {
++        PORT_Assert(signedattr);
++        signedcount = attrs - signedattr;
++        for (ap = signedattr; signedcount; ap++, signedcount--) {
++            pk11_SignedToUnsigned(ap);
++        }
+     }
+ 
+     rv = PK11_CreateNewObject(slot, CK_INVALID_SESSION,
+--- nss-3.42.1.orig/nss/lib/softoken/legacydb/lgattr.c
++++ nss-3.42.1/nss/lib/softoken/legacydb/lgattr.c
+@@ -950,9 +950,9 @@ lg_FindECPrivateKeyAttribute(NSSLOWKEYPr
+         case CKA_UNWRAP:
+             return LG_CLONE_ATTR(attribute, type, lg_StaticFalseAttr);
+         case CKA_VALUE:
+-            return lg_CopyPrivAttrSigned(attribute, type,
+-                                         key->u.ec.privateValue.data,
+-                                         key->u.ec.privateValue.len, sdbpw);
++            return lg_CopyPrivAttribute(attribute, type,
++                                        key->u.ec.privateValue.data,
++                                        key->u.ec.privateValue.len, sdbpw);
+         case CKA_EC_PARAMS:
+             return lg_CopyAttributeSigned(attribute, type,
+                                           key->u.ec.ecParams.DEREncoding.data,
+--- nss-3.42.1.orig/nss/lib/softoken/pkcs11c.c
++++ nss-3.42.1/nss/lib/softoken/pkcs11c.c
+@@ -7568,7 +7568,7 @@ NSC_DeriveKey(CK_SESSION_HANDLE hSession
+ 
+             rv = ECDH_Derive(&ecPoint, &privKey->u.ec.ecParams, &ecScalar,
+                              withCofactor, &tmp);
+-            PORT_Free(ecScalar.data);
++            PORT_ZFree(ecScalar.data, ecScalar.len);
+             ecScalar.data = NULL;
+             if (privKey != sourceKey->objectInfo) {
+                 nsslowkey_DestroyPrivateKey(privKey);
+--- nss-3.42.1.orig/nss/lib/ssl/ssl3con.c
++++ nss-3.42.1/nss/lib/ssl/ssl3con.c
+@@ -64,6 +64,7 @@ static SECStatus ssl3_FlushHandshakeMess
+ static CK_MECHANISM_TYPE ssl3_GetHashMechanismByHashType(SSLHashType hashType);
+ static CK_MECHANISM_TYPE ssl3_GetMgfMechanismByHashType(SSLHashType hash);
+ PRBool ssl_IsRsaPssSignatureScheme(SSLSignatureScheme scheme);
++PRBool ssl_IsRsaPkcs1SignatureScheme(SSLSignatureScheme scheme);
+ 
+ const PRUint8 ssl_hello_retry_random[] = {
+     0xCF, 0x21, 0xAD, 0x74, 0xE5, 0x9A, 0x61, 0x11,
+@@ -4060,6 +4061,9 @@ ssl_SignatureSchemeValid(SSLSignatureSch
+         if (ssl_SignatureSchemeToHashType(scheme) == ssl_hash_sha1) {
+             return PR_FALSE;
+         }
++        if (ssl_IsRsaPkcs1SignatureScheme(scheme)) {
++            return PR_FALSE;
++        }
+         /* With TLS 1.3, EC keys should have been selected based on calling
+          * ssl_SignatureSchemeFromSpki(), reject them otherwise. */
+         return spkiOid != SEC_OID_ANSIX962_EC_PUBLIC_KEY;
+@@ -4289,6 +4293,22 @@ ssl_IsSupportedSignatureScheme(SSLSignat
+             return PR_FALSE;
+     }
+     return PR_FALSE;
++}
++
++PRBool
++ssl_IsRsaPkcs1SignatureScheme(SSLSignatureScheme scheme)
++{
++    switch (scheme) {
++        case ssl_sig_rsa_pkcs1_sha256:
++        case ssl_sig_rsa_pkcs1_sha384:
++        case ssl_sig_rsa_pkcs1_sha512:
++        case ssl_sig_rsa_pkcs1_sha1:
++            return PR_TRUE;
++
++        default:
++            return PR_FALSE;
++    }
++    return PR_FALSE;
+ }
+ 
+ PRBool
+--- nss-3.42.1.orig/nss/lib/util/quickder.c
++++ nss-3.42.1/nss/lib/util/quickder.c
+@@ -757,6 +757,13 @@ DecodeItem(void* dest,
+                         }
+ 
+                         case SEC_ASN1_BIT_STRING: {
++                            /* Can't be 8 or more spare bits, or any spare bits
++			     * if there are no octets. */
++                            if (temp.data[0] >= 8 || (temp.data[0] > 0 && temp.len == 1)) {
++                                PORT_SetError(SEC_ERROR_BAD_DER);
++                                rv = SECFailure;
++                                break;
++                            }
+                             /* change the length in the SECItem to be the number
+                                of bits */
+                             temp.len = (temp.len - 1) * 8 - (temp.data[0] & 0x7);
diff -Nru nss-3.42.1/debian/patches/series nss-3.42.1/debian/patches/series
--- nss-3.42.1/debian/patches/series	2018-06-25 00:24:52.000000000 +0200
+++ nss-3.42.1/debian/patches/series	2019-08-23 00:03:22.000000000 +0200
@@ -2,3 +2,4 @@
 80_security_tools.patch
 85_security_load.patch
 38_hppa.patch
+CVE-2019-11719_CVE-2019-11727_CVE-2019-11729.patch

Reply to: