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

Bug#935746: marked as done (buster-pu: package nss/2:3.42.1-1+deb10u1)



Your message dated Sat, 07 Sep 2019 14:34:49 +0100
with message-id <[🔎] f49e2985d8466065c49c03185c24465a32228fb5.camel@adam-barratt.org.uk>
and subject line Closing bugs for fixes including in 10.1 point release
has caused the Debian Bug report #935746,
regarding buster-pu: package nss/2:3.42.1-1+deb10u1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
935746: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=935746
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
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

--- End Message ---
--- Begin Message ---
Version: 10.1

Hi,

The fixes referenced by each of these bugs were included in today's
buster point release.

Regards,

Adam

--- End Message ---

Reply to: