From a7d47931c47757d94597f084b9502739f1e57fda Mon Sep 17 00:00:00 2001 From: Dennis Jackson Date: Fri, 3 Oct 2025 20:08:40 +0000 Subject: [PATCH] Bug 1992388 - Release NSS 3.112.2 for ESR. r=jschanck a=RyanVM. UPGRADE_NSS_RELEASE Differential Revision: https://phabricator.services.mozilla.com/D267406 --- security/nss/doc/rst/releases/index.rst | 34 ++------ security/nss/doc/rst/releases/nss_3_112_2.rst | 72 ++++++++++++++++ security/nss/gtests/der_gtest/der_gtest.gyp | 1 + .../der_gtest/secasn1decode_unittest.cc | 86 +++++++++++++++++++ security/nss/lib/nss/nss.h | 4 +- security/nss/lib/pkcs12/p12d.c | 1 + security/nss/lib/softoken/softkver.h | 4 +- security/nss/lib/util/nssutil.h | 4 +- security/nss/lib/util/secasn1d.c | 21 +---- security/nss/moz.yaml | 4 +- 10 files changed, 179 insertions(+), 52 deletions(-) create mode 100644 security/nss/doc/rst/releases/nss_3_112_2.rst create mode 100644 security/nss/gtests/der_gtest/secasn1decode_unittest.cc diff --git a/security/nss/doc/rst/releases/index.rst b/security/nss/doc/rst/releases/index.rst index aeb3e079a673..31e44f9c7fbb 100644 --- a/security/nss/doc/rst/releases/index.rst +++ b/security/nss/doc/rst/releases/index.rst @@ -1,19 +1,20 @@ .. _mozilla_projects_nss_releases: -Releases -======== +Release Notes +============= .. toctree:: :maxdepth: 0 :glob: :hidden: + nss_3_112_2.rst + nss_3_112_1.rst nss_3_112.rst nss_3_111.rst nss_3_110.rst nss_3_109.rst nss_3_108.rst - nss_3_101_3.rst nss_3_107.rst nss_3_106.rst nss_3_105.rst @@ -21,6 +22,8 @@ Releases nss_3_103.rst nss_3_102_1.rst nss_3_102.rst + nss_3_101_4.rst + nss_3_101_3.rst nss_3_101_2.rst nss_3_101_1.rst nss_3_101.rst @@ -88,27 +91,6 @@ Releases **NSS 3.112** is the latest version of NSS. Complete release notes are available here: :ref:`mozilla_projects_nss_nss_3_112_release_notes` - **NSS 3.101.3 (ESR)** is the latest ESR version of NSS. - Complete release notes are available here: :ref:`mozilla_projects_nss_nss_3_101_3_release_notes` + **NSS 3.112.2 (ESR)** is the latest ESR version of NSS. + Complete release notes are available here: :ref:`mozilla_projects_nss_nss_3_112_2_release_notes` -.. container:: - - Changes in 3.112 included in this release: - - - Bug 1963792 - Fix alias for mac workers on try. - - Bug 1966786 - ensure all options can be configured with SSL_OptionSet and SSL_OptionSetDefault. - - Bug 1931930 - ABI/API break in ssl certificate processing - - Bug 1955971 - remove unnecessary assertion in sec_asn1d_init_state_based_on_template. - - Bug 1965754 - update taskgraph to v14.2.1. - - Bug 1964358 - Workflow for automation of the release on GitHub when pushing a tag - - Bug 1952860 - fix faulty assertions in SEC_ASN1DecoderUpdate - - Bug 1934877 - Renegotiations should use a fresh ECH GREASE buffer. - - Bug 1951396 - update taskgraph to v14.1.1 - - Bug 1962503 - Partial fix for ACVP build CI job - - Bug 1961827 - Initialize find in sftk_searchDatabase. - - Bug 1963121 - Add clang-18 to extra builds. - - Bug 1963044 - Fault tolerant git fetch for fuzzing. - - Bug 1962556 - Tolerate intermittent failures in ssl_policy_pkix_ocsp. - - Bug 1962770 - fix compiler warnings when DEBUG_ASN1D_STATES or CMSDEBUG are set. - - Bug 1961835 - fix content type tag check in NSS_CMSMessage_ContainsCertsOrCrls. - - Bug 1963102 - Remove Cryptofuzz CI version check diff --git a/security/nss/doc/rst/releases/nss_3_112_2.rst b/security/nss/doc/rst/releases/nss_3_112_2.rst new file mode 100644 index 000000000000..8845fc6fa40a --- /dev/null +++ b/security/nss/doc/rst/releases/nss_3_112_2.rst @@ -0,0 +1,72 @@ +.. _mozilla_projects_nss_nss_3_112_2_release_notes: + +NSS 3.112.2 release notes +======================== + +`Introduction <#introduction>`__ +-------------------------------- + +.. container:: + + Network Security Services (NSS) 3.112.2 was released on *3 October 2025**. + +`Distribution Information <#distribution_information>`__ +-------------------------------------------------------- + +.. container:: + + The HG tag is NSS_3_112_2_RTM. NSS 3.112.2 requires NSPR 4.36 or newer. + + NSS 3.112.2 source distributions are available on ftp.mozilla.org for secure HTTPS download: + + - Source tarballs: + https://ftp.mozilla.org/pub/mozilla.org/security/nss/releases/NSS_3_112_2_RTM/src/ + + Other releases are available :ref:`mozilla_projects_nss_releases`. + +.. _changes_in_nss_3.112.2: + +`Changes in NSS 3.112.2 <#changes_in_nss_3.112.2>`__ +------------------------------------------------------------------ + +.. container:: + + - Bug 1970079 - Prevent leaks during pkcs12 decoding. + - Bug 1988046 - SEC_ASN1Decode* should ensure it has read as many bytes as each length field indicates. + - Bug 1992218 - fix memory leak in secasn1decode_unittest.cc. + - Bug 1988913 - Add OISTE roots. + - Bug 1976051 - Add runbook for certdata.txt changes. + - Bug 1991666 - dbtool: close databases before shutdown. + - Bug 1956754 - don't flush base64 when buffer is null. + - Bug 1989541 - Set `use_pkcs5_pbkd2_params2_only=1` for fuzzing builds. + - Bug 1989480 - mozilla::pkix: recognize the qcStatements extension for QWACs. + - Bug 1980465 - Fix a big-endian-problematic cast in zlib calls. + - Bug 1962321 - Revert removing out/ directory after ossfuzz build. + - Bug 1988524 - Add Cryptofuzz to OSS-Fuzz build. + - Bug 1984704 - Add PKCS#11 trust tests. + - Bug 1983308 - final disable dsa patch cert.sh. + - Bug 1983320 - ml-dsa: move tls 1.3 to use streaming signatures. + - Bug 1983320 - ml-dsa: Prep Create a FindOidTagByString function. + - Bug 1983320 - ml-dsa: softoken changes. + - Bug 1983320 - ml-dsa: der key decode. + - Bug 1983320 - ml-dsa: Prep colapse the overuse of keyType outside of pk11wrap and cryptohi. + - Bug 1983320 - ml-dsa: Prep Create a CreateSignatureAlgorithmID function. + - Bug 1983308 - disable DSA in NSS script tests. + - Bug 1983308 - Disabling of some algorithms: generic cert.sh. + - Bug 1981046 - Need to update to new mechanisms. + - Bug 1983320 - Add ML-DSA public key printing support in NSS command-line utilities. + - Bug 1986802 - note embedded scts before revocation checks are performed. + - Bug 1983320 - Add support for ML-DSA keys and mechanisms in PKCS#11 interface. + - Bug 1983320 - Add support for ML-DSA key type and public key structure. + - Bug 1983320 - Enable ML-DSA integration via OIDs support and SECMOD flag. + - Bug 1983308 - disable kyber. + - Bug 1965329 - Implement PKCS #11 v3.2 PQ functions (use verify signature). + - Bug 1983308 - Disable dsa - gtests. + - Bug 1983313 - make group and scheme support in test tools generic. + - Bug 1983770 - Create GH workflow to automatically close PRs. + - Bug 1983308 - Disable dsa - base code. + - Bug 1983308 - Disabling of some algorithms: remove dsa from pk11_mode. + - Bug 1983308 - Disable seed and RC2 bug fixes. + - Bug 1982742 - restore support for finding certificates by decoded serial number. + - Bug 1984165 - avoid CKR_BUFFER_TO_SMALL error in trust lookups. + diff --git a/security/nss/gtests/der_gtest/der_gtest.gyp b/security/nss/gtests/der_gtest/der_gtest.gyp index 2df9242d3588..c169b648ea67 100644 --- a/security/nss/gtests/der_gtest/der_gtest.gyp +++ b/security/nss/gtests/der_gtest/der_gtest.gyp @@ -14,6 +14,7 @@ 'der_getint_unittest.cc', 'der_quickder_unittest.cc', 'p12_import_unittest.cc', + 'secasn1decode_unittest.cc', '<(DEPTH)/gtests/common/gtests.cc' ], 'dependencies': [ diff --git a/security/nss/gtests/der_gtest/secasn1decode_unittest.cc b/security/nss/gtests/der_gtest/secasn1decode_unittest.cc new file mode 100644 index 000000000000..446d33a934af --- /dev/null +++ b/security/nss/gtests/der_gtest/secasn1decode_unittest.cc @@ -0,0 +1,86 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "gtest/gtest.h" +#include "scoped_ptrs_util.h" + +#include "nss.h" +#include "prerror.h" +#include "secasn1.h" +#include "secasn1t.h" +#include "secerr.h" +#include "secport.h" + +class SECASN1DecodeTest : public ::testing::Test {}; + +struct Item { + SECItem value; +}; + +const SEC_ASN1Template ItemTemplate[] = { + {SEC_ASN1_SEQUENCE, 0, NULL, sizeof(struct Item)}, {0}}; + +static const SEC_ASN1Template ItemsTemplate[] = { + {SEC_ASN1_SEQUENCE_OF, 0, ItemTemplate}, {0}}; + +struct Container { + struct Item** items; +}; + +const SEC_ASN1Template ContainerTemplate[] = { + {SEC_ASN1_SEQUENCE, 0, NULL, sizeof(struct Container)}, + {SEC_ASN1_CONSTRUCTED | SEC_ASN1_CONTEXT_SPECIFIC | SEC_ASN1_EXPLICIT | 0, + offsetof(struct Container, items), ItemsTemplate}, + {0}}; + +// clang-format off +const unsigned char kEndOfContentsInDefiniteLengthContext[] = { + 0x30, 0x06, + 0xa0, 0x04, + 0x30, 0x00, + 0x00, 0x00, // EOC in definite length context +}; +// clang-format on + +TEST_F(SECASN1DecodeTest, EndOfContentsInDefiniteLengthContext) { + ScopedPLArenaPool pool(PORT_NewArena(1024)); + struct Container* decoded = reinterpret_cast( + PORT_ArenaZAlloc(pool.get(), sizeof(struct Container))); + SEC_ASN1DecoderContext* ctx = + SEC_ASN1DecoderStart(pool.get(), decoded, ContainerTemplate); + ASSERT_TRUE(ctx); + ASSERT_EQ( + SEC_ASN1DecoderUpdate( + ctx, + reinterpret_cast(kEndOfContentsInDefiniteLengthContext), + sizeof(kEndOfContentsInDefiniteLengthContext)), + SECFailure); + ASSERT_EQ(PR_GetError(), SEC_ERROR_BAD_DER); +} + +// clang-format off +const unsigned char kContentsTooShort[] = { + 0x30, 0x06, + 0xa0, 0x04, + 0x30, 0x00, // There should be two more bytes after this +}; +// clang-format on + +TEST_F(SECASN1DecodeTest, ContentsTooShort) { + ScopedPLArenaPool pool(PORT_NewArena(1024)); + struct Container* decoded = reinterpret_cast( + PORT_ArenaZAlloc(pool.get(), sizeof(struct Container))); + SEC_ASN1DecoderContext* ctx = + SEC_ASN1DecoderStart(pool.get(), decoded, ContainerTemplate); + ASSERT_TRUE(ctx); + ASSERT_EQ( + SEC_ASN1DecoderUpdate( + ctx, + reinterpret_cast(kContentsTooShort), + sizeof(kContentsTooShort)), + SECFailure); + ASSERT_EQ(PR_GetError(), SEC_ERROR_BAD_DER); +} diff --git a/security/nss/lib/nss/nss.h b/security/nss/lib/nss/nss.h index 3d7842adb1fe..377218f56c93 100644 --- a/security/nss/lib/nss/nss.h +++ b/security/nss/lib/nss/nss.h @@ -22,10 +22,10 @@ * The format of the version string should be * ".[.[.]][ ][ ]" */ -#define NSS_VERSION "3.112.1" _NSS_CUSTOMIZED +#define NSS_VERSION "3.112.2" _NSS_CUSTOMIZED #define NSS_VMAJOR 3 #define NSS_VMINOR 112 -#define NSS_VPATCH 1 +#define NSS_VPATCH 2 #define NSS_VBUILD 0 #define NSS_BETA PR_FALSE diff --git a/security/nss/lib/pkcs12/p12d.c b/security/nss/lib/pkcs12/p12d.c index c3a496f6b8a9..0a10bab6219c 100644 --- a/security/nss/lib/pkcs12/p12d.c +++ b/security/nss/lib/pkcs12/p12d.c @@ -826,6 +826,7 @@ sec_pkcs12_decoder_asafes_notify(void *arg, PRBool before, void *dest, safeContentsCtx->safeContentsA1Dcx = NULL; } cinfo = SEC_PKCS7DecoderFinish(p12dcx->currentASafeP7Dcx); + SEC_ASN1DecoderClearFilterProc(p12dcx->aSafeA1Dcx); p12dcx->currentASafeP7Dcx = NULL; if (!cinfo) { p12dcx->errorValue = PORT_GetError(); diff --git a/security/nss/lib/softoken/softkver.h b/security/nss/lib/softoken/softkver.h index 0ee166ead185..5a147647b3fd 100644 --- a/security/nss/lib/softoken/softkver.h +++ b/security/nss/lib/softoken/softkver.h @@ -17,10 +17,10 @@ * The format of the version string should be * ".[.[.]][ ][ ]" */ -#define SOFTOKEN_VERSION "3.112.1" SOFTOKEN_ECC_STRING +#define SOFTOKEN_VERSION "3.112.2" SOFTOKEN_ECC_STRING #define SOFTOKEN_VMAJOR 3 #define SOFTOKEN_VMINOR 112 -#define SOFTOKEN_VPATCH 1 +#define SOFTOKEN_VPATCH 2 #define SOFTOKEN_VBUILD 0 #define SOFTOKEN_BETA PR_FALSE diff --git a/security/nss/lib/util/nssutil.h b/security/nss/lib/util/nssutil.h index f506cd4a1617..4b80c210bdd1 100644 --- a/security/nss/lib/util/nssutil.h +++ b/security/nss/lib/util/nssutil.h @@ -19,10 +19,10 @@ * The format of the version string should be * ".[.[.]][ ]" */ -#define NSSUTIL_VERSION "3.112.1" +#define NSSUTIL_VERSION "3.112.2" #define NSSUTIL_VMAJOR 3 #define NSSUTIL_VMINOR 112 -#define NSSUTIL_VPATCH 1 +#define NSSUTIL_VPATCH 2 #define NSSUTIL_VBUILD 0 #define NSSUTIL_BETA PR_FALSE diff --git a/security/nss/lib/util/secasn1d.c b/security/nss/lib/util/secasn1d.c index c1bd8fa527d9..716f3cf9e2fd 100644 --- a/security/nss/lib/util/secasn1d.c +++ b/security/nss/lib/util/secasn1d.c @@ -2398,24 +2398,9 @@ sec_asn1d_absorb_child(sec_asn1d_state *state) * consumed should be what was left pending. */ if (state->pending != state->child->consumed) { - if (state->pending < state->child->consumed) { - PORT_SetError(SEC_ERROR_BAD_DER); - state->top->status = decodeError; - return; - } - /* - * Okay, this is a hack. It *should* be an error whether - * pending is too big or too small, but it turns out that - * we had a bug in our *old* DER encoder that ended up - * counting an explicit header twice in the case where - * the underlying type was an ANY. So, because we cannot - * prevent receiving these (our own certificate server can - * send them to us), we need to be lenient and accept them. - * To do so, we need to pretend as if we read all of the - * bytes that the header said we would find, even though - * we actually came up short. - */ - state->consumed += (state->pending - state->child->consumed); + PORT_SetError(SEC_ERROR_BAD_DER); + state->top->status = decodeError; + return; } state->pending = 0; } diff --git a/security/nss/moz.yaml b/security/nss/moz.yaml index 5c6ed16ff50c..621871ea1c79 100644 --- a/security/nss/moz.yaml +++ b/security/nss/moz.yaml @@ -9,8 +9,8 @@ origin: description: nss url: https://hg-edge.mozilla.org/projects/nss - release: 808e051ea9ce632e910c449a5b60d152e3017572 (2025-08-22T02:48:54Z). - revision: 808e051ea9ce632e910c449a5b60d152e3017572 + release: ea8a7bf26efdf7cb8b5fc8a02f0c779404509277 (2025-10-03T12:46:03Z). + revision: ea8a7bf26efdf7cb8b5fc8a02f0c779404509277 license: MPL-2.0 license-file: COPYING