| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent e4a4f63 commit ddbc1aa
65 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -28,6 +28,72 @@ OpenSSL Releases | |||
| 28 | 28 | OpenSSL 3.5 | |
| 29 | 29 | ----------- | |
| 30 | 30 | ||
| 31 | + ### Changes between 3.5.3 and 3.5.4 [30 Sep 2025] | ||
| 32 | + | ||
| 33 | + * Fix Out-of-bounds read & write in RFC 3211 KEK Unwrap | ||
| 34 | + | ||
| 35 | + Issue summary: An application trying to decrypt CMS messages encrypted using | ||
| 36 | + password based encryption can trigger an out-of-bounds read and write. | ||
| 37 | + | ||
| 38 | + Impact summary: This out-of-bounds read may trigger a crash which leads to | ||
| 39 | + Denial of Service for an application. The out-of-bounds write can cause | ||
| 40 | + a memory corruption which can have various consequences including | ||
| 41 | + a Denial of Service or Execution of attacker-supplied code. | ||
| 42 | + | ||
| 43 | + The issue was reported by Stanislav Fort (Aisle Research). | ||
| 44 | + | ||
| 45 | + ([CVE-2025-9230]) | ||
| 46 | + | ||
| 47 | + *Viktor Dukhovni* | ||
| 48 | + | ||
| 49 | + * Fix Timing side-channel in SM2 algorithm on 64 bit ARM | ||
| 50 | + | ||
| 51 | + Issue summary: A timing side-channel which could potentially allow remote | ||
| 52 | + recovery of the private key exists in the SM2 algorithm implementation on | ||
| 53 | + 64 bit ARM platforms. | ||
| 54 | + | ||
| 55 | + Impact summary: A timing side-channel in SM2 signature computations on | ||
| 56 | + 64 bit ARM platforms could allow recovering the private key by an attacker. | ||
| 57 | + | ||
| 58 | + The issue was reported by Stanislav Fort (Aisle Research). | ||
| 59 | + | ||
| 60 | + ([CVE-2025-9231]) | ||
| 61 | + | ||
| 62 | + *Stanislav Fort and Tomáš Mráz* | ||
| 63 | + | ||
| 64 | + * Fix Out-of-bounds read in HTTP client no_proxy handling | ||
| 65 | + | ||
| 66 | + Issue summary: An application using the OpenSSL HTTP client API functions | ||
| 67 | + may trigger an out-of-bounds read if the "no_proxy" environment variable is | ||
| 68 | + set and the host portion of the authority component of the HTTP URL is an | ||
| 69 | + IPv6 address. | ||
| 70 | + | ||
| 71 | + Impact summary: An out-of-bounds read can trigger a crash which leads to | ||
| 72 | + Denial of Service for an application. | ||
| 73 | + | ||
| 74 | + The issue was reported by Stanislav Fort (Aisle Research). | ||
| 75 | + | ||
| 76 | + ([CVE-2025-9232]) | ||
| 77 | + | ||
| 78 | + *Stanislav Fort* | ||
| 79 | + | ||
| 80 | + * The FIPS provider no longer performs a PCT on key import for ECX keys | ||
| 81 | + (that was introduced in 3.5.2), following the latest update | ||
| 82 | + on that requirement in FIPS 140-3 IG 10.3.A additional comment 1. | ||
| 83 | + | ||
| 84 | + *Eugene Syromiatnikov* | ||
| 85 | + | ||
| 86 | + * Fixed the length of the ASN.1 sequence for the SM3 digests of RSA-encrypted | ||
| 87 | + signatures. | ||
| 88 | + | ||
| 89 | + *Xiao Lou Dong Feng* | ||
| 90 | + | ||
| 91 | + * Reverted the synthesised `OPENSSL_VERSION_NUMBER` change for the release | ||
| 92 | + builds, as it broke some exiting applications that relied on the previous | ||
| 93 | + 3.x semantics, as documented in `OpenSSL_version(3)`. | ||
| 94 | + | ||
| 95 | + *Richard Levitte* | ||
| 96 | + | ||
| 31 | 97 | ### Changes between 3.5.2 and 3.5.3 [16 Sep 2025] | |
| 32 | 98 | ||
| 33 | 99 | * Avoided a potential race condition introduced in 3.5.1, where | |
@@ -21284,6 +21350,9 @@ ndif | |||
| 21284 | 21350 | ||
| 21285 | 21351 | <!-- Links --> | |
| 21286 | 21352 | ||
| 21353 | + [CVE-2025-9232]: https://www.openssl.org/news/vulnerabilities.html#CVE-2025-9232 | ||
| 21354 | + [CVE-2025-9231]: https://www.openssl.org/news/vulnerabilities.html#CVE-2025-9231 | ||
| 21355 | + [CVE-2025-9230]: https://www.openssl.org/news/vulnerabilities.html#CVE-2025-9230 | ||
| 21287 | 21356 | [CVE-2025-4575]: https://www.openssl.org/news/vulnerabilities.html#CVE-2025-4575 | |
| 21288 | 21357 | [CVE-2024-13176]: https://www.openssl.org/news/vulnerabilities.html#CVE-2024-13176 | |
| 21289 | 21358 | [CVE-2024-9143]: https://www.openssl.org/news/vulnerabilities.html#CVE-2024-9143 | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -23,19 +23,46 @@ OpenSSL Releases | |||
| 23 | 23 | OpenSSL 3.5 | |
| 24 | 24 | ----------- | |
| 25 | 25 | ||
| 26 | + ### Major changes between OpenSSL 3.5.3 and OpenSSL 3.5.4 [30 Sep 2025] | ||
| 27 | + | ||
| 28 | + OpenSSL 3.5.4 is a security patch release. The most severe CVE fixed in this | ||
| 29 | + release is Moderate. | ||
| 30 | + | ||
| 31 | + This release incorporates the following bug fixes and mitigations: | ||
| 32 | + | ||
| 33 | + * Fix Out-of-bounds read & write in RFC 3211 KEK Unwrap. | ||
| 34 | + ([CVE-2025-9230]) | ||
| 35 | + | ||
| 36 | + * Fix Timing side-channel in SM2 algorithm on 64 bit ARM. | ||
| 37 | + ([CVE-2025-9231]) | ||
| 38 | + | ||
| 39 | + * Fix Out-of-bounds read in HTTP client no_proxy handling. | ||
| 40 | + ([CVE-2025-9232]) | ||
| 41 | + | ||
| 42 | + * Reverted the synthesised `OPENSSL_VERSION_NUMBER` change for the release | ||
| 43 | + builds, as it broke some exiting applications that relied on the previous | ||
| 44 | + 3.x semantics, as documented in `OpenSSL_version(3)`. | ||
| 45 | + | ||
| 26 | 46 | ### Major changes between OpenSSL 3.5.2 and OpenSSL 3.5.3 [16 Sep 2025] | |
| 27 | 47 | ||
| 28 | - * Added FIPS 140-3 PCT on DH key generation. | ||
| 48 | + OpenSSL 3.5.3 is a bug fix release. | ||
| 49 | + | ||
| 50 | + This release incorporates the following bug fixes and mitigations: | ||
| 29 | 51 | ||
| 30 | - *Nikola Pajkovsky* | ||
| 52 | + * Added FIPS 140-3 PCT on DH key generation. | ||
| 31 | 53 | ||
| 32 | 54 | * Fixed the synthesised `OPENSSL_VERSION_NUMBER`. | |
| 33 | 55 | ||
| 34 | - *Richard Levitte* | ||
| 56 | + * Removed PCT on key import in the FIPS provider as it is not required by | ||
| 57 | + the standard. | ||
| 35 | 58 | ||
| 36 | 59 | ### Major changes between OpenSSL 3.5.1 and OpenSSL 3.5.2 [5 Aug 2025] | |
| 37 | 60 | ||
| 38 | - * none | ||
| 61 | + OpenSSL 3.5.2 is a bug fix release. | ||
| 62 | + | ||
| 63 | + This release incorporates the following bug fixes and mitigations: | ||
| 64 | + | ||
| 65 | + * The FIPS provider now performs a PCT on key import for RSA, EC and ECX. | ||
| 39 | 66 | ||
| 40 | 67 | ### Major changes between OpenSSL 3.5.0 and OpenSSL 3.5.1 [1 Jul 2025] | |
| 41 | 68 | ||
@@ -45,7 +72,7 @@ release is Low. | |||
| 45 | 72 | This release incorporates the following bug fixes and mitigations: | |
| 46 | 73 | ||
| 47 | 74 | * Fix x509 application adds trusted use instead of rejected use. | |
| 48 | - ([CVE-2025-4575]) | ||
| 75 | + ([CVE-2025-4575]) | ||
| 49 | 76 | ||
| 50 | 77 | ### Major changes between OpenSSL 3.4 and OpenSSL 3.5.0 [8 Apr 2025] | |
| 51 | 78 | ||
@@ -1913,6 +1940,9 @@ OpenSSL 0.9.x | |||
| 1913 | 1940 | * Support for various new platforms | |
| 1914 | 1941 | ||
| 1915 | 1942 | <!-- Links --> | |
| 1943 | + [CVE-2025-9232]: https://www.openssl.org/news/vulnerabilities.html#CVE-2025-9232 | ||
| 1944 | + [CVE-2025-9231]: https://www.openssl.org/news/vulnerabilities.html#CVE-2025-9231 | ||
| 1945 | + [CVE-2025-9230]: https://www.openssl.org/news/vulnerabilities.html#CVE-2025-9230 | ||
| 1916 | 1946 | [CVE-2025-4575]: https://www.openssl.org/news/vulnerabilities.html#CVE-2025-4575 | |
| 1917 | 1947 | [CVE-2024-13176]: https://www.openssl.org/news/vulnerabilities.html#CVE-2024-13176 | |
| 1918 | 1948 | [CVE-2024-9143]: https://www.openssl.org/news/vulnerabilities.html#CVE-2024-9143 | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,7 +1,7 @@ | |||
| 1 | 1 | MAJOR=3 | |
| 2 | 2 | MINOR=5 | |
| 3 | - PATCH=3 | ||
| 3 | + PATCH=4 | ||
| 4 | 4 | PRE_RELEASE_TAG= | |
| 5 | 5 | BUILD_METADATA= | |
| 6 | - RELEASE_DATE="16 Sep 2025" | ||
| 6 | + RELEASE_DATE="30 Sep 2025" | ||
| 7 | 7 | SHLIB_VERSION=3 | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -331,14 +331,22 @@ int storeutl_main(int argc, char *argv[]) | |||
| 331 | 331 | static int indent_printf(int indent, BIO *bio, const char *format, ...) | |
| 332 | 332 | { | |
| 333 | 333 | va_list args; | |
| 334 | - int ret; | ||
| 334 | + int ret, vret; | ||
| 335 | + | ||
| 336 | + ret = BIO_printf(bio, "%*s", indent, ""); | ||
| 337 | + if (ret < 0) | ||
| 338 | + return ret; | ||
| 335 | 339 | ||
| 336 | 340 | va_start(args, format); | |
| 341 | + vret = BIO_vprintf(bio, format, args); | ||
| 342 | + va_end(args); | ||
| 337 | 343 | ||
| 338 | - ret = BIO_printf(bio, "%*s", indent, "") + BIO_vprintf(bio, format, args); | ||
| 344 | + if (vret < 0) | ||
| 345 | + return vret; | ||
| 346 | + if (vret > INT_MAX - ret) | ||
| 347 | + return INT_MAX; | ||
| 339 | 348 | ||
| 340 | - va_end(args); | ||
| 341 | - return ret; | ||
| 349 | + return ret + vret; | ||
| 342 | 350 | } | |
| 343 | 351 | ||
| 344 | 352 | static int process(const char *uri, const UI_METHOD *uimeth, PW_CB_DATA *uidata, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -287,7 +287,7 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr) | |||
| 287 | 287 | if (fp == NULL) { | |
| 288 | 288 | ERR_raise_data(ERR_LIB_SYS, get_last_sys_error(), | |
| 289 | 289 | "calling fopen(%s, %s)", | |
| 290 | - ptr, p); | ||
| 290 | + (const char *)ptr, p); | ||
| 291 | 291 | ERR_raise(ERR_LIB_BIO, ERR_R_SYS_LIB); | |
| 292 | 292 | ret = 0; | |
| 293 | 293 | break; | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -242,7 +242,7 @@ static int kek_unwrap_key(unsigned char *out, size_t *outlen, | |||
| 242 | 242 | /* Check byte failure */ | |
| 243 | 243 | goto err; | |
| 244 | 244 | } | |
| 245 | - if (inlen < (size_t)(tmp[0] - 4)) { | ||
| 245 | + if (inlen < 4 + (size_t)tmp[0]) { | ||
| 246 | 246 | /* Invalid length value */ | |
| 247 | 247 | goto err; | |
| 248 | 248 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,5 +1,5 @@ | |||
| 1 | 1 | /* | |
| 2 | - * Copyright 2023 The OpenSSL Project Authors. All Rights Reserved. | ||
| 2 | + * Copyright 2023-2025 The OpenSSL Project Authors. All Rights Reserved. | ||
| 3 | 3 | * | |
| 4 | 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use | |
| 5 | 5 | * this file except in compliance with the License. You can obtain a copy | |
@@ -56,10 +56,6 @@ ALIGN32 static const BN_ULONG def_p[P256_LIMBS] = { | |||
| 56 | 56 | 0xffffffffffffffff, 0xffffffff00000000, | |
| 57 | 57 | 0xffffffffffffffff, 0xfffffffeffffffff | |
| 58 | 58 | }; | |
| 59 | - ALIGN32 static const BN_ULONG def_ord[P256_LIMBS] = { | ||
| 60 | - 0x53bbf40939d54123, 0x7203df6b21c6052b, | ||
| 61 | - 0xffffffffffffffff, 0xfffffffeffffffff | ||
| 62 | - }; | ||
| 63 | 59 | ||
| 64 | 60 | ALIGN32 static const BN_ULONG ONE[P256_LIMBS] = {1, 0, 0, 0}; | |
| 65 | 61 | ||
@@ -177,13 +173,6 @@ static ossl_inline void ecp_sm2p256_mod_inverse(BN_ULONG* out, | |||
| 177 | 173 | BN_MOD_INV(out, in, ecp_sm2p256_div_by_2, ecp_sm2p256_sub, def_p); | |
| 178 | 174 | } | |
| 179 | 175 | ||
| 180 | - /* Modular inverse mod order |out| = |in|^(-1) % |ord|. */ | ||
| 181 | - static ossl_inline void ecp_sm2p256_mod_ord_inverse(BN_ULONG* out, | ||
| 182 | - const BN_ULONG* in) { | ||
| 183 | - BN_MOD_INV(out, in, ecp_sm2p256_div_by_2_mod_ord, ecp_sm2p256_sub_mod_ord, | ||
| 184 | - def_ord); | ||
| 185 | - } | ||
| 186 | - | ||
| 187 | 176 | /* Point double: R <- P + P */ | |
| 188 | 177 | static void ecp_sm2p256_point_double(P256_POINT *R, const P256_POINT *P) | |
| 189 | 178 | { | |
@@ -454,52 +443,6 @@ static int ecp_sm2p256_is_affine_G(const EC_POINT *generator) | |||
| 454 | 443 | } | |
| 455 | 444 | #endif | |
| 456 | 445 | ||
| 457 | - /* | ||
| 458 | - * Convert Jacobian coordinate point into affine coordinate (x,y) | ||
| 459 | - */ | ||
| 460 | - static int ecp_sm2p256_get_affine(const EC_GROUP *group, | ||
| 461 | - const EC_POINT *point, | ||
| 462 | - BIGNUM *x, BIGNUM *y, BN_CTX *ctx) | ||
| 463 | - { | ||
| 464 | - ALIGN32 BN_ULONG z_inv2[P256_LIMBS] = {0}; | ||
| 465 | - ALIGN32 BN_ULONG z_inv3[P256_LIMBS] = {0}; | ||
| 466 | - ALIGN32 BN_ULONG x_aff[P256_LIMBS] = {0}; | ||
| 467 | - ALIGN32 BN_ULONG y_aff[P256_LIMBS] = {0}; | ||
| 468 | - ALIGN32 BN_ULONG point_x[P256_LIMBS] = {0}; | ||
| 469 | - ALIGN32 BN_ULONG point_y[P256_LIMBS] = {0}; | ||
| 470 | - ALIGN32 BN_ULONG point_z[P256_LIMBS] = {0}; | ||
| 471 | - | ||
| 472 | - if (EC_POINT_is_at_infinity(group, point)) { | ||
| 473 | - ECerr(ERR_LIB_EC, EC_R_POINT_AT_INFINITY); | ||
| 474 | - return 0; | ||
| 475 | - } | ||
| 476 | - | ||
| 477 | - if (ecp_sm2p256_bignum_field_elem(point_x, point->X) <= 0 | ||
| 478 | - || ecp_sm2p256_bignum_field_elem(point_y, point->Y) <= 0 | ||
| 479 | - || ecp_sm2p256_bignum_field_elem(point_z, point->Z) <= 0) { | ||
| 480 | - ECerr(ERR_LIB_EC, EC_R_COORDINATES_OUT_OF_RANGE); | ||
| 481 | - return 0; | ||
| 482 | - } | ||
| 483 | - | ||
| 484 | - ecp_sm2p256_mod_inverse(z_inv3, point_z); | ||
| 485 | - ecp_sm2p256_sqr(z_inv2, z_inv3); | ||
| 486 | - | ||
| 487 | - if (x != NULL) { | ||
| 488 | - ecp_sm2p256_mul(x_aff, point_x, z_inv2); | ||
| 489 | - if (!bn_set_words(x, x_aff, P256_LIMBS)) | ||
| 490 | - return 0; | ||
| 491 | - } | ||
| 492 | - | ||
| 493 | - if (y != NULL) { | ||
| 494 | - ecp_sm2p256_mul(z_inv3, z_inv3, z_inv2); | ||
| 495 | - ecp_sm2p256_mul(y_aff, point_y, z_inv3); | ||
| 496 | - if (!bn_set_words(y, y_aff, P256_LIMBS)) | ||
| 497 | - return 0; | ||
| 498 | - } | ||
| 499 | - | ||
| 500 | - return 1; | ||
| 501 | - } | ||
| 502 | - | ||
| 503 | 446 | /* r = sum(scalar[i]*point[i]) */ | |
| 504 | 447 | static int ecp_sm2p256_windowed_mul(const EC_GROUP *group, | |
| 505 | 448 | P256_POINT *r, | |
@@ -689,44 +632,6 @@ static int ecp_sm2p256_field_sqr(const EC_GROUP *group, BIGNUM *r, | |||
| 689 | 632 | return 1; | |
| 690 | 633 | } | |
| 691 | 634 | ||
| 692 | - static int ecp_sm2p256_inv_mod_ord(const EC_GROUP *group, BIGNUM *r, | ||
| 693 | - const BIGNUM *x, BN_CTX *ctx) | ||
| 694 | - { | ||
| 695 | - int ret = 0; | ||
| 696 | - ALIGN32 BN_ULONG t[P256_LIMBS] = {0}; | ||
| 697 | - ALIGN32 BN_ULONG out[P256_LIMBS] = {0}; | ||
| 698 | - | ||
| 699 | - if (bn_wexpand(r, P256_LIMBS) == NULL) { | ||
| 700 | - ECerr(ERR_LIB_EC, ERR_R_BN_LIB); | ||
| 701 | - goto err; | ||
| 702 | - } | ||
| 703 | - | ||
| 704 | - if ((BN_num_bits(x) > 256) || BN_is_negative(x)) { | ||
| 705 | - BIGNUM *tmp; | ||
| 706 | - | ||
| 707 | - if ((tmp = BN_CTX_get(ctx)) == NULL | ||
| 708 | - || !BN_nnmod(tmp, x, group->order, ctx)) { | ||
| 709 | - ECerr(ERR_LIB_EC, ERR_R_BN_LIB); | ||
| 710 | - goto err; | ||
| 711 | - } | ||
| 712 | - x = tmp; | ||
| 713 | - } | ||
| 714 | - | ||
| 715 | - if (!ecp_sm2p256_bignum_field_elem(t, x)) { | ||
| 716 | - ECerr(ERR_LIB_EC, EC_R_COORDINATES_OUT_OF_RANGE); | ||
| 717 | - goto err; | ||
| 718 | - } | ||
| 719 | - | ||
| 720 | - ecp_sm2p256_mod_ord_inverse(out, t); | ||
| 721 | - | ||
| 722 | - if (!bn_set_words(r, out, P256_LIMBS)) | ||
| 723 | - goto err; | ||
| 724 | - | ||
| 725 | - ret = 1; | ||
| 726 | - err: | ||
| 727 | - return ret; | ||
| 728 | - } | ||
| 729 | - | ||
| 730 | 635 | const EC_METHOD *EC_GFp_sm2p256_method(void) | |
| 731 | 636 | { | |
| 732 | 637 | static const EC_METHOD ret = { | |
@@ -747,7 +652,7 @@ const EC_METHOD *EC_GFp_sm2p256_method(void) | |||
| 747 | 652 | ossl_ec_GFp_simple_point_copy, | |
| 748 | 653 | ossl_ec_GFp_simple_point_set_to_infinity, | |
| 749 | 654 | ossl_ec_GFp_simple_point_set_affine_coordinates, | |
| 750 | - ecp_sm2p256_get_affine, | ||
| 655 | + ossl_ec_GFp_simple_point_get_affine_coordinates, | ||
| 751 | 656 | 0, 0, 0, | |
| 752 | 657 | ossl_ec_GFp_simple_add, | |
| 753 | 658 | ossl_ec_GFp_simple_dbl, | |
@@ -763,7 +668,7 @@ const EC_METHOD *EC_GFp_sm2p256_method(void) | |||
| 763 | 668 | ecp_sm2p256_field_mul, | |
| 764 | 669 | ecp_sm2p256_field_sqr, | |
| 765 | 670 | 0 /* field_div */, | |
| 766 | - 0 /* field_inv */, | ||
| 671 | + ossl_ec_GFp_simple_field_inv, | ||
| 767 | 672 | 0 /* field_encode */, | |
| 768 | 673 | 0 /* field_decode */, | |
| 769 | 674 | 0 /* field_set_to_one */, | |
@@ -779,7 +684,7 @@ const EC_METHOD *EC_GFp_sm2p256_method(void) | |||
| 779 | 684 | ossl_ecdsa_simple_sign_setup, | |
| 780 | 685 | ossl_ecdsa_simple_sign_sig, | |
| 781 | 686 | ossl_ecdsa_simple_verify_sig, | |
| 782 | - ecp_sm2p256_inv_mod_ord, | ||
| 687 | + 0, /* use constant‑time fallback for inverse mod order */ | ||
| 783 | 688 | 0, /* blind_coordinates */ | |
| 784 | 689 | 0, /* ladder_pre */ | |
| 785 | 690 | 0, /* ladder_step */ | |
| Back | FazBrowse Home | New Git URL |
0 commit comments