diff --git a/debian/apertis/copyright b/debian/apertis/copyright index 2832e6d47d0a94a9d98893f21c7d3e257512ece6..ae078dd1d1a5d88c3acb68998d0f14ff8306aa70 100644 --- a/debian/apertis/copyright +++ b/debian/apertis/copyright @@ -1,7 +1,8 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Files: * -Copyright: no-info-found +Copyright: 1998-2019, The OpenSSL Project. + 1995-1998, Eric A. Young, Tim J. Hudson License: Apache-1.0 and/or BSD-4-clause or OpenSSL Files: ACKNOWLEDGEMENTS @@ -38,18 +39,19 @@ Copyright: no-info-found License: OpenSSL Files: Configurations/shared-info.pl -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: Configure config config.com e_os.h -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: README -Copyright: no-info-found +Copyright: 1998-2021, The OpenSSL Project + 1995-1998, Eric A. Young, Tim J. Hudson License: OpenSSL Files: VMS/* @@ -58,11 +60,11 @@ License: OpenSSL Files: VMS/VMSify-conf.pl VMS/translatesyms.pl -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: apps/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: apps/build.info @@ -104,31 +106,39 @@ Copyright: no-info-found License: OpenSSL Files: apps/ecparam.c -Copyright: no-info-found +Copyright: 2002-2021, The OpenSSL Project Authors. + 2002, 2017, 2018, Oracle and/or its affiliates. License: OpenSSL Files: apps/rehash.c -Copyright: no-info-found +Copyright: 2015-2020, The OpenSSL Project Authors. + 2013, 2014, Timo Teräs <timo.teras@gmail.com> License: OpenSSL Files: apps/s_client.c -Copyright: no-info-found +Copyright: 2005, Nokia. + 1995-2021, The OpenSSL Project Authors. License: OpenSSL Files: apps/s_server.c -Copyright: no-info-found +Copyright: 2005, Nokia. + 2002, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: apps/speed.c -Copyright: no-info-found +Copyright: 2002, 2017, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: apps/srp.c -Copyright: no-info-found +Copyright: 2004-2021, The OpenSSL Project Authors. + 2004, EdelKey Project. License: OpenSSL Files: apps/tsget.in -Copyright: no-info-found +Copyright: 2002-2018, The OpenSSL Project Authors. + 2002, The OpenTSA Project. License: OpenSSL Files: apps/vms_decc_argv.c @@ -137,11 +147,12 @@ License: Apache-2.0 Files: apps/vms_term_sock.c apps/vms_term_sock.h -Copyright: no-info-found +Copyright: 2016, VMS Software, Inc. + 2016, The OpenSSL Project Authors. License: OpenSSL Files: crypto/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: crypto/LPdir_nyi.c @@ -171,7 +182,8 @@ Copyright: no-info-found License: OpenSSL Files: crypto/aria/aria.c -Copyright: no-info-found +Copyright: 2002-2021, The OpenSSL Project Authors. + 2002, 2017, 2018, Oracle and/or its affiliates. License: OpenSSL Files: crypto/asn1/build.info @@ -199,12 +211,13 @@ Copyright: Copyright 2000-2016, The OpenSSL Project Authors. License: OpenSSL Files: crypto/bn/asm/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: crypto/bn/asm/rsaz-avx2.pl crypto/bn/asm/rsaz-x86_64.pl -Copyright: no-info-found +Copyright: 2013-2020, The OpenSSL Project Authors. + 2012, Intel Corporation. License: OpenSSL Files: crypto/bn/asm/sparct4-mont.pl @@ -244,20 +257,23 @@ Files: crypto/bn/bn_add.c crypto/bn/bn_srp.c crypto/bn/bn_word.c crypto/bn/bn_x931p.c -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: crypto/bn/bn_gf2m.c -Copyright: no-info-found +Copyright: 2002-2021, The OpenSSL Project Authors. + 2002, 2017, 2018, Oracle and/or its affiliates. License: OpenSSL Files: crypto/bn/build.info + crypto/bn/rsa_sup_mul.c Copyright: no-info-found License: OpenSSL Files: crypto/bn/rsaz_exp.c crypto/bn/rsaz_exp.h -Copyright: no-info-found +Copyright: 2013-2020, The OpenSSL Project Authors. + 2012, Intel Corporation. License: OpenSSL Files: crypto/buffer/build.info @@ -305,7 +321,8 @@ Copyright: no-info-found License: OpenSSL Files: crypto/cryptlib.c -Copyright: no-info-found +Copyright: 2002, 2017, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: crypto/ct/build.info @@ -338,7 +355,9 @@ Copyright: no-info-found License: OpenSSL Files: crypto/ec/asm/ecp_nistz256-x86_64.pl -Copyright: no-info-found +Copyright: 2015, CloudFlare, Inc. + 2014-2020, The OpenSSL Project Authors. + 2014, Intel Corporation. License: OpenSSL Files: crypto/ec/build.info @@ -346,11 +365,12 @@ Copyright: no-info-found License: OpenSSL Files: crypto/ec/curve448/* -Copyright: no-info-found +Copyright: 2017-2021, The OpenSSL Project Authors. + 2014-2016, Cryptography Research, Inc. License: OpenSSL Files: crypto/ec/curve448/curve448_local.h -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: crypto/ec/ec2_oct.c @@ -361,7 +381,8 @@ Files: crypto/ec/ec2_oct.c crypto/ec/ecdh_ossl.c crypto/ec/eck_prn.c crypto/ec/ecp_oct.c -Copyright: no-info-found +Copyright: 2002-2021, The OpenSSL Project Authors. + 2002, 2017, 2018, Oracle and/or its affiliates. License: OpenSSL Files: crypto/ec/ec_cvt.c @@ -371,7 +392,8 @@ Files: crypto/ec/ec_cvt.c crypto/ec/ecp_mont.c crypto/ec/ecp_nist.c crypto/ec/ecp_smpl.c -Copyright: no-info-found +Copyright: 2002, 2017, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: crypto/ec/ecp_nistp224.c @@ -382,7 +404,9 @@ Copyright: 2010-2020, The OpenSSL Project Authors. License: Apache-2.0 and/or OpenSSL Files: crypto/ec/ecp_nistz256.c -Copyright: no-info-found +Copyright: 2015, CloudFlare, Inc. + 2014-2020, The OpenSSL Project Authors. + 2014, Intel Corporation. License: OpenSSL Files: crypto/engine/* @@ -409,14 +433,15 @@ Files: crypto/engine/eng_all.c crypto/engine/tb_pkmeth.c crypto/engine/tb_rand.c crypto/engine/tb_rsa.c -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: crypto/engine/eng_fat.c crypto/engine/eng_list.c crypto/engine/eng_local.h crypto/engine/eng_openssl.c -Copyright: no-info-found +Copyright: 2002, 2017, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: crypto/err/* @@ -427,7 +452,7 @@ Files: crypto/err/err.c crypto/err/err_all.c crypto/err/err_prn.c crypto/err/openssl.txt -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: crypto/evp/build.info @@ -435,11 +460,13 @@ Copyright: no-info-found License: OpenSSL Files: crypto/evp/e_aria.c -Copyright: no-info-found +Copyright: 2002-2021, The OpenSSL Project Authors. + 2002, 2017, 2018, Oracle and/or its affiliates. License: OpenSSL Files: crypto/evp/e_sm4.c -Copyright: no-info-found +Copyright: 2017-2021, The OpenSSL Project Authors. + 2017, Ribose Inc. License: OpenSSL Files: crypto/hmac/build.info @@ -475,7 +502,8 @@ Copyright: no-info-found License: OpenSSL Files: crypto/mem_sec.c -Copyright: no-info-found +Copyright: 2015-2020, The OpenSSL Project Authors. + 2004-2014, Akamai Technologies. License: OpenSSL Files: crypto/modes/build.info @@ -497,7 +525,7 @@ Files: crypto/objects/o_names.c crypto/objects/obj_xref.h crypto/objects/objects.pl crypto/objects/objxref.pl -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: crypto/ocsp/build.info @@ -521,7 +549,7 @@ Files: crypto/perlasm/arm-xlate.pl crypto/perlasm/x86gas.pl crypto/perlasm/x86masm.pl crypto/perlasm/x86nasm.pl -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: crypto/pkcs12/build.info @@ -561,7 +589,8 @@ Copyright: no-info-found License: OpenSSL Files: crypto/rsa/rsa_mp.c -Copyright: no-info-found +Copyright: 2017, BaishanCloud. + 2017, 2018, The OpenSSL Project Authors. License: OpenSSL Files: crypto/seed/build.info @@ -582,11 +611,13 @@ License: OpenSSL Files: crypto/sm2/sm2_crypt.c crypto/sm2/sm2_sign.c -Copyright: no-info-found +Copyright: 2017-2021, The OpenSSL Project Authors. + 2017, Ribose Inc. License: OpenSSL Files: crypto/sm3/* -Copyright: no-info-found +Copyright: 2017-2021, The OpenSSL Project Authors. + 2017, Ribose Inc. License: OpenSSL Files: crypto/sm3/build.info @@ -598,11 +629,13 @@ Copyright: no-info-found License: OpenSSL Files: crypto/sm4/sm4.c -Copyright: no-info-found +Copyright: 2017-2021, The OpenSSL Project Authors. + 2017, Ribose Inc. License: OpenSSL Files: crypto/srp/* -Copyright: no-info-found +Copyright: 2004-2021, The OpenSSL Project Authors. + 2004, EdelKey Project. License: OpenSSL Files: crypto/srp/build.info @@ -614,7 +647,7 @@ Copyright: no-info-found License: OpenSSL Files: crypto/stack/stack.c -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: crypto/store/build.info @@ -630,7 +663,7 @@ Copyright: no-info-found License: OpenSSL Files: crypto/txt_db/txt_db.c -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: crypto/ui/build.info @@ -659,8 +692,9 @@ Copyright: no-info-found License: OpenSSL Files: debian/patches/Disable-failing-test-test-recipes-80-test_ssl_new.t.patch + debian/patches/Fix-Timing-Oracle-in-RSA-decryption.patch debian/patches/Fix-file-operations-in-c_rehash.patch -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: debian/rules @@ -668,11 +702,11 @@ Copyright: Designs and Patents Act 1988.) / 1994-1995, Ian Jackson. License: OpenSSL Files: debian/tests/25-test_verify.t -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: debian/tests/OpenSSL/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: demos/* @@ -686,11 +720,11 @@ Files: demos/bio/client-arg.c demos/bio/server-arg.c demos/bio/server-cmod.c demos/bio/server-conf.c -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: demos/cms/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: demos/cms/cacert.pem @@ -704,7 +738,7 @@ Copyright: no-info-found License: OpenSSL Files: demos/evp/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: demos/evp/Makefile @@ -712,7 +746,7 @@ Copyright: no-info-found License: OpenSSL Files: demos/pkcs12/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: demos/smime/smdec.c @@ -720,7 +754,7 @@ Files: demos/smime/smdec.c demos/smime/smsign.c demos/smime/smsign2.c demos/smime/smver.c -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: doc/* @@ -1022,7 +1056,7 @@ Files: doc/man3/BIO_find_type.pod doc/man3/SSL_CTX_set_ssl_version.pod doc/man3/SSL_pending.pod doc/man3/SSL_set_session.pod -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: doc/man3/BIO_meth_new.pod @@ -1552,7 +1586,7 @@ Copyright: Copyright 2003-2021, The OpenSSL Project Authors. License: OpenSSL Files: engines/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: engines/build.info @@ -1596,7 +1630,7 @@ Copyright: no-info-found License: OpenSSL Files: external/perl/transfer/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: fuzz/* @@ -1620,25 +1654,28 @@ Files: fuzz/asn1.c fuzz/server.c fuzz/test-corpus.c fuzz/x509.c -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: include/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: include/crypto/aria.h -Copyright: no-info-found +Copyright: 2002, 2017, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: include/crypto/sha.h -Copyright: no-info-found +Copyright: 2002-2021, The OpenSSL Project Authors. + 2002, 2017, 2018, Oracle and/or its affiliates. License: OpenSSL Files: include/crypto/sm2.h include/crypto/sm3.h include/crypto/sm4.h -Copyright: no-info-found +Copyright: 2017-2021, The OpenSSL Project Authors. + 2017, Ribose Inc. License: OpenSSL Files: include/internal/o_dir.h @@ -1650,24 +1687,29 @@ Files: include/openssl/bn.h include/openssl/engine.h include/openssl/ssl3.h include/openssl/x509.h -Copyright: no-info-found +Copyright: 2002, 2017, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: include/openssl/ec.h -Copyright: no-info-found +Copyright: 2002-2021, The OpenSSL Project Authors. + 2002, 2017, 2018, Oracle and/or its affiliates. License: OpenSSL Files: include/openssl/srp.h -Copyright: no-info-found +Copyright: 2004-2021, The OpenSSL Project Authors. + 2004, EdelKey Project. License: OpenSSL Files: include/openssl/ssl.h include/openssl/tls1.h -Copyright: no-info-found +Copyright: 2005, Nokia. + 2002, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: ms/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: os-dep/* @@ -1675,7 +1717,7 @@ Copyright: no-info-found License: OpenSSL Files: ssl/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: ssl/build.info @@ -1694,7 +1736,7 @@ Files: ssl/record/dtls1_bitmap.c ssl/record/ssl3_buffer.c ssl/record/ssl3_record.c ssl/record/ssl3_record_tls13.c -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: ssl/s3_enc.c @@ -1703,18 +1745,22 @@ Files: ssl/s3_enc.c ssl/ssl_stat.c ssl/ssl_txt.c ssl/t1_enc.c -Copyright: no-info-found +Copyright: 2005, Nokia. + 1995-2021, The OpenSSL Project Authors. License: OpenSSL Files: ssl/s3_lib.c ssl/ssl_ciph.c ssl/ssl_lib.c ssl/ssl_local.h -Copyright: no-info-found +Copyright: 2005, Nokia. + 2002, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: ssl/ssl_cert.c -Copyright: no-info-found +Copyright: 2002, 2017, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: ssl/statem/* @@ -1729,20 +1775,24 @@ Files: ssl/statem/extensions.c ssl/statem/statem.h ssl/statem/statem_dtls.c ssl/statem/statem_local.h -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: ssl/statem/statem_clnt.c ssl/statem/statem_srvr.c -Copyright: no-info-found +Copyright: 2005, Nokia. + 2002, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: ssl/statem/statem_lib.c -Copyright: no-info-found +Copyright: 2002, 2017, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: ssl/tls_srp.c -Copyright: no-info-found +Copyright: 2004-2021, The OpenSSL Project Authors. + 2004, EdelKey Project. License: OpenSSL Files: test/* @@ -1868,17 +1918,19 @@ Files: test/aborttest.c test/x509_internal_test.c test/x509_time_test.c test/x509aux.c -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: test/certs/mkcert.sh -Copyright: no-info-found +Copyright: 2016-2021, The OpenSSL Project Authors. + 2016, Viktor Dukhovni <openssl-users@dukhovni.org>. License: OpenSSL Files: test/ciphername_test.c test/rsa_mp_test.c test/servername_test.c -Copyright: no-info-found +Copyright: 2017-2019, The OpenSSL Project Authors. + 2017, BaishanCloud. License: OpenSSL Files: test/cmactest.c @@ -1899,16 +1951,18 @@ Files: test/ecdsatest.c test/lhash_test.c test/stack_test.c test/x509_dup_cert_test.c -Copyright: no-info-found +Copyright: 2002-2021, The OpenSSL Project Authors. + 2002, 2017, 2018, Oracle and/or its affiliates. License: OpenSSL Files: test/ectest.c test/test_test.c -Copyright: no-info-found +Copyright: 2002, 2017, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: test/ossl_shim/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: test/ossl_shim/build.info @@ -1917,7 +1971,7 @@ Copyright: no-info-found License: OpenSSL Files: test/recipes/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: test/recipes/01-test_test.t @@ -1925,11 +1979,13 @@ Files: test/recipes/01-test_test.t test/recipes/02-test_stack.t test/recipes/20-test_enc_more.t test/recipes/60-test_x509_dup_cert.t -Copyright: no-info-found +Copyright: 2002-2021, The OpenSSL Project Authors. + 2002, 2017, 2018, Oracle and/or its affiliates. License: OpenSSL Files: test/recipes/02-test_internal_ctype.t -Copyright: no-info-found +Copyright: 2002, 2017, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: test/recipes/03-test_internal_ec.t @@ -1940,7 +1996,8 @@ Copyright: 1995-2022, The OpenSSL Project Authors. License: Apache-2.0 Files: test/recipes/03-test_internal_sm4.t -Copyright: no-info-found +Copyright: 2017, [Ribose Inc.](https:www.ribose.com). + 2017, 2018, The OpenSSL Project Authors. License: OpenSSL Files: test/recipes/04-test_pem_data/* @@ -1957,7 +2014,8 @@ License: OpenSSL Files: test/recipes/15-test_mp_rsa.t test/recipes/80-test_ciphername.t -Copyright: no-info-found +Copyright: 2017-2019, The OpenSSL Project Authors. + 2017, BaishanCloud. License: OpenSSL Files: test/recipes/15-test_mp_rsa_data/* @@ -1973,7 +2031,8 @@ Copyright: no-info-found License: OpenSSL Files: test/recipes/70-test_servername.t -Copyright: no-info-found +Copyright: 2017, BaishanCloud. + 2017, 2018, The OpenSSL Project Authors. License: OpenSSL Files: test/recipes/80-test_cms_data/* @@ -2017,7 +2076,8 @@ Copyright: no-info-found License: OpenSSL Files: test/recipes/95-test_external_pyca_data/* -Copyright: no-info-found +Copyright: 2002-2021, The OpenSSL Project Authors. + 2002, 2017, 2018, Oracle and/or its affiliates. License: OpenSSL Files: test/recipes/ocsp-response.der @@ -2029,11 +2089,12 @@ Copyright: no-info-found License: OpenSSL Files: test/sm4_internal_test.c -Copyright: no-info-found +Copyright: 2017-2021, The OpenSSL Project Authors. + 2017, Ribose Inc. License: OpenSSL Files: test/smime-certs/mksmime-certs.sh -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: test/ssl-tests/01-simple.conf.in @@ -2063,7 +2124,7 @@ Files: test/ssl-tests/01-simple.conf.in test/ssl-tests/28-seclevel.conf.in test/ssl-tests/protocol_version.pm test/ssl-tests/ssltests_base.pm -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: test/ssl-tests/29-dtls-sctp-label-bug.conf.in @@ -2071,7 +2132,9 @@ Copyright: 1995-2022, The OpenSSL Project Authors. License: Apache-2.0 Files: test/ssltest_old.c -Copyright: no-info-found +Copyright: 2005, Nokia. + 2002, Oracle and/or its affiliates. + 1995-2022, The OpenSSL Project Authors. License: OpenSSL Files: test/testrsa_withattrs.der @@ -2079,7 +2142,7 @@ Copyright: no-info-found License: OpenSSL Files: test/testutil/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: test/testutil/random.c @@ -2087,7 +2150,8 @@ Copyright: 1995-2022, The OpenSSL Project Authors. License: Apache-2.0 Files: test/testutil/tap_bio.c -Copyright: no-info-found +Copyright: 2002-2021, The OpenSSL Project Authors. + 2002, 2017, 2018, Oracle and/or its affiliates. License: OpenSSL Files: tools/* @@ -2095,11 +2159,11 @@ Copyright: no-info-found License: OpenSSL Files: tools/c_rehash.in -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: util/* -Copyright: 1995-2022, The OpenSSL Project Authors. +Copyright: 1995-2023, The OpenSSL Project Authors. License: OpenSSL Files: util/build.info diff --git a/debian/changelog b/debian/changelog index 596f78ed2d1820a76ef896f731d479ef86611974..d1e5762ab1caef3e3f7a4e4d73a5d7144e1e40f8 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,19 @@ +openssl (1.1.1n-0+deb11u4+apertis1) apertis; urgency=medium + + * Sync updates from Debian Bullseye Security + + -- Apertis CI <devel@lists.apertis.org> Wed, 08 Feb 2023 08:47:27 +0000 + +openssl (1.1.1n-0+deb11u4) bullseye-security; urgency=medium + + * CVE-2022-4450 (Double free after calling PEM_read_bio_ex). + * CVE-2023-0286 (X.400 address type confusion in X.509 GeneralName). + * CVE-2023-0215 (Use-after-free following BIO_new_NDEF). + * CVE-2022-4304 (Timing Oracle in RSA Decryption). + * CVE-2022-2097 (AES OCB fails to encrypt some bytes). + + -- Sebastian Andrzej Siewior <sebastian@breakpoint.cc> Sun, 05 Feb 2023 22:23:17 +0100 + openssl (1.1.1n-0+deb11u3+apertis1) apertis; urgency=medium * Sync updates from Debian Bullseye Security diff --git a/debian/patches/AES-OCB-test-vectors.patch b/debian/patches/AES-OCB-test-vectors.patch new file mode 100644 index 0000000000000000000000000000000000000000..f7dabfb7b437073bb806de92e3015f6d2a737f82 --- /dev/null +++ b/debian/patches/AES-OCB-test-vectors.patch @@ -0,0 +1,79 @@ +From: Alex Chernyakhovsky <achernya@google.com> +Date: Thu, 16 Jun 2022 12:02:37 +1000 +Subject: AES OCB test vectors +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +Add test vectors for AES OCB for x86 AES-NI multiple of 96 byte issue. + +Co-authored-by: Alejandro Sedeño <asedeno@google.com> +Co-authored-by: David Benjamin <davidben@google.com> + +Reviewed-by: Paul Dale <pauli@openssl.org> +Reviewed-by: Tomas Mraz <tomas@openssl.org> +--- + test/recipes/30-test_evp_data/evpciph.txt | 50 +++++++++++++++++++++++++++++++ + 1 file changed, 50 insertions(+) + +diff --git a/test/recipes/30-test_evp_data/evpciph.txt b/test/recipes/30-test_evp_data/evpciph.txt +index 1c02ea1e9c2d..e12670d9a4b4 100644 +--- a/test/recipes/30-test_evp_data/evpciph.txt ++++ b/test/recipes/30-test_evp_data/evpciph.txt +@@ -1188,6 +1188,56 @@ Ciphertext = 09A4FD29DE949D9A9AA9924248422097AD4883B4713E6C214FF6567ADA08A967B21 + Operation = DECRYPT + Result = CIPHERFINAL_ERROR + ++#Test vectors generated to validate aesni_ocb_encrypt on x86 ++Cipher = aes-128-ocb ++Key = 000102030405060708090A0B0C0D0E0F ++IV = 000000000001020304050607 ++Tag = C14DFF7D62A13C4A3422456207453190 ++Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F ++Ciphertext = F5186C9CC3506386919B6FD9443956E05B203313F8AB35E916AB36932EBDDCD2945901BABE7CF29404929F322F954C916065FABF8F1E52F4BD7C538C0F96899519DBC6BC504D837D8EBD1436B45D33F528CB642FA2EB2C403FE604C12B819333 ++ ++Cipher = aes-128-ocb ++Key = 000102030405060708090A0B0C0D0E0F ++IV = 000000000001020304050607 ++Tag = D47D84F6FF912C79B6A4223AB9BE2DB8 ++Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F ++Ciphertext = F5186C9CC3506386919B6FD9443956E05B203313F8AB35E916AB36932EBDDCD2945901BABE7CF29404929F322F954C916065FABF8F1E52F4BD7C538C0F96899519DBC6BC504D837D8EBD1436B45D33F528CB642FA2EB2C403FE604C12B8193332374120A78A1171D23ED9E9CB1ADC204 ++ ++Cipher = aes-128-ocb ++Key = 000102030405060708090A0B0C0D0E0F ++IV = 000000000001020304050607 ++Tag = 41970D13737B7BD1B5FBF49ED4412CA5 ++Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071000102030405060708090A0B0C0D ++Ciphertext = F5186C9CC3506386919B6FD9443956E05B203313F8AB35E916AB36932EBDDCD2945901BABE7CF29404929F322F954C916065FABF8F1E52F4BD7C538C0F96899519DBC6BC504D837D8EBD1436B45D33F528CB642FA2EB2C403FE604C12B8193332374120A78A1171D23ED9E9CB1ADC20412C017AD0CA498827C768DDD99B26E91 ++ ++Cipher = aes-128-ocb ++Key = 000102030405060708090A0B0C0D0E0F ++IV = 000000000001020304050607 ++Tag = BE0228651ED4E48A11BDED68D953F3A0 ++Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D ++Ciphertext = F5186C9CC3506386919B6FD9443956E05B203313F8AB35E916AB36932EBDDCD2945901BABE7CF29404929F322F954C916065FABF8F1E52F4BD7C538C0F96899519DBC6BC504D837D8EBD1436B45D33F528CB642FA2EB2C403FE604C12B8193332374120A78A1171D23ED9E9CB1ADC20412C017AD0CA498827C768DDD99B26E91EDB8681700FF30366F07AEDE8CEACC1F ++ ++Cipher = aes-128-ocb ++Key = 000102030405060708090A0B0C0D0E0F ++IV = 000000000001020304050607 ++Tag = 17BC6E10B16E5FDC52836E7D589518C7 ++Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D ++Ciphertext = F5186C9CC3506386919B6FD9443956E05B203313F8AB35E916AB36932EBDDCD2945901BABE7CF29404929F322F954C916065FABF8F1E52F4BD7C538C0F96899519DBC6BC504D837D8EBD1436B45D33F528CB642FA2EB2C403FE604C12B8193332374120A78A1171D23ED9E9CB1ADC20412C017AD0CA498827C768DDD99B26E91EDB8681700FF30366F07AEDE8CEACC1F39BE69B91BC808FA7A193F7EEA43137B ++ ++Cipher = aes-128-ocb ++Key = 000102030405060708090A0B0C0D0E0F ++IV = 000000000001020304050607 ++Tag = E84AAC18666116990A3A37B3A5FC55BD ++Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D ++Ciphertext = F5186C9CC3506386919B6FD9443956E05B203313F8AB35E916AB36932EBDDCD2945901BABE7CF29404929F322F954C916065FABF8F1E52F4BD7C538C0F96899519DBC6BC504D837D8EBD1436B45D33F528CB642FA2EB2C403FE604C12B8193332374120A78A1171D23ED9E9CB1ADC20412C017AD0CA498827C768DDD99B26E91EDB8681700FF30366F07AEDE8CEACC1F39BE69B91BC808FA7A193F7EEA43137B11CF99263D693AEBDF8ADE1A1D838DED ++ ++Cipher = aes-128-ocb ++Key = 000102030405060708090A0B0C0D0E0F ++IV = 000000000001020304050607 ++Tag = 3E5EA7EE064FE83B313E28D411E91EAD ++Plaintext = 000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F7071000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D ++Ciphertext = F5186C9CC3506386919B6FD9443956E05B203313F8AB35E916AB36932EBDDCD2945901BABE7CF29404929F322F954C916065FABF8F1E52F4BD7C538C0F96899519DBC6BC504D837D8EBD1436B45D33F528CB642FA2EB2C403FE604C12B8193332374120A78A1171D23ED9E9CB1ADC20412C017AD0CA498827C768DDD99B26E91EDB8681700FF30366F07AEDE8CEACC1F39BE69B91BC808FA7A193F7EEA43137B11CF99263D693AEBDF8ADE1A1D838DED48D9E09F452F8E6FBEB76A3DED47611C ++ + Title = AES XTS test vectors from IEEE Std 1619-2007 + + # Using the same key twice for encryption is always banned. diff --git a/debian/patches/Add-a-test-for-CVE-2022-4450.patch b/debian/patches/Add-a-test-for-CVE-2022-4450.patch new file mode 100644 index 0000000000000000000000000000000000000000..94871c71f5f17eb428d0c60f2799d3e685e0c809 --- /dev/null +++ b/debian/patches/Add-a-test-for-CVE-2022-4450.patch @@ -0,0 +1,55 @@ +From: Matt Caswell <matt@openssl.org> +Date: Tue, 13 Dec 2022 15:02:26 +0000 +Subject: Add a test for CVE-2022-4450 + +Call PEM_read_bio_ex() and expect a failure. There should be no dangling +ptrs and therefore there should be no double free if we free the ptrs on +error. +--- + test/pemtest.c | 30 ++++++++++++++++++++++++++++++ + 1 file changed, 30 insertions(+) + +diff --git a/test/pemtest.c b/test/pemtest.c +index 3203d976be76..edeb0a12059e 100644 +--- a/test/pemtest.c ++++ b/test/pemtest.c +@@ -83,9 +83,39 @@ static int test_invalid(void) + return 1; + } + ++static int test_empty_payload(void) ++{ ++ BIO *b; ++ static char *emptypay = ++ "-----BEGIN CERTIFICATE-----\n" ++ "-\n" /* Base64 EOF character */ ++ "-----END CERTIFICATE-----"; ++ char *name = NULL, *header = NULL; ++ unsigned char *data = NULL; ++ long len; ++ int ret = 0; ++ ++ b = BIO_new_mem_buf(emptypay, strlen(emptypay)); ++ if (!TEST_ptr(b)) ++ return 0; ++ ++ /* Expected to fail because the payload is empty */ ++ if (!TEST_false(PEM_read_bio_ex(b, &name, &header, &data, &len, 0))) ++ goto err; ++ ++ ret = 1; ++ err: ++ OPENSSL_free(name); ++ OPENSSL_free(header); ++ OPENSSL_free(data); ++ BIO_free(b); ++ return ret; ++} ++ + int setup_tests(void) + { + ADD_ALL_TESTS(test_b64, OSSL_NELEM(b64_pem_data)); + ADD_TEST(test_invalid); ++ ADD_TEST(test_empty_payload); + return 1; + } diff --git a/debian/patches/Avoid-dangling-ptrs-in-header-and-data-params-for-PEM_rea.patch b/debian/patches/Avoid-dangling-ptrs-in-header-and-data-params-for-PEM_rea.patch new file mode 100644 index 0000000000000000000000000000000000000000..0b7eb70bb5197d79df2c10901100f76013228f37 --- /dev/null +++ b/debian/patches/Avoid-dangling-ptrs-in-header-and-data-params-for-PEM_rea.patch @@ -0,0 +1,33 @@ +From: Matt Caswell <matt@openssl.org> +Date: Tue, 13 Dec 2022 14:54:55 +0000 +Subject: Avoid dangling ptrs in header and data params for PEM_read_bio_ex + +In the event of a failure in PEM_read_bio_ex() we free the buffers we +allocated for the header and data buffers. However we were not clearing +the ptrs stored in *header and *data. Since, on success, the caller is +responsible for freeing these ptrs this can potentially lead to a double +free if the caller frees them even on failure. + +Thanks to Dawei Wang for reporting this issue. + +Based on a proposed patch by Kurt Roeckx. + +CVE-2022-4450 +--- + crypto/pem/pem_lib.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/crypto/pem/pem_lib.c b/crypto/pem/pem_lib.c +index 2de093595d0d..173045be21ea 100644 +--- a/crypto/pem/pem_lib.c ++++ b/crypto/pem/pem_lib.c +@@ -957,7 +957,9 @@ int PEM_read_bio_ex(BIO *bp, char **name_out, char **header, + *data = pem_malloc(len, flags); + if (*header == NULL || *data == NULL) { + pem_free(*header, flags, 0); ++ *header = NULL; + pem_free(*data, flags, 0); ++ *data = NULL; + goto end; + } + BIO_read(headerB, *header, headerlen); diff --git a/debian/patches/CVE-2023-0286-Fix-GENERAL_NAME_cmp-for-x400Address-1.1.1.patch b/debian/patches/CVE-2023-0286-Fix-GENERAL_NAME_cmp-for-x400Address-1.1.1.patch new file mode 100644 index 0000000000000000000000000000000000000000..0a4337b74432b7a5ff905987a3986cc030c3980a --- /dev/null +++ b/debian/patches/CVE-2023-0286-Fix-GENERAL_NAME_cmp-for-x400Address-1.1.1.patch @@ -0,0 +1,87 @@ +From: Hugo Landau <hlandau@openssl.org> +Date: Tue, 17 Jan 2023 17:45:42 +0000 +Subject: CVE-2023-0286: Fix GENERAL_NAME_cmp for x400Address (1.1.1) + +--- + CHANGES | 20 ++++++++++++++++++++ + crypto/x509v3/v3_genn.c | 2 +- + include/openssl/x509v3.h | 2 +- + test/v3nametest.c | 8 ++++++++ + 4 files changed, 30 insertions(+), 2 deletions(-) + +diff --git a/CHANGES b/CHANGES +index 3ef3fa28cfa8..265555ab95c5 100644 +--- a/CHANGES ++++ b/CHANGES +@@ -7,6 +7,26 @@ + https://github.com/openssl/openssl/commits/ and pick the appropriate + release branch. + ++ Changes between 1.1.1s and 1.1.1t [xx XXX xxxx] ++ ++ *) Fixed a type confusion vulnerability relating to X.400 address processing ++ inside an X.509 GeneralName. X.400 addresses were parsed as an ASN1_STRING ++ but subsequently interpreted by GENERAL_NAME_cmp as an ASN1_TYPE. This ++ vulnerability may allow an attacker who can provide a certificate chain and ++ CRL (neither of which need have a valid signature) to pass arbitrary ++ pointers to a memcmp call, creating a possible read primitive, subject to ++ some constraints. Refer to the advisory for more information. Thanks to ++ David Benjamin for discovering this issue. (CVE-2023-0286) ++ ++ This issue has been fixed by changing the public header file definition of ++ GENERAL_NAME so that x400Address reflects the implementation. It was not ++ possible for any existing application to successfully use the existing ++ definition; however, if any application references the x400Address field ++ (e.g. in dead code), note that the type of this field has changed. There is ++ no ABI change. ++ ++ [Hugo Landau] ++ + Changes between 1.1.1m and 1.1.1n [15 Mar 2022] + + *) Fixed a bug in the BN_mod_sqrt() function that can cause it to loop forever +diff --git a/crypto/x509v3/v3_genn.c b/crypto/x509v3/v3_genn.c +index 87a5eff47cd9..e54ddc55c957 100644 +--- a/crypto/x509v3/v3_genn.c ++++ b/crypto/x509v3/v3_genn.c +@@ -98,7 +98,7 @@ int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b) + return -1; + switch (a->type) { + case GEN_X400: +- result = ASN1_TYPE_cmp(a->d.x400Address, b->d.x400Address); ++ result = ASN1_STRING_cmp(a->d.x400Address, b->d.x400Address); + break; + + case GEN_EDIPARTY: +diff --git a/include/openssl/x509v3.h b/include/openssl/x509v3.h +index 90fa3592ce58..e61c0f29d4b4 100644 +--- a/include/openssl/x509v3.h ++++ b/include/openssl/x509v3.h +@@ -136,7 +136,7 @@ typedef struct GENERAL_NAME_st { + OTHERNAME *otherName; /* otherName */ + ASN1_IA5STRING *rfc822Name; + ASN1_IA5STRING *dNSName; +- ASN1_TYPE *x400Address; ++ ASN1_STRING *x400Address; + X509_NAME *directoryName; + EDIPARTYNAME *ediPartyName; + ASN1_IA5STRING *uniformResourceIdentifier; +diff --git a/test/v3nametest.c b/test/v3nametest.c +index d1852190b84e..37819da8fd78 100644 +--- a/test/v3nametest.c ++++ b/test/v3nametest.c +@@ -646,6 +646,14 @@ static struct gennamedata { + 0xb7, 0x09, 0x02, 0x02 + }, + 15 ++ }, { ++ /* ++ * Regression test for CVE-2023-0286. ++ */ ++ { ++ 0xa3, 0x00 ++ }, ++ 2 + } + }; + diff --git a/debian/patches/Check-CMS-failure-during-BIO-setup-with-stream-is-handled.patch b/debian/patches/Check-CMS-failure-during-BIO-setup-with-stream-is-handled.patch new file mode 100644 index 0000000000000000000000000000000000000000..d09d7a50e89787825d14c08c385f726297fdf5e1 --- /dev/null +++ b/debian/patches/Check-CMS-failure-during-BIO-setup-with-stream-is-handled.patch @@ -0,0 +1,72 @@ +From: Matt Caswell <matt@openssl.org> +Date: Wed, 14 Dec 2022 17:15:18 +0000 +Subject: Check CMS failure during BIO setup with -stream is handled correctly + +Test for the issue fixed in the previous commit +--- + test/recipes/80-test_cms.t | 15 +++++++++++++-- + test/smime-certs/badrsa.pem | 18 ++++++++++++++++++ + 2 files changed, 31 insertions(+), 2 deletions(-) + create mode 100644 test/smime-certs/badrsa.pem + +diff --git a/test/recipes/80-test_cms.t b/test/recipes/80-test_cms.t +index 5dc6a3aebe01..ec11bfc2538b 100644 +--- a/test/recipes/80-test_cms.t ++++ b/test/recipes/80-test_cms.t +@@ -13,7 +13,7 @@ use warnings; + use POSIX; + use File::Spec::Functions qw/catfile/; + use File::Compare qw/compare_text/; +-use OpenSSL::Test qw/:DEFAULT srctop_dir srctop_file/; ++use OpenSSL::Test qw/:DEFAULT srctop_dir srctop_file with/; + use OpenSSL::Test::Utils; + + setup("test_cms"); +@@ -27,7 +27,7 @@ my $smcont = srctop_file("test", "smcont.txt"); + my ($no_des, $no_dh, $no_dsa, $no_ec, $no_ec2m, $no_rc2, $no_zlib) + = disabled qw/des dh dsa ec ec2m rc2 zlib/; + +-plan tests => 6; ++plan tests => 7; + + my @smime_pkcs7_tests = ( + +@@ -584,3 +584,14 @@ sub check_availability { + + return ""; + } ++ ++# Check that we get the expected failure return code ++with({ exit_checker => sub { return shift == 6; } }, ++ sub { ++ ok(run(app(['openssl', 'cms', '-encrypt', ++ '-in', srctop_file("test", "smcont.txt"), ++ '-stream', '-recip', ++ srctop_file("test/smime-certs", "badrsa.pem"), ++ ])), ++ "Check failure during BIO setup with -stream is handled correctly"); ++ }); +diff --git a/test/smime-certs/badrsa.pem b/test/smime-certs/badrsa.pem +new file mode 100644 +index 000000000000..f824fc226732 +--- /dev/null ++++ b/test/smime-certs/badrsa.pem +@@ -0,0 +1,18 @@ ++-----BEGIN CERTIFICATE----- ++MIIDbTCCAlWgAwIBAgIToTV4Z0iuK08vZP20oTh//hC8BDANBgkqhkiG9w0BAQ0FADAtMSswKQYD ++VfcDEyJTYW1wbGUgTEFNUFMgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MCAXDTE5MTEyMDA2NTQxOFoY ++DzIwNTIwOTI3MDY1NDE4WjAZMRcwFQYDVQQDEw5BbGljZSBMb3ZlbGFjZTCCASIwDQYJKoZIhvcN ++AQEBBQADggEPADCCAQoCggEBALT0iehYOBY+TZp/T5K2KNI05Hwr+E3wP6XTvyi6WWyTgBK9LCOw ++I2juwdRrjFBmXkk7pWpjXwsA3A5GOtz0FpfgyC7OxsVcF7q4WHWZWleYXFKlQHJD73nQwXP968+A ++/3rBX7PhO0DBbZnfitOLPgPEwjTtdg0VQQ6Wz+CRQ/YbHPKaw7aRphZO63dKvIKp4cQVtkWQHi6s ++yTjGsgkLcLNau5LZDQUdsGV+SAo3nBdWCRYV+I65x8Kf4hCxqqmjV3d/2NKRu0BXnDe/N+iDz3X0 ++zEoj0fqXgq4SWcC0nsG1lyyXt1TL270I6ATKRGJWiQVCCpDtc0NT6vdJ45bCSxgCAwEAAaOBlzCB ++lDAMBgNVHRMBAf8EAjAAMB4GA1UdEQQXMBWBE2FsaWNlQHNtaW1lLmV4YW1wbGUwEwYDVR0lBAww ++CgYIKwYBBQUHAwQwDwYDVR0PAQH/BAUDAwfAADAdBgNVHQ4EFgQUu/bMsi0dBhIcl64papAQ0yBm ++ZnMwHwYDVR0jBBgwFoAUeF8OWnjYa+RUcD2z3ez38fL6wEcwDQYJKoZIhvcNAQENBQADggEBABbW ++eonR6TMTckehDKNOabwaCIcekahAIL6l9tTzUX5ew6ufiAPlC6I/zQlmUaU0iSyFDG1NW14kNbFt ++5CAokyLhMtE4ASHBIHbiOp/ZSbUBTVYJZB61ot7w1/ol5QECSs08b8zrxIncf+t2DHGuVEy/Qq1d ++rBz8d4ay8zpqAE1tUyL5Da6ZiKUfWwZQXSI/JlbjQFzYQqTRDnzHWrg1xPeMTO1P2/cplFaseTiv ++yk4cYwOp/W9UAWymOZXF8WcJYCIUXkdcG/nEZxr057KlScrJmFXOoh7Y+8ON4iWYYcAfiNgpUFo/ ++j8BAwrKKaFvdlZS9k1Ypb2+UQY75mKJE9Bg= ++-----END CERTIFICATE----- diff --git a/debian/patches/Fix-AES-OCB-encrypt-decrypt-for-x86-AES-NI.patch b/debian/patches/Fix-AES-OCB-encrypt-decrypt-for-x86-AES-NI.patch new file mode 100644 index 0000000000000000000000000000000000000000..7696a9525281a23f77520423e6a32149564c3861 --- /dev/null +++ b/debian/patches/Fix-AES-OCB-encrypt-decrypt-for-x86-AES-NI.patch @@ -0,0 +1,69 @@ +From: Alex Chernyakhovsky <achernya@google.com> +Date: Thu, 16 Jun 2022 12:00:22 +1000 +Subject: Fix AES OCB encrypt/decrypt for x86 AES-NI +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +aesni_ocb_encrypt and aesni_ocb_decrypt operate by having a fast-path +that performs operations on 6 16-byte blocks concurrently (the +"grandloop") and then proceeds to handle the "short" tail (which can +be anywhere from 0 to 5 blocks) that remain. + +As part of initialization, the assembly initializes $len to the true +length, less 96 bytes and converts it to a pointer so that the $inp +can be compared to it. Each iteration of "grandloop" checks to see if +there's a full 96-byte chunk to process, and if so, continues. Once +this has been exhausted, it falls through to "short", which handles +the remaining zero to five blocks. + +Unfortunately, the jump at the end of "grandloop" had a fencepost +error, doing a `jb` ("jump below") rather than `jbe` (jump below or +equal). This should be `jbe`, as $inp is pointing to the *end* of the +chunk currently being handled. If $inp == $len, that means that +there's a whole 96-byte chunk waiting to be handled. If $inp > $len, +then there's 5 or fewer 16-byte blocks left to be handled, and the +fall-through is intended. + +The net effect of `jb` instead of `jbe` is that the last 16-byte block +of the last 96-byte chunk was completely omitted. The contents of +`out` in this position were never written to. Additionally, since +those bytes were never processed, the authentication tag generated is +also incorrect. + +The same fencepost error, and identical logic, exists in both +aesni_ocb_encrypt and aesni_ocb_decrypt. + +This addresses CVE-2022-2097. + +Co-authored-by: Alejandro Sedeño <asedeno@google.com> +Co-authored-by: David Benjamin <davidben@google.com> + +Reviewed-by: Paul Dale <pauli@openssl.org> +Reviewed-by: Tomas Mraz <tomas@openssl.org> +--- + crypto/aes/asm/aesni-x86.pl | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/crypto/aes/asm/aesni-x86.pl b/crypto/aes/asm/aesni-x86.pl +index fe2b26542ab6..812758e02e04 100644 +--- a/crypto/aes/asm/aesni-x86.pl ++++ b/crypto/aes/asm/aesni-x86.pl +@@ -2027,7 +2027,7 @@ my ($l_,$block,$i1,$i3,$i5) = ($rounds_,$key_,$rounds,$len,$out); + &movdqu (&QWP(-16*2,$out,$inp),$inout4); + &movdqu (&QWP(-16*1,$out,$inp),$inout5); + &cmp ($inp,$len); # done yet? +- &jb (&label("grandloop")); ++ &jbe (&label("grandloop")); + + &set_label("short"); + &add ($len,16*6); +@@ -2453,7 +2453,7 @@ my ($l_,$block,$i1,$i3,$i5) = ($rounds_,$key_,$rounds,$len,$out); + &pxor ($rndkey1,$inout5); + &movdqu (&QWP(-16*1,$out,$inp),$inout5); + &cmp ($inp,$len); # done yet? +- &jb (&label("grandloop")); ++ &jbe (&label("grandloop")); + + &set_label("short"); + &add ($len,16*6); diff --git a/debian/patches/Fix-Timing-Oracle-in-RSA-decryption.patch b/debian/patches/Fix-Timing-Oracle-in-RSA-decryption.patch new file mode 100644 index 0000000000000000000000000000000000000000..a1e35449d97781036d5b04891cec555af256ed17 --- /dev/null +++ b/debian/patches/Fix-Timing-Oracle-in-RSA-decryption.patch @@ -0,0 +1,798 @@ +From: Matt Caswell <matt@openssl.org> +Date: Fri, 20 Jan 2023 15:26:54 +0000 +Subject: Fix Timing Oracle in RSA decryption + +A timing based side channel exists in the OpenSSL RSA Decryption +implementation which could be sufficient to recover a plaintext across +a network in a Bleichenbacher style attack. To achieve a successful +decryption an attacker would have to be able to send a very large number +of trial messages for decryption. The vulnerability affects all RSA +padding modes: PKCS#1 v1.5, RSA-OEAP and RSASVE. + +Patch written by Dmitry Belyavsky and Hubert Kario + +CVE-2022-4304 +--- + crypto/bn/bn_blind.c | 14 -- + crypto/bn/bn_err.c | 2 + + crypto/bn/bn_local.h | 14 ++ + crypto/bn/build.info | 3 +- + crypto/bn/rsa_sup_mul.c | 614 ++++++++++++++++++++++++++++++++++++++++++++++++ + crypto/err/openssl.txt | 3 +- + crypto/rsa/rsa_ossl.c | 17 +- + include/crypto/bn.h | 5 + + include/openssl/bnerr.h | 1 + + 9 files changed, 653 insertions(+), 20 deletions(-) + create mode 100644 crypto/bn/rsa_sup_mul.c + +diff --git a/crypto/bn/bn_blind.c b/crypto/bn/bn_blind.c +index 76fc7ebcffc0..6e9d23932119 100644 +--- a/crypto/bn/bn_blind.c ++++ b/crypto/bn/bn_blind.c +@@ -13,20 +13,6 @@ + + #define BN_BLINDING_COUNTER 32 + +-struct bn_blinding_st { +- BIGNUM *A; +- BIGNUM *Ai; +- BIGNUM *e; +- BIGNUM *mod; /* just a reference */ +- CRYPTO_THREAD_ID tid; +- int counter; +- unsigned long flags; +- BN_MONT_CTX *m_ctx; +- int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, +- const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +- CRYPTO_RWLOCK *lock; +-}; +- + BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod) + { + BN_BLINDING *ret = NULL; +diff --git a/crypto/bn/bn_err.c b/crypto/bn/bn_err.c +index dd87c152cf37..3dd8d9a5682b 100644 +--- a/crypto/bn/bn_err.c ++++ b/crypto/bn/bn_err.c +@@ -73,6 +73,8 @@ static const ERR_STRING_DATA BN_str_functs[] = { + {ERR_PACK(ERR_LIB_BN, BN_F_BN_SET_WORDS, 0), "bn_set_words"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_STACK_PUSH, 0), "BN_STACK_push"}, + {ERR_PACK(ERR_LIB_BN, BN_F_BN_USUB, 0), "BN_usub"}, ++ {ERR_PACK(ERR_LIB_BN, BN_F_OSSL_BN_RSA_DO_UNBLIND, 0), ++ "ossl_bn_rsa_do_unblind"}, + {0, NULL} + }; + +diff --git a/crypto/bn/bn_local.h b/crypto/bn/bn_local.h +index 8ad69ccd3639..096513533b70 100644 +--- a/crypto/bn/bn_local.h ++++ b/crypto/bn/bn_local.h +@@ -263,6 +263,20 @@ struct bn_gencb_st { + } cb; + }; + ++struct bn_blinding_st { ++ BIGNUM *A; ++ BIGNUM *Ai; ++ BIGNUM *e; ++ BIGNUM *mod; /* just a reference */ ++ CRYPTO_THREAD_ID tid; ++ int counter; ++ unsigned long flags; ++ BN_MONT_CTX *m_ctx; ++ int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, ++ const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); ++ CRYPTO_RWLOCK *lock; ++}; ++ + /*- + * BN_window_bits_for_exponent_size -- macro for sliding window mod_exp functions + * +diff --git a/crypto/bn/build.info b/crypto/bn/build.info +index b9ed5322fa68..c9fe2fdada69 100644 +--- a/crypto/bn/build.info ++++ b/crypto/bn/build.info +@@ -5,7 +5,8 @@ SOURCE[../../libcrypto]=\ + bn_kron.c bn_sqrt.c bn_gcd.c bn_prime.c bn_err.c bn_sqr.c \ + {- $target{bn_asm_src} -} \ + bn_recp.c bn_mont.c bn_mpi.c bn_exp2.c bn_gf2m.c bn_nist.c \ +- bn_depr.c bn_const.c bn_x931p.c bn_intern.c bn_dh.c bn_srp.c ++ bn_depr.c bn_const.c bn_x931p.c bn_intern.c bn_dh.c bn_srp.c \ ++ rsa_sup_mul.c + + INCLUDE[bn_exp.o]=.. + +diff --git a/crypto/bn/rsa_sup_mul.c b/crypto/bn/rsa_sup_mul.c +new file mode 100644 +index 000000000000..acafefd5febf +--- /dev/null ++++ b/crypto/bn/rsa_sup_mul.c +@@ -0,0 +1,614 @@ ++#include <openssl/e_os2.h> ++#include <stddef.h> ++#include <sys/types.h> ++#include <string.h> ++#include <openssl/bn.h> ++#include <openssl/err.h> ++#include <openssl/rsaerr.h> ++#include "internal/numbers.h" ++#include "internal/constant_time.h" ++#include "bn_local.h" ++ ++# if BN_BYTES == 8 ++typedef uint64_t limb_t; ++# if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 16 ++/* nonstandard; implemented by gcc on 64-bit platforms */ ++typedef __uint128_t limb2_t; ++# define HAVE_LIMB2_T ++# endif ++# define LIMB_BIT_SIZE 64 ++# define LIMB_BYTE_SIZE 8 ++# elif BN_BYTES == 4 ++typedef uint32_t limb_t; ++typedef uint64_t limb2_t; ++# define LIMB_BIT_SIZE 32 ++# define LIMB_BYTE_SIZE 4 ++# define HAVE_LIMB2_T ++# else ++# error "Not supported" ++# endif ++ ++/* ++ * For multiplication we're using schoolbook multiplication, ++ * so if we have two numbers, each with 6 "digits" (words) ++ * the multiplication is calculated as follows: ++ * A B C D E F ++ * x I J K L M N ++ * -------------- ++ * N*F ++ * N*E ++ * N*D ++ * N*C ++ * N*B ++ * N*A ++ * M*F ++ * M*E ++ * M*D ++ * M*C ++ * M*B ++ * M*A ++ * L*F ++ * L*E ++ * L*D ++ * L*C ++ * L*B ++ * L*A ++ * K*F ++ * K*E ++ * K*D ++ * K*C ++ * K*B ++ * K*A ++ * J*F ++ * J*E ++ * J*D ++ * J*C ++ * J*B ++ * J*A ++ * I*F ++ * I*E ++ * I*D ++ * I*C ++ * I*B ++ * + I*A ++ * ========================== ++ * N*B N*D N*F ++ * + N*A N*C N*E ++ * + M*B M*D M*F ++ * + M*A M*C M*E ++ * + L*B L*D L*F ++ * + L*A L*C L*E ++ * + K*B K*D K*F ++ * + K*A K*C K*E ++ * + J*B J*D J*F ++ * + J*A J*C J*E ++ * + I*B I*D I*F ++ * + I*A I*C I*E ++ * ++ * 1+1 1+3 1+5 ++ * 1+0 1+2 1+4 ++ * 0+1 0+3 0+5 ++ * 0+0 0+2 0+4 ++ * ++ * 0 1 2 3 4 5 6 ++ * which requires n^2 multiplications and 2n full length additions ++ * as we can keep every other result of limb multiplication in two separate ++ * limbs ++ */ ++ ++#if defined HAVE_LIMB2_T ++static ossl_inline void _mul_limb(limb_t *hi, limb_t *lo, limb_t a, limb_t b) ++{ ++ limb2_t t; ++ /* ++ * this is idiomatic code to tell compiler to use the native mul ++ * those three lines will actually compile to single instruction ++ */ ++ ++ t = (limb2_t)a * b; ++ *hi = t >> LIMB_BIT_SIZE; ++ *lo = (limb_t)t; ++} ++#elif (BN_BYTES == 8) && (defined _MSC_VER) ++/* https://learn.microsoft.com/en-us/cpp/intrinsics/umul128?view=msvc-170 */ ++#pragma intrinsic(_umul128) ++static ossl_inline void _mul_limb(limb_t *hi, limb_t *lo, limb_t a, limb_t b) ++{ ++ *lo = _umul128(a, b, hi); ++} ++#else ++/* ++ * if the compiler doesn't have either a 128bit data type nor a "return ++ * high 64 bits of multiplication" ++ */ ++static ossl_inline void _mul_limb(limb_t *hi, limb_t *lo, limb_t a, limb_t b) ++{ ++ limb_t a_low = (limb_t)(uint32_t)a; ++ limb_t a_hi = a >> 32; ++ limb_t b_low = (limb_t)(uint32_t)b; ++ limb_t b_hi = b >> 32; ++ ++ limb_t p0 = a_low * b_low; ++ limb_t p1 = a_low * b_hi; ++ limb_t p2 = a_hi * b_low; ++ limb_t p3 = a_hi * b_hi; ++ ++ uint32_t cy = (uint32_t)(((p0 >> 32) + (uint32_t)p1 + (uint32_t)p2) >> 32); ++ ++ *lo = p0 + (p1 << 32) + (p2 << 32); ++ *hi = p3 + (p1 >> 32) + (p2 >> 32) + cy; ++} ++#endif ++ ++/* add two limbs with carry in, return carry out */ ++static ossl_inline limb_t _add_limb(limb_t *ret, limb_t a, limb_t b, limb_t carry) ++{ ++ limb_t carry1, carry2, t; ++ /* ++ * `c = a + b; if (c < a)` is idiomatic code that makes compilers ++ * use add with carry on assembly level ++ */ ++ ++ *ret = a + carry; ++ if (*ret < a) ++ carry1 = 1; ++ else ++ carry1 = 0; ++ ++ t = *ret; ++ *ret = t + b; ++ if (*ret < t) ++ carry2 = 1; ++ else ++ carry2 = 0; ++ ++ return carry1 + carry2; ++} ++ ++/* ++ * add two numbers of the same size, return overflow ++ * ++ * add a to b, place result in ret; all arrays need to be n limbs long ++ * return overflow from addition (0 or 1) ++ */ ++static ossl_inline limb_t add(limb_t *ret, limb_t *a, limb_t *b, size_t n) ++{ ++ limb_t c = 0; ++ ossl_ssize_t i; ++ ++ for(i = n - 1; i > -1; i--) ++ c = _add_limb(&ret[i], a[i], b[i], c); ++ ++ return c; ++} ++ ++/* ++ * return number of limbs necessary for temporary values ++ * when multiplying numbers n limbs large ++ */ ++static ossl_inline size_t mul_limb_numb(size_t n) ++{ ++ return 2 * n * 2; ++} ++ ++/* ++ * multiply two numbers of the same size ++ * ++ * multiply a by b, place result in ret; a and b need to be n limbs long ++ * ret needs to be 2*n limbs long, tmp needs to be mul_limb_numb(n) limbs ++ * long ++ */ ++static void limb_mul(limb_t *ret, limb_t *a, limb_t *b, size_t n, limb_t *tmp) ++{ ++ limb_t *r_odd, *r_even; ++ size_t i, j, k; ++ ++ r_odd = tmp; ++ r_even = &tmp[2 * n]; ++ ++ memset(ret, 0, 2 * n * sizeof(limb_t)); ++ ++ for (i = 0; i < n; i++) { ++ for (k = 0; k < i + n + 1; k++) { ++ r_even[k] = 0; ++ r_odd[k] = 0; ++ } ++ for (j = 0; j < n; j++) { ++ /* ++ * place results from even and odd limbs in separate arrays so that ++ * we don't have to calculate overflow every time we get individual ++ * limb multiplication result ++ */ ++ if (j % 2 == 0) ++ _mul_limb(&r_even[i + j], &r_even[i + j + 1], a[i], b[j]); ++ else ++ _mul_limb(&r_odd[i + j], &r_odd[i + j + 1], a[i], b[j]); ++ } ++ /* ++ * skip the least significant limbs when adding multiples of ++ * more significant limbs (they're zero anyway) ++ */ ++ add(ret, ret, r_even, n + i + 1); ++ add(ret, ret, r_odd, n + i + 1); ++ } ++} ++ ++/* modifies the value in place by performing a right shift by one bit */ ++static ossl_inline void rshift1(limb_t *val, size_t n) ++{ ++ limb_t shift_in = 0, shift_out = 0; ++ size_t i; ++ ++ for (i = 0; i < n; i++) { ++ shift_out = val[i] & 1; ++ val[i] = shift_in << (LIMB_BIT_SIZE - 1) | (val[i] >> 1); ++ shift_in = shift_out; ++ } ++} ++ ++/* extend the LSB of flag to all bits of limb */ ++static ossl_inline limb_t mk_mask(limb_t flag) ++{ ++ flag |= flag << 1; ++ flag |= flag << 2; ++ flag |= flag << 4; ++ flag |= flag << 8; ++ flag |= flag << 16; ++#if (LIMB_BYTE_SIZE == 8) ++ flag |= flag << 32; ++#endif ++ return flag; ++} ++ ++/* ++ * copy from either a or b to ret based on flag ++ * when flag == 0, then copies from b ++ * when flag == 1, then copies from a ++ */ ++static ossl_inline void cselect(limb_t flag, limb_t *ret, limb_t *a, limb_t *b, size_t n) ++{ ++ /* ++ * would be more efficient with non volatile mask, but then gcc ++ * generates code with jumps ++ */ ++ volatile limb_t mask; ++ size_t i; ++ ++ mask = mk_mask(flag); ++ for (i = 0; i < n; i++) { ++#if (LIMB_BYTE_SIZE == 8) ++ ret[i] = constant_time_select_64(mask, a[i], b[i]); ++#else ++ ret[i] = constant_time_select_32(mask, a[i], b[i]); ++#endif ++ } ++} ++ ++static limb_t _sub_limb(limb_t *ret, limb_t a, limb_t b, limb_t borrow) ++{ ++ limb_t borrow1, borrow2, t; ++ /* ++ * while it doesn't look constant-time, this is idiomatic code ++ * to tell compilers to use the carry bit from subtraction ++ */ ++ ++ *ret = a - borrow; ++ if (*ret > a) ++ borrow1 = 1; ++ else ++ borrow1 = 0; ++ ++ t = *ret; ++ *ret = t - b; ++ if (*ret > t) ++ borrow2 = 1; ++ else ++ borrow2 = 0; ++ ++ return borrow1 + borrow2; ++} ++ ++/* ++ * place the result of a - b into ret, return the borrow bit. ++ * All arrays need to be n limbs long ++ */ ++static limb_t sub(limb_t *ret, limb_t *a, limb_t *b, size_t n) ++{ ++ limb_t borrow = 0; ++ ossl_ssize_t i; ++ ++ for (i = n - 1; i > -1; i--) ++ borrow = _sub_limb(&ret[i], a[i], b[i], borrow); ++ ++ return borrow; ++} ++ ++/* return the number of limbs necessary to allocate for the mod() tmp operand */ ++static ossl_inline size_t mod_limb_numb(size_t anum, size_t modnum) ++{ ++ return (anum + modnum) * 3; ++} ++ ++/* ++ * calculate a % mod, place the result in ret ++ * size of a is defined by anum, size of ret and mod is modnum, ++ * size of tmp is returned by mod_limb_numb() ++ */ ++static void mod(limb_t *ret, limb_t *a, size_t anum, limb_t *mod, ++ size_t modnum, limb_t *tmp) ++{ ++ limb_t *atmp, *modtmp, *rettmp; ++ limb_t res; ++ size_t i; ++ ++ memset(tmp, 0, mod_limb_numb(anum, modnum) * LIMB_BYTE_SIZE); ++ ++ atmp = tmp; ++ modtmp = &tmp[anum + modnum]; ++ rettmp = &tmp[(anum + modnum) * 2]; ++ ++ for (i = modnum; i <modnum + anum; i++) ++ atmp[i] = a[i-modnum]; ++ ++ for (i = 0; i < modnum; i++) ++ modtmp[i] = mod[i]; ++ ++ for (i = 0; i < anum * LIMB_BIT_SIZE; i++) { ++ rshift1(modtmp, anum + modnum); ++ res = sub(rettmp, atmp, modtmp, anum+modnum); ++ cselect(res, atmp, atmp, rettmp, anum+modnum); ++ } ++ ++ memcpy(ret, &atmp[anum], sizeof(limb_t) * modnum); ++} ++ ++/* necessary size of tmp for a _mul_add_limb() call with provided anum */ ++static ossl_inline size_t _mul_add_limb_numb(size_t anum) ++{ ++ return 2 * (anum + 1); ++} ++ ++/* multiply a by m, add to ret, return carry */ ++static limb_t _mul_add_limb(limb_t *ret, limb_t *a, size_t anum, ++ limb_t m, limb_t *tmp) ++{ ++ limb_t carry = 0; ++ limb_t *r_odd, *r_even; ++ size_t i; ++ ++ memset(tmp, 0, sizeof(limb_t) * (anum + 1) * 2); ++ ++ r_odd = tmp; ++ r_even = &tmp[anum + 1]; ++ ++ for (i = 0; i < anum; i++) { ++ /* ++ * place the results from even and odd limbs in separate arrays ++ * so that we have to worry about carry just once ++ */ ++ if (i % 2 == 0) ++ _mul_limb(&r_even[i], &r_even[i + 1], a[i], m); ++ else ++ _mul_limb(&r_odd[i], &r_odd[i + 1], a[i], m); ++ } ++ /* assert: add() carry here will be equal zero */ ++ add(r_even, r_even, r_odd, anum + 1); ++ /* ++ * while here it will not overflow as the max value from multiplication ++ * is -2 while max overflow from addition is 1, so the max value of ++ * carry is -1 (i.e. max int) ++ */ ++ carry = add(ret, ret, &r_even[1], anum) + r_even[0]; ++ ++ return carry; ++} ++ ++static ossl_inline size_t mod_montgomery_limb_numb(size_t modnum) ++{ ++ return modnum * 2 + _mul_add_limb_numb(modnum); ++} ++ ++/* ++ * calculate a % mod, place result in ret ++ * assumes that a is in Montgomery form with the R (Montgomery modulus) being ++ * smallest power of two big enough to fit mod and that's also a power ++ * of the count of number of bits in limb_t (B). ++ * For calculation, we also need n', such that mod * n' == -1 mod B. ++ * anum must be <= 2 * modnum ++ * ret needs to be modnum words long ++ * tmp needs to be mod_montgomery_limb_numb(modnum) limbs long ++ */ ++static void mod_montgomery(limb_t *ret, limb_t *a, size_t anum, limb_t *mod, ++ size_t modnum, limb_t ni0, limb_t *tmp) ++{ ++ limb_t carry, v; ++ limb_t *res, *rp, *tmp2; ++ ossl_ssize_t i; ++ ++ res = tmp; ++ /* ++ * for intermediate result we need an integer twice as long as modulus ++ * but keep the input in the least significant limbs ++ */ ++ memset(res, 0, sizeof(limb_t) * (modnum * 2)); ++ memcpy(&res[modnum * 2 - anum], a, sizeof(limb_t) * anum); ++ rp = &res[modnum]; ++ tmp2 = &res[modnum * 2]; ++ ++ carry = 0; ++ ++ /* add multiples of the modulus to the value until R divides it cleanly */ ++ for (i = modnum; i > 0; i--, rp--) { ++ v = _mul_add_limb(rp, mod, modnum, rp[modnum - 1] * ni0, tmp2); ++ v = v + carry + rp[-1]; ++ carry |= (v != rp[-1]); ++ carry &= (v <= rp[-1]); ++ rp[-1] = v; ++ } ++ ++ /* perform the final reduction by mod... */ ++ carry -= sub(ret, rp, mod, modnum); ++ ++ /* ...conditionally */ ++ cselect(carry, ret, rp, ret, modnum); ++} ++ ++/* allocated buffer should be freed afterwards */ ++static void BN_to_limb(const BIGNUM *bn, limb_t *buf, size_t limbs) ++{ ++ int i; ++ int real_limbs = (BN_num_bytes(bn) + LIMB_BYTE_SIZE - 1) / LIMB_BYTE_SIZE; ++ limb_t *ptr = buf + (limbs - real_limbs); ++ ++ for (i = 0; i < real_limbs; i++) ++ ptr[i] = bn->d[real_limbs - i - 1]; ++} ++ ++#if LIMB_BYTE_SIZE == 8 ++static ossl_inline uint64_t be64(uint64_t host) ++{ ++ const union { ++ long one; ++ char little; ++ } is_endian = { 1 }; ++ ++ if (is_endian.little) { ++ uint64_t big = 0; ++ ++ big |= (host & 0xff00000000000000) >> 56; ++ big |= (host & 0x00ff000000000000) >> 40; ++ big |= (host & 0x0000ff0000000000) >> 24; ++ big |= (host & 0x000000ff00000000) >> 8; ++ big |= (host & 0x00000000ff000000) << 8; ++ big |= (host & 0x0000000000ff0000) << 24; ++ big |= (host & 0x000000000000ff00) << 40; ++ big |= (host & 0x00000000000000ff) << 56; ++ return big; ++ } else { ++ return host; ++ } ++} ++ ++#else ++/* Not all platforms have htobe32(). */ ++static ossl_inline uint32_t be32(uint32_t host) ++{ ++ const union { ++ long one; ++ char little; ++ } is_endian = { 1 }; ++ ++ if (is_endian.little) { ++ uint32_t big = 0; ++ ++ big |= (host & 0xff000000) >> 24; ++ big |= (host & 0x00ff0000) >> 8; ++ big |= (host & 0x0000ff00) << 8; ++ big |= (host & 0x000000ff) << 24; ++ return big; ++ } else { ++ return host; ++ } ++} ++#endif ++ ++/* ++ * We assume that intermediate, possible_arg2, blinding, and ctx are used ++ * similar to BN_BLINDING_invert_ex() arguments. ++ * to_mod is RSA modulus. ++ * buf and num is the serialization buffer and its length. ++ * ++ * Here we use classic/Montgomery multiplication and modulo. After the calculation finished ++ * we serialize the new structure instead of BIGNUMs taking endianness into account. ++ */ ++int ossl_bn_rsa_do_unblind(const BIGNUM *intermediate, ++ const BN_BLINDING *blinding, ++ const BIGNUM *possible_arg2, ++ const BIGNUM *to_mod, BN_CTX *ctx, ++ unsigned char *buf, int num) ++{ ++ limb_t *l_im = NULL, *l_mul = NULL, *l_mod = NULL; ++ limb_t *l_ret = NULL, *l_tmp = NULL, l_buf; ++ size_t l_im_count = 0, l_mul_count = 0, l_size = 0, l_mod_count = 0; ++ size_t l_tmp_count = 0; ++ int ret = 0; ++ size_t i; ++ unsigned char *tmp; ++ const BIGNUM *arg1 = intermediate; ++ const BIGNUM *arg2 = (possible_arg2 == NULL) ? blinding->Ai : possible_arg2; ++ ++ l_im_count = (BN_num_bytes(arg1) + LIMB_BYTE_SIZE - 1) / LIMB_BYTE_SIZE; ++ l_mul_count = (BN_num_bytes(arg2) + LIMB_BYTE_SIZE - 1) / LIMB_BYTE_SIZE; ++ l_mod_count = (BN_num_bytes(to_mod) + LIMB_BYTE_SIZE - 1) / LIMB_BYTE_SIZE; ++ ++ l_size = l_im_count > l_mul_count ? l_im_count : l_mul_count; ++ l_im = OPENSSL_zalloc(l_size * LIMB_BYTE_SIZE); ++ l_mul = OPENSSL_zalloc(l_size * LIMB_BYTE_SIZE); ++ l_mod = OPENSSL_zalloc(l_mod_count * LIMB_BYTE_SIZE); ++ ++ if ((l_im == NULL) || (l_mul == NULL) || (l_mod == NULL)) ++ goto err; ++ ++ BN_to_limb(arg1, l_im, l_size); ++ BN_to_limb(arg2, l_mul, l_size); ++ BN_to_limb(to_mod, l_mod, l_mod_count); ++ ++ l_ret = OPENSSL_malloc(2 * l_size * LIMB_BYTE_SIZE); ++ ++ if (blinding->m_ctx != NULL) { ++ l_tmp_count = mul_limb_numb(l_size) > mod_montgomery_limb_numb(l_mod_count) ? ++ mul_limb_numb(l_size) : mod_montgomery_limb_numb(l_mod_count); ++ l_tmp = OPENSSL_malloc(l_tmp_count * LIMB_BYTE_SIZE); ++ } else { ++ l_tmp_count = mul_limb_numb(l_size) > mod_limb_numb(2 * l_size, l_mod_count) ? ++ mul_limb_numb(l_size) : mod_limb_numb(2 * l_size, l_mod_count); ++ l_tmp = OPENSSL_malloc(l_tmp_count * LIMB_BYTE_SIZE); ++ } ++ ++ if ((l_ret == NULL) || (l_tmp == NULL)) ++ goto err; ++ ++ if (blinding->m_ctx != NULL) { ++ limb_mul(l_ret, l_im, l_mul, l_size, l_tmp); ++ mod_montgomery(l_ret, l_ret, 2 * l_size, l_mod, l_mod_count, ++ blinding->m_ctx->n0[0], l_tmp); ++ } else { ++ limb_mul(l_ret, l_im, l_mul, l_size, l_tmp); ++ mod(l_ret, l_ret, 2 * l_size, l_mod, l_mod_count, l_tmp); ++ } ++ ++ /* modulus size in bytes can be equal to num but after limbs conversion it becomes bigger */ ++ if (num < BN_num_bytes(to_mod)) { ++ BNerr(BN_F_OSSL_BN_RSA_DO_UNBLIND, ERR_R_PASSED_INVALID_ARGUMENT); ++ goto err; ++ } ++ ++ memset(buf, 0, num); ++ tmp = buf + num - BN_num_bytes(to_mod); ++ for (i = 0; i < l_mod_count; i++) { ++#if LIMB_BYTE_SIZE == 8 ++ l_buf = be64(l_ret[i]); ++#else ++ l_buf = be32(l_ret[i]); ++#endif ++ if (i == 0) { ++ int delta = LIMB_BYTE_SIZE - ((l_mod_count * LIMB_BYTE_SIZE) - num); ++ ++ memcpy(tmp, ((char *)&l_buf) + LIMB_BYTE_SIZE - delta, delta); ++ tmp += delta; ++ } else { ++ memcpy(tmp, &l_buf, LIMB_BYTE_SIZE); ++ tmp += LIMB_BYTE_SIZE; ++ } ++ } ++ ret = num; ++ ++ err: ++ OPENSSL_free(l_im); ++ OPENSSL_free(l_mul); ++ OPENSSL_free(l_mod); ++ OPENSSL_free(l_tmp); ++ OPENSSL_free(l_ret); ++ ++ return ret; ++} +diff --git a/crypto/err/openssl.txt b/crypto/err/openssl.txt +index 902e97b84355..e0f0ab7c76f8 100644 +--- a/crypto/err/openssl.txt ++++ b/crypto/err/openssl.txt +@@ -1,4 +1,4 @@ +-# Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. ++# Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. + # + # Licensed under the OpenSSL license (the "License"). You may not use + # this file except in compliance with the License. You can obtain a copy +@@ -232,6 +232,7 @@ BN_F_BN_RSHIFT:146:BN_rshift + BN_F_BN_SET_WORDS:144:bn_set_words + BN_F_BN_STACK_PUSH:148:BN_STACK_push + BN_F_BN_USUB:115:BN_usub ++BN_F_OSSL_BN_RSA_DO_UNBLIND:151:ossl_bn_rsa_do_unblind + BUF_F_BUF_MEM_GROW:100:BUF_MEM_grow + BUF_F_BUF_MEM_GROW_CLEAN:105:BUF_MEM_grow_clean + BUF_F_BUF_MEM_NEW:101:BUF_MEM_new +diff --git a/crypto/rsa/rsa_ossl.c b/crypto/rsa/rsa_ossl.c +index b52a66f6a628..6c3c0cf78d30 100644 +--- a/crypto/rsa/rsa_ossl.c ++++ b/crypto/rsa/rsa_ossl.c +@@ -465,11 +465,20 @@ static int rsa_ossl_private_decrypt(int flen, const unsigned char *from, + BN_free(d); + } + +- if (blinding) +- if (!rsa_blinding_invert(blinding, ret, unblind, ctx)) ++ if (blinding) { ++ /* ++ * ossl_bn_rsa_do_unblind() combines blinding inversion and ++ * 0-padded BN BE serialization ++ */ ++ j = ossl_bn_rsa_do_unblind(ret, blinding, unblind, rsa->n, ctx, ++ buf, num); ++ if (j == 0) + goto err; +- +- j = BN_bn2binpad(ret, buf, num); ++ } else { ++ j = BN_bn2binpad(ret, buf, num); ++ if (j < 0) ++ goto err; ++ } + + switch (padding) { + case RSA_PKCS1_PADDING: +diff --git a/include/crypto/bn.h b/include/crypto/bn.h +index 60afda1dadee..b5f36fb25aa2 100644 +--- a/include/crypto/bn.h ++++ b/include/crypto/bn.h +@@ -86,5 +86,10 @@ int bn_lshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n); + int bn_rshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n); + int bn_div_fixed_top(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, + const BIGNUM *d, BN_CTX *ctx); ++int ossl_bn_rsa_do_unblind(const BIGNUM *intermediate, ++ const BN_BLINDING *blinding, ++ const BIGNUM *possible_arg2, ++ const BIGNUM *to_mod, BN_CTX *ctx, ++ unsigned char *buf, int num); + + #endif +diff --git a/include/openssl/bnerr.h b/include/openssl/bnerr.h +index 9f3c7cfaab67..a0752cea52d7 100644 +--- a/include/openssl/bnerr.h ++++ b/include/openssl/bnerr.h +@@ -72,6 +72,7 @@ int ERR_load_BN_strings(void); + # define BN_F_BN_SET_WORDS 144 + # define BN_F_BN_STACK_PUSH 148 + # define BN_F_BN_USUB 115 ++# define BN_F_OSSL_BN_RSA_DO_UNBLIND 151 + + /* + * BN reason codes. diff --git a/debian/patches/Fix-a-UAF-resulting-from-a-bug-in-BIO_new_NDEF.patch b/debian/patches/Fix-a-UAF-resulting-from-a-bug-in-BIO_new_NDEF.patch new file mode 100644 index 0000000000000000000000000000000000000000..09f876939e6687fe9046bd2aa86fb75d41dff6a5 --- /dev/null +++ b/debian/patches/Fix-a-UAF-resulting-from-a-bug-in-BIO_new_NDEF.patch @@ -0,0 +1,99 @@ +From: Matt Caswell <matt@openssl.org> +Date: Wed, 14 Dec 2022 16:18:14 +0000 +Subject: Fix a UAF resulting from a bug in BIO_new_NDEF + +If the aux->asn1_cb() call fails in BIO_new_NDEF then the "out" BIO will +be part of an invalid BIO chain. This causes a "use after free" when the +BIO is eventually freed. + +Based on an original patch by Viktor Dukhovni and an idea from Theo +Buehler. + +Thanks to Octavio Galland for reporting this issue. +--- + crypto/asn1/bio_ndef.c | 39 ++++++++++++++++++++++++++++++++------- + 1 file changed, 32 insertions(+), 7 deletions(-) + +diff --git a/crypto/asn1/bio_ndef.c b/crypto/asn1/bio_ndef.c +index 760e4846a474..f8d4b1b9aa67 100644 +--- a/crypto/asn1/bio_ndef.c ++++ b/crypto/asn1/bio_ndef.c +@@ -49,12 +49,19 @@ static int ndef_suffix(BIO *b, unsigned char **pbuf, int *plen, void *parg); + static int ndef_suffix_free(BIO *b, unsigned char **pbuf, int *plen, + void *parg); + ++/* ++ * On success, the returned BIO owns the input BIO as part of its BIO chain. ++ * On failure, NULL is returned and the input BIO is owned by the caller. ++ * ++ * Unfortunately cannot constify this due to CMS_stream() and PKCS7_stream() ++ */ + BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it) + { + NDEF_SUPPORT *ndef_aux = NULL; + BIO *asn_bio = NULL; + const ASN1_AUX *aux = it->funcs; + ASN1_STREAM_ARG sarg; ++ BIO *pop_bio = NULL; + + if (!aux || !aux->asn1_cb) { + ASN1err(ASN1_F_BIO_NEW_NDEF, ASN1_R_STREAMING_NOT_SUPPORTED); +@@ -69,21 +76,39 @@ BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it) + out = BIO_push(asn_bio, out); + if (out == NULL) + goto err; ++ pop_bio = asn_bio; + +- BIO_asn1_set_prefix(asn_bio, ndef_prefix, ndef_prefix_free); +- BIO_asn1_set_suffix(asn_bio, ndef_suffix, ndef_suffix_free); ++ if (BIO_asn1_set_prefix(asn_bio, ndef_prefix, ndef_prefix_free) <= 0 ++ || BIO_asn1_set_suffix(asn_bio, ndef_suffix, ndef_suffix_free) <= 0 ++ || BIO_ctrl(asn_bio, BIO_C_SET_EX_ARG, 0, ndef_aux) <= 0) ++ goto err; + + /* +- * Now let callback prepends any digest, cipher etc BIOs ASN1 structure +- * needs. ++ * Now let the callback prepend any digest, cipher, etc., that the BIO's ++ * ASN1 structure needs. + */ + + sarg.out = out; + sarg.ndef_bio = NULL; + sarg.boundary = NULL; + +- if (aux->asn1_cb(ASN1_OP_STREAM_PRE, &val, it, &sarg) <= 0) ++ /* ++ * The asn1_cb(), must not have mutated asn_bio on error, leaving it in the ++ * middle of some partially built, but not returned BIO chain. ++ */ ++ if (aux->asn1_cb(ASN1_OP_STREAM_PRE, &val, it, &sarg) <= 0) { ++ /* ++ * ndef_aux is now owned by asn_bio so we must not free it in the err ++ * clean up block ++ */ ++ ndef_aux = NULL; + goto err; ++ } ++ ++ /* ++ * We must not fail now because the callback has prepended additional ++ * BIOs to the chain ++ */ + + ndef_aux->val = val; + ndef_aux->it = it; +@@ -91,11 +116,11 @@ BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it) + ndef_aux->boundary = sarg.boundary; + ndef_aux->out = out; + +- BIO_ctrl(asn_bio, BIO_C_SET_EX_ARG, 0, ndef_aux); +- + return sarg.ndef_bio; + + err: ++ /* BIO_pop() is NULL safe */ ++ (void)BIO_pop(pop_bio); + BIO_free(asn_bio); + OPENSSL_free(ndef_aux); + return NULL; diff --git a/debian/patches/series b/debian/patches/series index dc58b02ed225430f65eac8d7f7be3baa0657d932..6b210450003c6fcc249c9a79f73c0cb4370ad5cd 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -9,3 +9,11 @@ Fix-file-operations-in-c_rehash.patch Update-expired-SCT-certificates.patch ct_test.c-Update-the-epoch-time.patch Update-further-expiring-certificates-that-affect-tests.patch +Avoid-dangling-ptrs-in-header-and-data-params-for-PEM_rea.patch +Add-a-test-for-CVE-2022-4450.patch +CVE-2023-0286-Fix-GENERAL_NAME_cmp-for-x400Address-1.1.1.patch +Fix-a-UAF-resulting-from-a-bug-in-BIO_new_NDEF.patch +Check-CMS-failure-during-BIO-setup-with-stream-is-handled.patch +Fix-Timing-Oracle-in-RSA-decryption.patch +Fix-AES-OCB-encrypt-decrypt-for-x86-AES-NI.patch +AES-OCB-test-vectors.patch