diff options
author | lauren n. liberda <lauren@selfisekai.rocks> | 2023-11-20 04:59:52 +0100 |
---|---|---|
committer | lauren n. liberda <lauren@selfisekai.rocks> | 2023-11-20 05:27:28 +0100 |
commit | 109910c17d51d060eec185e649bb6a2d513f010d (patch) | |
tree | bf72a72834a28e621b3f1944511e63af3f419cc5 | |
parent | de917b37d40e9801feccc4636c66e4b1f5daeac1 (diff) |
main/openssl: patch CVE-2023-5678
-rw-r--r-- | main/openssl/APKBUILD | 6 | ||||
-rw-r--r-- | main/openssl/CVE-2023-5678.patch | 178 |
2 files changed, 183 insertions, 1 deletions
diff --git a/main/openssl/APKBUILD b/main/openssl/APKBUILD index c1fb8e7e03c..b8a895f51e8 100644 --- a/main/openssl/APKBUILD +++ b/main/openssl/APKBUILD @@ -3,7 +3,7 @@ pkgname=openssl pkgver=1.1.1w _abiver=${pkgver%.*} -pkgrel=0 +pkgrel=1 pkgdesc="toolkit for transport layer security (TLS) - version 1.1" url="https://www.openssl.org/" arch="all" @@ -17,10 +17,13 @@ subpackages="$pkgname-dbg $pkgname-libs-static:_static $pkgname-dev source="https://www.openssl.org/source/openssl-$pkgver.tar.gz man-section.patch ppc64.patch + CVE-2023-5678.patch " builddir="$srcdir/openssl-$pkgver" # secfixes: +# 1.1.1w-r1: +# - CVE-2023-5678 # 1.1.1v-r0: # - CVE-2023-3817 # 1.1.1u-r2: @@ -185,4 +188,5 @@ sha512sums=" b4c625fe56a4e690b57b6a011a225ad0cb3af54bd8fb67af77b5eceac55cc7191291d96a660c5b568a08a2fbf62b4612818e7cca1bb95b2b6b4fc649b0552b6d openssl-1.1.1w.tar.gz 43c3255118db6f5f340dc865c0f25ccbcafe5bf7507585244ca59b4d27daf533d6c3171aa32a8685cbb6200104bec535894b633de13feaadff87ab86739a445a man-section.patch e040f23770d52b988578f7ff84d77563340f37c026db7643db8e4ef18e795e27d10cb42cb8656da4d9c57a28283a2828729d70f940edc950c3422a54fea55509 ppc64.patch +98b12a6989932c3fcf7d7c5520784885a24a26dc473b50f7f6287d0ab76dda89469ce90b0eb867c9063b26144ed5fa17fcb8a5cea600b77a100f0f8b5e7d6eeb CVE-2023-5678.patch " diff --git a/main/openssl/CVE-2023-5678.patch b/main/openssl/CVE-2023-5678.patch new file mode 100644 index 00000000000..ba5f17363c6 --- /dev/null +++ b/main/openssl/CVE-2023-5678.patch @@ -0,0 +1,178 @@ +based on: https://build.opensuse.org/package/view_file/openSUSE:Factory/openssl-1_1/openssl-CVE-2023-5678.patch?expand=1 + +From db925ae2e65d0d925adef429afc37f75bd1c2017 Mon Sep 17 00:00:00 2001 +From: Richard Levitte <levitte@openssl.org> +Date: Fri, 20 Oct 2023 09:18:19 +0200 +Subject: [PATCH] Make DH_check_pub_key() and DH_generate_key() safer yet + +We already check for an excessively large P in DH_generate_key(), but not in +DH_check_pub_key(), and none of them check for an excessively large Q. + +This change adds all the missing excessive size checks of P and Q. + +It's to be noted that behaviours surrounding excessively sized P and Q +differ. DH_check() raises an error on the excessively sized P, but only +sets a flag for the excessively sized Q. This behaviour is mimicked in +DH_check_pub_key(). + +Reviewed-by: Tomas Mraz <tomas@openssl.org> +Reviewed-by: Matt Caswell <matt@openssl.org> +Reviewed-by: Hugo Landau <hlandau@openssl.org> +(Merged from https://github.com/openssl/openssl/pull/22518) + +(cherry picked from commit ddeb4b6c6d527e54ce9a99cba785c0f7776e54b6) +--- + crypto/dh/dh_check.c | 12 ++++++++++++ + crypto/dh/dh_err.c | 3 ++- + crypto/dh/dh_key.c | 12 ++++++++++++ + crypto/err/openssl.txt | 1 + + include/crypto/dherr.h | 2 +- + include/openssl/dh.h | 6 +++--- + include/openssl/dherr.h | 3 ++- + 7 files changed, 33 insertions(+), 6 deletions(-) + +Index: openssl-1.1.1w/crypto/dh/dh_err.c +=================================================================== +--- openssl-1.1.1w.orig/crypto/dh/dh_err.c ++++ openssl-1.1.1w/crypto/dh/dh_err.c +@@ -21,6 +21,7 @@ static const ERR_STRING_DATA DH_str_func + {ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK, 0), "DH_check"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK_EX, 0), "DH_check_ex"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK_PARAMS_EX, 0), "DH_check_params_ex"}, ++ {ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK_PUB_KEY, 0), "DH_check_pub_key"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK_PUB_KEY_EX, 0), "DH_check_pub_key_ex"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_CMS_DECRYPT, 0), "dh_cms_decrypt"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_CMS_SET_PEERKEY, 0), "dh_cms_set_peerkey"}, +@@ -87,6 +88,7 @@ static const ERR_STRING_DATA DH_str_reas + {ERR_PACK(ERR_LIB_DH, 0, DH_R_PARAMETER_ENCODING_ERROR), + "parameter encoding error"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_PEER_KEY_ERROR), "peer key error"}, ++ {ERR_PACK(ERR_LIB_DH, 0, DH_R_Q_TOO_LARGE), "q too large"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_SHARED_INFO_ERROR), "shared info error"}, + {ERR_PACK(ERR_LIB_DH, 0, DH_R_UNABLE_TO_CHECK_GENERATOR), + "unable to check generator"}, +Index: openssl-1.1.1w/crypto/err/openssl.txt +=================================================================== +--- openssl-1.1.1w.orig/crypto/err/openssl.txt ++++ openssl-1.1.1w/crypto/err/openssl.txt +@@ -404,6 +404,7 @@ DH_F_DH_BUILTIN_GENPARAMS:106:dh_builtin + DH_F_DH_CHECK:126:DH_check + DH_F_DH_CHECK_EX:121:DH_check_ex + DH_F_DH_CHECK_PARAMS_EX:122:DH_check_params_ex ++DH_F_DH_CHECK_PUB_KEY:128:DH_check_pub_key + DH_F_DH_CHECK_PUB_KEY_EX:123:DH_check_pub_key_ex + DH_F_DH_CMS_DECRYPT:114:dh_cms_decrypt + DH_F_DH_CMS_SET_PEERKEY:115:dh_cms_set_peerkey +@@ -2226,6 +2227,7 @@ DH_R_NO_PARAMETERS_SET:107:no parameters + DH_R_NO_PRIVATE_VALUE:100:no private value + DH_R_PARAMETER_ENCODING_ERROR:105:parameter encoding error + DH_R_PEER_KEY_ERROR:111:peer key error ++DH_R_Q_TOO_LARGE:130:q too large + DH_R_SHARED_INFO_ERROR:113:shared info error + DH_R_UNABLE_TO_CHECK_GENERATOR:121:unable to check generator + DSA_R_BAD_Q_VALUE:102:bad q value +Index: openssl-1.1.1w/include/openssl/dherr.h +=================================================================== +--- openssl-1.1.1w.orig/include/openssl/dherr.h ++++ openssl-1.1.1w/include/openssl/dherr.h +@@ -31,6 +31,7 @@ int ERR_load_DH_strings(void); + # define DH_F_DH_CHECK 126 + # define DH_F_DH_CHECK_EX 121 + # define DH_F_DH_CHECK_PARAMS_EX 122 ++# define DH_F_DH_CHECK_PUB_KEY 128 + # define DH_F_DH_CHECK_PUB_KEY_EX 123 + # define DH_F_DH_CMS_DECRYPT 114 + # define DH_F_DH_CMS_SET_PEERKEY 115 +@@ -84,6 +85,7 @@ int ERR_load_DH_strings(void); + # define DH_R_NO_PRIVATE_VALUE 100 + # define DH_R_PARAMETER_ENCODING_ERROR 105 + # define DH_R_PEER_KEY_ERROR 111 ++# define DH_R_Q_TOO_LARGE 130 + # define DH_R_SHARED_INFO_ERROR 113 + # define DH_R_UNABLE_TO_CHECK_GENERATOR 121 + +Index: openssl-1.1.1w/crypto/dh/dh_check.c +=================================================================== +--- openssl-1.1.1w.orig/crypto/dh/dh_check.c ++++ openssl-1.1.1w/crypto/dh/dh_check.c +@@ -193,6 +193,18 @@ + + int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *ret) + { ++ /* Don't do any checks at all with an excessively large modulus */ ++ if (BN_num_bits(dh->p) > OPENSSL_DH_CHECK_MAX_MODULUS_BITS) { ++ DHerr(DH_F_DH_CHECK_PUB_KEY, DH_R_MODULUS_TOO_LARGE); ++ *ret = DH_MODULUS_TOO_LARGE | DH_CHECK_PUBKEY_INVALID; ++ return 0; ++ } ++ ++ if (dh->q != NULL && BN_ucmp(dh->p, dh->q) < 0) { ++ *ret |= DH_CHECK_INVALID_Q_VALUE | DH_CHECK_PUBKEY_INVALID; ++ return 1; ++ } ++ + int ok = 0; + BIGNUM *tmp = NULL; + BN_CTX *ctx = NULL; + +Index: openssl-1.1.1w/crypto/dh/dh_key.c +=================================================================== +--- openssl-1.1.1w.orig/crypto/dh/dh_key.c ++++ openssl-1.1.1w/crypto/dh/dh_key.c +@@ -51,6 +51,12 @@ int DH_compute_key(unsigned char *key, c + int ret = 0, i; + volatile size_t npad = 0, mask = 1; + ++ if (dh->q != NULL ++ && BN_num_bits(dh->q) > OPENSSL_DH_MAX_MODULUS_BITS) { ++ DHerr(DH_F_COMPUTE_KEY, DH_R_Q_TOO_LARGE); ++ return 0; ++ } ++ + /* compute the key; ret is constant unless compute_key is external */ + if ((ret = dh->meth->compute_key(key, pub_key, dh)) <= 0) + return ret; +@@ -147,6 +153,12 @@ static int generate_key(DH *dh) + return 0; + } + ++ if (dh->q != NULL ++ && BN_num_bits(dh->q) > OPENSSL_DH_MAX_MODULUS_BITS) { ++ DHerr(DH_F_GENERATE_KEY, DH_R_Q_TOO_LARGE); ++ return 0; ++ } ++ + ctx = BN_CTX_new(); + if (ctx == NULL) + goto err; +Index: openssl-1.1.1w/doc/man3/DH_generate_parameters.pod +=================================================================== +--- openssl-1.1.1w.orig/doc/man3/DH_generate_parameters.pod ++++ openssl-1.1.1w/doc/man3/DH_generate_parameters.pod +@@ -73,6 +73,10 @@ The generator B<g> is not suitable. + Note that the lack of this bit doesn't guarantee that B<g> is + suitable, unless B<p> is known to be a strong prime. + ++=item DH_MODULUS_TOO_LARGE ++ ++The modulus is too large. ++ + =back + + DH_check() confirms that the Diffie-Hellman parameters B<dh> are valid. The +Index: openssl-1.1.1w/include/openssl/dh.h +=================================================================== +--- openssl-1.1.1w.orig/include/openssl/dh.h ++++ openssl-1.1.1w/include/openssl/dh.h +@@ -78,8 +78,9 @@ DECLARE_ASN1_ITEM(DHparams) + # define DH_UNABLE_TO_CHECK_GENERATOR 0x04 + # define DH_NOT_SUITABLE_GENERATOR 0x08 + # define DH_CHECK_Q_NOT_PRIME 0x10 +-# define DH_CHECK_INVALID_Q_VALUE 0x20 ++# define DH_CHECK_INVALID_Q_VALUE 0x20 /* +DH_check_pub_key */ + # define DH_CHECK_INVALID_J_VALUE 0x40 ++# define DH_MODULUS_TOO_LARGE 0x100 /* +DH_check_pub_key */ + + /* DH_check_pub_key error codes */ + # define DH_CHECK_PUBKEY_TOO_SMALL 0x01 + |