What changed in OpenSSL from 3 to 4
3 releases numbered after 3.6.4 up to and including 4.0.2, stable releases only. 3.6.4 and 4.0.2 are the newest stable releases of 3 and 4 we track; this page follows them as new ones ship.
- 29 CVEs mentioned
- 1 removes or deprecates something
51 changes across 3 releases
- Add AKID verification checks when X509_V_FLAG_X509_STRICT is set
- Standardize the width of hexadecimal dumps to 24 bytes for signatures and 16 bytes for everything else
- Enforce lower bounds checks when using PKCS5_PBKDF2_HMAC API with FIPS provider
- Augment CRL verification process with several additional checks
- Stop libcrypto from cleaning up globally allocated data via atexit()
- Use snprintf() provided by libc in BIO_snprintf() instead of internal implementation
- Run OPENSSL_cleanup() in a global destructor, or not at all by default
- Make ASN1_STRING opaque
- Add const qualifiers to signatures of numerous API functions including those related to X509 processing
- Disable support of deprecated elliptic curves in TLS according to RFC 8422 at compile-time by default
- Disable support of explicit EC curves at compile-time by default
- Fixed regression that led to openssl pkey command crash when encrypting a private key with interactively provided password
- Fixed regression that led to openssl s_client -adv prematurely terminating when reading 16384 bytes in one read() call
- Remove extra leading '00:' when printing key data such as an RSA modulus in hexadecimal format where the first byte is >= 0x80
- Remove support for the SSLv2 Client Hello
- Remove support for SSLv3
- Remove support for engines
- Remove c_rehash script tool in favor of openssl rehash
- Remove the deprecated msie-hack option from the openssl ca command
- Remove BIO_f_reliable() implementation
- Deprecate X509_cmp_time(), X509_cmp_current_time(), and X509_cmp_timeframe() in favor of X509_check_certificate_times()
- Fixed QUIC server being able to trigger double free when processing INITIAL packet
- Fixed heap buffer overflow in CMS key unwrapping
- Fixed invalid pointer dereference in CMP server via crafted protectionAlg
- Fixed unbounded memory growth in QUIC server incoming channel queue
- Fixed RPK server signature algorithm selection being able to dereference a missing certificate
- Fixed excessive memory use buffering DTLS records for a future epoch
- Fixed client-side memory leak in OCSP response checking
- Fixed untrusted Sender DN being used as a format string in CMP response validation
- Fixed CMP indefinite cache growth of extraCerts
- Fixed QUIC ACK-only packet retention being able to cause memory exhaustion
- Fixed possibility of AEAD forgeries with empty ciphertext when using EVP_Cipher()
- Fixed checking of authentication tags for empty ciphertexts for AEAD ciphers in CCM cipher mode
- Fixed heap use-after-free in PKCS7_verify()
- Fixed CMS AuthEnvelopedData processing that may accept forged messages
- Fixed unbounded memory growth in the QUIC PATH_CHALLENGE handler
- Fixed double-free when checking OCSP stapled response
- Fixed NULL pointer dereference in QUIC server initial packet handling
- Fixed AES-OCB IV ignored on EVP_Cipher() path
- Fixed possible heap buffer overflow in ASN.1 multibyte string conversion
- Fixed out-of-bounds read in CMS password-based decryption
- Fixed heap buffer over-read in ASN.1 content parsing
- Fixed PKCS#12 files with PBMAC1 accepted with short HMAC keys
- Fixed NULL dereference in certificate verification with OCSP checking
- Fixed possible NULL dereference in password-based CMS decryption
- Fixed NULL pointer dereference in CRMF EncryptedValue decryption
- Fixed multi-RecipientInfo Bleichenbacher Oracle in CMS_decrypt() and PKCS7_decrypt()
- Fixed trust anchor substitution via cert/issuer typo in CMP rootCaKeyUpdate
- Fixed FFC-DH peer validation using attacker-supplied q
- Fixed possible out of bounds read in X509_VERIFY_PARAM_set1_email()
- Fixed incorrect tag processing for empty messages in AES-GCM-SIV and AES-SIV modes
Original release notes, newest first
The list above is our reading of these notes; the originals from OpenSSL Project are here, one fold per release.
4.0.2OpenSSL 4.0.2
OpenSSL 4.0.2 is a security patch release. The most severe CVE fixed in this release is Moderate.
This release incorporates the following bug fixes and mitigations:
-
Fixed QUIC server being able to trigger double free when processing
INITIALpacket. (CVE-2026-18798) -
Fixed heap buffer overflow in CMS key unwrapping. (CVE-2026-63072)
-
Fixed invalid pointer dereference in CMP server via crafted
protectionAlg. (CVE-2026-63076) -
Fixed unbounded memory growth in QUIC server incoming channel queue. (CVE-2026-14456)
-
Fixed RPK server signature algorithm selection being able to dereference a missing certificate. (CVE-2026-14457)
-
Fixed excessive memory use buffering DTLS records for a future epoch. (CVE-2026-54874)
-
Fixed client-side memory leak in OCSP response checking. (CVE-2026-54876)
-
Fixed untrusted Sender DN being used as a format string in CMP response validation. (CVE-2026-63073)
-
Fixed CMP indefinite cache growth of
extraCerts. (CVE-2026-63074) -
Fixed QUIC ACK-only packet retention being able to cause memory exhaustion. (CVE-2026-63075)
-
Fixed possibility of AEAD forgeries with empty ciphertext when using
EVP_Cipher(). (CVE-2026-75803) -
Fixed checking of authentication tags for empty ciphertexts for AEAD ciphers in CCM cipher mode.
4.0.1OpenSSL 4.0.1
OpenSSL 4.0.1 is a security patch release. The most severe CVE fixed in this release is High.
This release incorporates the following bug fixes and mitigations:
-
Fixed heap use-after-free in
PKCS7_verify(). (CVE-2026-45447) -
Fixed CMS
AuthEnvelopedDataprocessing may accept forged messages. (CVE-2026-34182) -
Fixed unbounded memory growth in the QUIC
PATH_CHALLENGEhandler. (CVE-2026-34183) -
Fixed double-free when checking OCSP stapled response. (CVE-2026-35188)
-
Fixed NULL pointer dereference in QUIC server initial packet handling. (CVE-2026-42764)
-
Fixed AES-OCB IV ignored on
EVP_Cipher()path. (CVE-2026-45445) -
Fixed possible heap buffer overflow in ASN.1 multibyte string conversion. (CVE-2026-7383)
-
Fixed out-of-bounds read in CMS password-based decryption. (CVE-2026-9076)
-
Fixed heap buffer over-read in ASN.1 content parsing. (CVE-2026-34180)
-
Fixed PKCS#12 files with PBMAC1 are accepted with short HMAC keys. (CVE-2026-34181)
-
Fixed NULL dereference in certificate verification with OCSP Checking. (CVE-2026-42765)
-
Fixed possible NULL dereference in password-dased CMS decryption. (CVE-2026-42766)
-
Fixed NULL pointer dereference in CRMF
EncryptedValuedecryption. (CVE-2026-42767) -
Fixed multi-
RecipientInfoBleichenbacher Oracle inCMS_decrypt()andPKCS7_decrypt(). (CVE-2026-42768) -
Fixed trust anchor substitution via
cert/issuertypo in CMProotCaKeyUpdate. (CVE-2026-42769) -
Fixed FFC-DH peer validation uses attacker-supplied
q. (CVE-2026-42770) -
Fixed possible out of bounds read in
X509_VERIFY_PARAM_set1_email(). (CVE-2026-42771) -
Fixed incorrect tag processing for empty messages in AES-GCM-SIV and AES-SIV modes. (CVE-2026-45446)
-
Fixed a regression introduced in 4.0.0 that led to a
openssl pkeycommand crash when it was invoked to encrypt a private key with password being provided interactively. -
Fixed a regression introduced in 4.0.0 that led to
openssl s_client -advcommand prematurely terminating a session when reading input of 16384 bytes in oneread()call.
4.0.0OpenSSL 4.0.0
OpenSSL 4.0.0 is a feature release adding significant new functionality to OpenSSL.
This release incorporates the following potentially significant or incompatible changes:
-
Removed extra leading '00:' when printing key data such as an RSA modulus in hexadecimal format where the first (most significant) byte is >= 0x80.
-
Standardized the width of hexadecimal dumps to 24 bytes for signatures (to stay within the 80 characters limit) and 16 bytes for everything else.
-
Lower bounds checks are now enforced when using
PKCS5_PBKDF2_HMACAPI with FIPS provider. -
Added AKID verification checks when
X509_V_FLAG_X509_STRICTis set. -
Augmented CRL verification process with several additional checks.
-
libcryptono longer cleans up globally allocated data viaatexit(). -
BIO_snprintf()now usessnprintf()provided by libc instead of internal implementation. -
OPENSSL_cleanup()now runs in a global destructor, or not at all by default. -
ASN1_STRINGhas been made opaque. -
Signatures of numerous API functions, including those that are related to X509 processing, are changed to include
constqualifiers for argument and return types, where suitable. -
Deprecated
X509_cmp_time(),X509_cmp_current_time(), andX509_cmp_timeframe()in favor ofX509_check_certificate_times(). -
Removed support for the SSLv2 Client Hello.
-
Removed support for SSLv3. SSLv3 has been deprecated since 2015, and OpenSSL had it disabled by default since version 1.1.0 (2016).
-
Removed support for engines. The
no-enginebuild option and theOPENSSL_NO_ENGINEmacro are always present. -
Support of deprecated elliptic curves in TLS according to RFC 8422 was disabled at compile-time by default. To enable it, use the
enable-tls-deprecated-ecconfiguration option. -
Support of explicit EC curves was disabled at compile-time by default. To enable it, use the
enable-ec_explicit_curvesconfiguration option. -
Removed
c_rehashscript tool. Useopenssl rehashinstead. -
Removed the deprecated
msie-hackoption from theopenssl cacommand. -
Removed
BIO_f_reliable()implementation without replacement. It was broken since 3.0 release without any complaints. -
Removed deprecated support for custom
EVP_CIPHER,EVP_MD,EVP_PKEY, andEVP_PKEY_ASN1methods. -
Removed deprecated fixed SSL/TLS version method functions.
-
Removed deprecated functions
ERR_get_state(),ERR_remove_state()andERR_remove_thread_state(). TheERR_STATEobject is now always opaque. -
Dropped
darwin-i386{,-cc}anddarwin-ppc{,64}{,-cc}targets from Configurations.
This release adds the following new features:
-
Support for Encrypted Client Hello (ECH, RFC 9849). See
doc/designs/ech-api.mdfor details. -
Support for RFC 8998, signature algorithm
sm2sig_sm3, key exchange groupcurveSM2, and [tls-hybrid-sm2-mlkem] post-quantum groupcurveSM2MLKEM768. -
cSHAKE function support as per SP 800-185.
-
"ML-DSA-MU" digest algorithm support.
-
Support for SNMP KDF and SRTP KDF.
-
FIPS self tests can now be deferred and run as needed when installing the FIPS module with the
-defer_testsoption of theopenssl fipsinstallcommand. -
Support for using either static or dynamic VC runtime linkage on Windows.
-
Support for negotiated FFDHE key exchange in TLS 1.2 in accordance with RFC 7919.