| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
| |
If the target branch is >4.0 the destination files
can be read-only.
Reviewed-by: Eugene Syromiatnikov <[email protected]>
Reviewed-by: Norbert Pocs <[email protected]>
Merge-date: Mon Sep 7 18:16:30 2026
Merged-from: https://github.com/openssl/openssl/pull/32662
(cherry picked from commit e80b14876a69a758d2eb2a916937d846cba3967b)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If there was no explicit call to OPENSSL_init_crypto before starting
threading, it would result in a race between loading the config in
one thread, and attempting to use features dependent on the config,
e.g., providers in other threads.
The first thread that gets into OPENSSL_init_crypto would start loading
the config and set `loading` to 1 The same thread may re-enter the function
recursively and should do nothing, but it would actually update `optsdone`
with OPENSSL_INIT_LOAD_CONFIG, even though the loading has not finished yet.
This commit fixes the issue by masking the opts bit out if we re-enter
OPENSSL_init_crypto.
Assisted-by: Claude:claude-opus-4.8
(cherry picked from commit d115fd05e3986e90db18776ad49103fadccbe52f)
Reviewed-by: Eugene Syromiatnikov <[email protected]>
Reviewed-by: Dmitry Belyavskiy <[email protected]>
MergeDate: Mon Sep 7 08:37:37 2026
(Merged from https://github.com/openssl/openssl/pull/32660)
(cherry picked from commit 95f41f0ee0eafe1a694ae4607a18679f63b8299e)
|
| |
|
|
|
|
|
|
|
|
| |
Assisted-by: Claude:claude-opus-4-8
Reviewed-by: Andrew Dinh <[email protected]>
Reviewed-by: Frederik Wedel-Heinen <[email protected]>
Reviewed-by: Neil Horman <[email protected]>
Merge-date: Thu Sep 3 09:30:40 2026
Merged-from: https://github.com/openssl/openssl/pull/31917
(cherry picked from commit fe927d455c36e18aec731b45514220915e30c2f0)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When X509_add_cert() or sk_X509_CRL_push() failed, the cert or CRL from
OSSL_STORE was not freed. Free on failure to avoid a leak.
Issue #30364
Fixes: 6d382c74b375 "Use OSSL_STORE for load_{,pub}key() and load_cert() in apps/lib/apps.c"
Fixes: d7fcee3b3b5fa "OSSL_HTTP_parse_url(): add optional port number return parameter and strengthen documentation"
Reviewed-by: Eugene Syromiatnikov <[email protected]>
Reviewed-by: Nikola Pajkovsky <[email protected]>
(cherry picked from commit 9ac29bc8579dd9632bd50900675ff7900f5f7ef1)
Reviewed-by: David von Oheimb <[email protected]>
Reviewed-by: Nikola Pajkovsky <[email protected]>
Merge-date: Thu Sep 3 09:17:33 2026
Merged-from: https://github.com/openssl/openssl/pull/30927
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The pkcs12 documentation incorrectly says that -passin is used to
encrypt output private keys. The implementation uses -passin for input
and -passout for output, with direction-specific roles depending on
-export.
Describe both options explicitly and link -passout to the shared
passphrase-options documentation.
Assisted-by: Codex:gpt-5.6-sol
Reviewed-by: Richard Levitte <[email protected]>
Reviewed-by: Jakub Zelenka <[email protected]>
Merge-date: Tue Sep 1 14:10:54 2026
Merged-from: https://github.com/openssl/openssl/pull/32315
(cherry picked from commit 2c5f67b894e4f0703ab23262800897b81586651a)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Commit 5a85e41 added a 7 day cap on the TLSv1.3 ticket lifetime as required by
RFC 9846, but applied it to a local variable after the value had already been
stored in the session and after its last use, so it had no effect. The uncapped
value was still returned by SSL_SESSION_get_ticket_lifetime_hint() and used by
the client when deciding whether to offer the ticket for resumption. Apply the
cap to the lifetime hint in the session.
- RFC 9846 4.7.1: Servers MUST NOT use any value greater than 604800 seconds
(7 days). The value of zero indicates that the ticket should be discarded
immediately. Clients MUST NOT use tickets for longer than 7 days after
issuance, regardless of the ticket_lifetime, and MAY delete tickets earlier
based on local policy.
Fixes #32244
Reviewed-by: Tom Cosgrove <[email protected]>
Reviewed-by: Richard Levitte <[email protected]>
Reviewed-by: Mounir Idrassi <[email protected]>
Merge-date: Tue Sep 1 13:47:48 2026
Merged-from: https://github.com/openssl/openssl/pull/32240
(cherry picked from commit 66985198d23337651f48c3affbdc7564bcdb903a)
|
| |
|
|
|
|
| |
Reviewed-by: Richard Levitte <[email protected]>
Reviewed-by: Nikola Pajkovsky <[email protected]>
(Merged from https://github.com/openssl/openssl/pull/32560)
|
| |
|
|
|
|
|
|
|
|
| |
Check parameter metadata exposed by common, CTS, multiblock and TDES cipher implementations.
Assisted-by: ChatGPT:gpt-5.6Sol
Reviewed-by: Richard Levitte <[email protected]>
Reviewed-by: Nikola Pajkovsky <[email protected]>
(Merged from https://github.com/openssl/openssl/pull/32560)
|
| |
|
|
|
|
|
|
|
|
|
| |
Also correct parameter type from unsigned integer to octet string.
This triggers fuzzing failures.
Assisted-by: ChatGPT:gpt-5.6Sol
Reviewed-by: Richard Levitte <[email protected]>
Reviewed-by: Nikola Pajkovsky <[email protected]>
(Merged from https://github.com/openssl/openssl/pull/32560)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
BIO_dup_chain() builds each duplicate BIO via BIO_new(), which for a cipher
BIO runs enc_new() and allocates a fresh EVP_CIPHER_CTX. The BIO_CTRL_DUP
handler then allocated a second context and overwrote the pointer, orphaning
(and leaking) the enc_new() allocation, one leaked EVP_CIPHER_CTX per
duplicated cipher BIO.
Reuse the context that enc_new() already allocated by copying into it,
mirroring the digest filter (bio_md.c). This also removes the redundant
allocation and its failure path.
Add a regression test that dup is an initialized cipher BIO and frees it,
exercising the leak path so it is caught under a leak sanitizer.
Fixes #31803
Reviewed-by: Jakub Zelenka <[email protected]>
Reviewed-by: Neil Horman <[email protected]>
Reviewed-by: Andrew Dinh <[email protected]>
MergeDate: Sat Aug 29 12:47:08 2026
(Merged from https://github.com/openssl/openssl/pull/31854)
(cherry picked from commit ff542b6de282b903d296e7a53c3bd3f495e3a7d3)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
It may return a failure if the decoder is frozen, and its return value
is checked elsewhere, as was pointed out by Coverity. Handle the return
value.
[ Only changes to file_store.c are applied, as winstore_store.c is not
present in openssl-3.0, by virtue of winstore having been added during
openssl-3.2 development window. ]
Resolves: https://scan5.scan.coverity.com/#/project-view/65248/10222?selectedIssue=1700562
Complements: 63f187cfedd2 "STORE: Add a built-in 'file:' storemgmt implementation (loader)"
Signed-off-by: Norbert Pocs <[email protected]>
Reviewed-by: Paul Dale <[email protected]>
Reviewed-by: Nikola Pajkovsky <[email protected]>
Reviewed-by: Neil Horman <[email protected]>
Reviewed-by: Eugene Syromiatnikov <[email protected]>
Merge-date: Mon Aug 31 05:19:13 2026
Merged-from: https://github.com/openssl/openssl/pull/32576
(cherry picked from commit acde7bc05a9979abce12c4f92d2a0aa0a3d61175)
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Fix 23 occurrences of accidentally doubled words like 'in in',
'the the', 'been been' across man1/man3/man7 pages, internal
documentation and design documents.
CLA: trivial
Reviewed-by: Frederik Wedel-Heinen <[email protected]>
Reviewed-by: Paul Dale <[email protected]>
Merge-date: Thu Aug 27 16:00:39 2026
Merged-from: https://github.com/openssl/openssl/pull/32461
(cherry picked from commit 6b736d031e9bc7df908292f7f0a09ed5fd562f5a)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
OCSP_check_validity() accepts GeneralizedTime forms that
X509_cmp_time() cannot compare. The latter requires the canonical RFC
5280 form and returns 0 for numeric UTC offsets and fractional seconds.
That error was treated as an in-range result, allowing OCSP freshness
checks to be bypassed.
Treat errors from the initial thisUpdate and nextUpdate comparisons as
field errors. Run the optional maximum-age check only after the initial
thisUpdate comparison succeeds, avoiding a duplicate field error.
Add regression coverage for offset and fractional forms, including the
maximum-age path.
Fixes #32377
Assisted-by: Codex:gpt-5.6-sol
Signed-off-by: Mounir IDRASSI <[email protected]>
Reviewed-by: Bob Beck <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Merge-date: Thu Aug 27 15:15:28 2026
Merged-from: https://github.com/openssl/openssl/pull/32396
(cherry picked from commit 6ceaf1dfe6729853961c6f53e97e635e82da9168)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
STREAM ciphers (RC4) and WRAP MODE ciphers (CMS3DESwrap) do not have an IV
parameter value, all other ciphers need an IV value, previously the missing
IV param value was handled as an error condition.
The check that an IV value is there was accidentally removed for all ciphers.
This restores the check for all ciphers except RC4.
Fixes: 114d99b46bfb ("Fix incomplete checks for EVP_CIPHER_asn1_to_param")
Reviewed-by: Dmitry Belyavskiy <[email protected]>
Reviewed-by: Mounir Idrassi <[email protected]>
Merge-date: Thu Aug 27 15:07:58 2026
Merged-from: https://github.com/openssl/openssl/pull/32394
(cherry picked from commit 1671f994548a1a33246859ab6cc43200b1c65d87)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This changes the PWRI-KEK blob to use a 16 byte long IV value
which is needed for AES-128-CFB.
Thus ./test/recipes/80-test_cmsapi_data/cms_pwri_kek_oob.der changes
from:
69:d=6 hl=2 l= 11 prim: OBJECT :id-alg-PWRI-KEK
82:d=6 hl=2 l= 11 cons: SEQUENCE
84:d=7 hl=2 l= 9 prim: OBJECT :aes-128-cfb
95:d=5 hl=2 l= 2 prim: OCTET STRING [HEX DUMP]:0000
to: 69:d=6 hl=2 l= 11 prim: OBJECT :id-alg-PWRI-KEK
82:d=6 hl=2 l= 29 cons: SEQUENCE
84:d=7 hl=2 l= 9 prim: OBJECT :aes-128-cfb
95:d=7 hl=2 l= 16 prim: OCTET STRING [HEX DUMP]:00000000000000000000000000000000
113:d=5 hl=2 l= 2 prim: OCTET STRING [HEX DUMP]:0000
Reviewed-by: Dmitry Belyavskiy <[email protected]>
Reviewed-by: Mounir Idrassi <[email protected]>
Merge-date: Thu Aug 27 15:07:57 2026
Merged-from: https://github.com/openssl/openssl/pull/32394
(cherry picked from commit 4cf673a3d50b0d04d65c54c6ebb6932bb9040cf4)
|
| |
|
|
|
|
|
|
|
| |
Add missing stable branches.
Reviewed-by: Nikola Pajkovsky <[email protected]>
Reviewed-by: Norbert Pocs <[email protected]>
Merge-date: Thu Aug 27 14:54:29 2026
Merged-from: https://github.com/openssl/openssl/pull/32323
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Fix typos: "in and ASN1_OBJECT" -> "in an ASN1_OBJECT"
- Clarify that returned pointers are internal and must not be freed
Fixes https://github.com/openssl/openssl/issues/28156
Assisted-by: Claude:claude-opus-4-5
Reviewed-by: Andrew Dinh <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Merge-date: Thu Aug 27 13:27:26 2026
Merged-from: https://github.com/openssl/openssl/pull/29887
(cherry picked from commit dadf861592f4374b4c6fe55ad43e508fc69e109b)
|
| |
|
|
|
|
|
|
|
|
| |
Assisted-by: Claude:claude-fable-5
Reviewed-by: Jakub Zelenka <[email protected]>
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Merge-date: Thu Aug 27 07:09:00 2026
Merged-from: https://github.com/openssl/openssl/pull/32521
(cherry picked from commit 3be64e3d8016161c19ebd86012936d121e208cc1)
|
| |
|
|
|
|
|
| |
Reviewed-by: Neil Horman <[email protected]>
Reviewed-by: Milan Broz <[email protected]>
MergeDate: Tue Aug 25 12:14:28 2026
Release: yes
|
| |
|
|
|
|
|
| |
Reviewed-by: Neil Horman <[email protected]>
Reviewed-by: Milan Broz <[email protected]>
MergeDate: Tue Aug 25 12:14:23 2026
Release: yes
|
| |
|
|
|
|
|
| |
Reviewed-by: Neil Horman <[email protected]>
Reviewed-by: Milan Broz <[email protected]>
MergeDate: Tue Aug 25 12:14:21 2026
Release: yes
|
| |
|
|
|
|
|
| |
Reviewed-by: Neil Horman <[email protected]>
Reviewed-by: Milan Broz <[email protected]>
MergeDate: Tue Aug 25 12:12:41 2026
Release: yes
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
3.0.22 CHANGES.md includes the following:
* CVE-2026-54874, CVE-2026-63072, CVE-2026-63074, CVE-2026-63076,
CVE-2026-75803
* https://github.com/openssl/openssl/pull/31174
"Enforce RFC 8446 ticket lifetime limit for TLS 1.3 client"
(already present)
* https://github.com/openssl/openssl/pull/31578
"Backport PR #30313 into 3.0 branch."
* https://github.com/openssl/openssl/pull/32417
"[3.0] Reject explicitly supplied invalid tags and generate tags for empty AEAD messages"
(included as CVE-2026-75803)
* https://github.com/openssl/openssl/pull/32427
"Backport #32256 openssl 4.0 to 3.0"
3.0.22 NEWS.md includes the following:
* CVE-2026-54874, CVE-2026-63072, CVE-2026-63074, CVE-2026-63076,
CVE-2026-75803
* https://github.com/openssl/openssl/pull/32417
"[3.0] Reject explicitly supplied invalid tags and generate tags for empty AEAD messages"
(included as CVE-2026-75803)
* https://github.com/openssl/openssl/pull/32427
"Backport #32256 openssl 4.0 to 3.0"
Signed-off-by: Eugene Syromiatnikov <[email protected]>
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Reviewed-by: Bob Beck <[email protected]>
Merge-date: Tue Aug 25 11:38:33 2026
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Move HollowByte change log record after records with assigned CVE
numbers and severity ratings, add period at the end of the lead
sentence, add a link to the PR in the comment.
Complements: d01f86f21948 "Update CHANGES/NEWS to mention the HollowByte fix"
Signed-off-by: Eugene Syromiatnikov <[email protected]>
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Reviewed-by: Bob Beck <[email protected]>
Merge-date: Tue Aug 25 11:38:32 2026
|
| |
|
|
|
|
|
|
|
| |
Complements: 7e82c32134aa "Enforce RFC 8446 ticket lifetime limit for TLS 1.3 client"
Signed-off-by: Eugene Syromiatnikov <[email protected]>
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Reviewed-by: Bob Beck <[email protected]>
Merge-date: Tue Aug 25 11:38:30 2026
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
100 buffered next-epoch records is far more than a normal handshake
ever needs. A peer that has already completed its side of the epoch
transition may send more than one record under the new epoch before
we catch up and bump our own receive epoch - for example, application
data sent immediately once the peer considers the handshake done -
but real-world bursts like that are still small. Now that each entry
only costs as much memory as the record actually received, the limit
mainly serves as a ceiling on worst-case per-connection memory use, so
lower it to 16 to keep that ceiling smaller while still leaving ample
headroom over legitimate usage.
dtls1_buffer_record() serves three queues here, so take the limit as an
argument rather than tightening all of them. Only unprocessed_rcds gets
the lower limit: processed_rcds is filled from unprocessed_rcds and so
cannot exceed it in any case, and buffered_app_data holds application
data that arrived between ChangeCipherSpec and Finished, which is not
the queue this ceiling is aimed at.
Assisted-by: Claude:claude-opus-5
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Andrew Dinh <[email protected]>
Merge-date: Mon Aug 24 15:40:45 2026
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
dtls1_buffer_record() is used to hold onto a DTLS record across three
different scenarios: a record arriving early for the next epoch while
a handshake is in progress, re-queuing a record once the epoch catches
up and it has been decrypted, and application data arriving between
ChangeCipherSpec and Finished. In all three cases it took ownership of
the entire live read buffer (sized for the largest possible record,
~16.7KB) and allocated a brand new one to carry on reading, regardless
of how small the buffered record actually was. With each of the three
queues capped at 100 entries, a peer could send a stream of tiny
bogus records and force a disproportionate amount of heap allocation
per connection.
Instead, copy only the record's own on-wire bytes (header plus
ciphertext, or header plus plaintext for an already-decrypted record)
into the queue entry, and leave the live read buffer untouched. On
retrieval, copy those bytes back into the live buffer and rebase any
SSL3_RECORD data/input pointers that pointed into the original packet,
rather than handing out a pointer to a standalone allocation. Memory
use is now proportional to what the peer actually sends.
Fixes CVE-2026-54874
Assisted-by: Claude:claude-sonnet-4-6
Assisted-by: Claude:claude-opus-5
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Andrew Dinh <[email protected]>
Merge-date: Mon Aug 24 15:40:45 2026
|
| |
|
|
|
|
|
|
|
|
|
|
| |
On its integrity-failure paths that primitive writes and cleanses up to inlen
bytes of the output buffer. Size the buffer for that worst case so a failed
unwrap cannot write past the allocation.
Fixes CVE-2026-63072
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Andrew Dinh <[email protected]>
Merge-date: Mon Aug 24 14:44:55 2026
|
| |
|
|
|
|
|
| |
Assisted-by: Claude:claude-fable-5
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Andrew Dinh <[email protected]>
Merge-date: Mon Aug 24 14:44:54 2026
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If a remote user sends cmp messages to a server with a list of
extraCerts and the message is rejected, the extraCerts from the message
remain in the server contexts untrusted certificate stack. This exposes
servers with long lived ctx objects to denial of service attacks in
which an attacker sends messages intending to be rejected with a large
list of additional cerificated repeatedly, forcing the server to store
them indefinately.
Fix it by rolling back the added extra certs if the message is rejected,
using the same method we do when the context is configured to not do
caching at all.
Fixes openssl/srt#224
Fixes CVE-2026-63074
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Reviewed-by: Igor Ustinov <[email protected]>
Merge-date: Mon Aug 24 12:45:55 2026
|
| |
|
|
|
|
|
|
|
|
|
| |
Test to ensure that if certs are rejected we don't add them unboundedly
to the cmp contexts cert cache.
Assisted-by: Claude sonnet 4.6
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Reviewed-by: Igor Ustinov <[email protected]>
Merge-date: Mon Aug 24 12:45:54 2026
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ossl_cmp_calc_protection() only checked whether the protectionAlg parameter
(ppval) was NULL before treating it as a PBMParameter ASN1_STRING.
X509_ALGOR_get0() does not validate the ASN.1 type of the parameter against what
the caller expects. For id-PasswordBasedMAC, a crafted message can encode the
parameter as a BOOLEAN instead of the expected PBMParameter SEQUENCE. Because
the ASN1_TYPE value union overlays the boolean int on the pointer field, ppval
comes back as a bogus non-NULL pointer (e.g. 0xff).
Fixes CVE-2026-63076
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Norbert Pocs <[email protected]>
Merge-date: Sat Aug 22 06:12:04 2026
|
| |
|
|
|
|
|
| |
Assisted-by: Claude:claude-fable-5
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Norbert Pocs <[email protected]>
Merge-date: Sat Aug 22 06:12:03 2026
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The CMS_AuthEnvelopedData ASN.1 template used the implicit tags and the
X509_ALGOR type copied from CMS_AuthenticatedData. Per RFC 5083 the authAttrs
and unauthAttrs fields are [1] and [2] (not [2] and [3]) and are SET OF
Attribute, so use X509_ATTRIBUTE with the correct tags, matching the
STACK_OF(X509_ATTRIBUTE) members already declared in the structure.
With the tags fixed, authEnvelopedData carrying authAttrs now parses, so the
authenticated attributes must also be fed to the content cipher as the AEAD
associated data required by RFC 5083 section 2.1. Encode their DER (with the
universal SET OF tag) for both encryption and decryption; without this the GCM
tag fails to verify against compliant senders such as BouncyCastle.
RFC 5083 also requires that plaintext is not released until its integrity has
been verified. The AEAD tag is only checked once all the ciphertext has been
processed, so buffer the decrypted content and forward it to the output BIO
only after that check succeeds; a tampered message then leaks nothing to -out.
Add an interop test using a BouncyCastle-generated AES-128-GCM message with
authenticated and unauthenticated attributes, plus a tampered copy that must
fail the tag check and leave -out empty.
Closes #31635
Closes #26101
Closes #31629
Assisted-by: Claude:claude-opus-4-8
Reviewed-by: Tomas Mraz <[email protected]>
Reviewed-by: Igor Ustinov <[email protected]>
Reviewed-by: Norbert Pocs <[email protected]>
Merge-date: Fri Aug 21 10:38:28 2026
Merged-from: https://github.com/openssl/openssl/pull/32076
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Both msblob2obj_decode() and pvk2obj_decode() computed an
attacker-influenced buffer size (from `bitlen`, or from
`saltlen + keylen`) and passed it to BUF_MEM_grow() without an
upper bound.
Resolves #31684
Fixes: f40c5f2c53b9 "PROV & STORE: Make the 'file:' store loader understand more binary formats"
Fixes: 0f5493e60b9e "storemgmt: Validate msblob length before buffer allocation"
Reviewed-by: Eugene Syromiatnikov <[email protected]>
Reviewed-by: Neil Horman <[email protected]>
Reviewed-by: Matt Caswell <[email protected]>
Merge-date: Fri Aug 21 10:11:10 2026
Merged-from: https://github.com/openssl/openssl/pull/31704
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Declare a zero payload length and supply AAD while deliberately omitting
the payload Update. Check that streaming and one-shot Final generate the
same tag, accept the correct tag, and reject a modified tag for every
available built-in CCM cipher.
Assisted-by: Codex:gpt-5.6-sol
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Reviewed-by: Nikola Pajkovsky <[email protected]>
Merge-date: Fri Aug 21 10:04:28 2026
Merged-from: https://github.com/openssl/openssl/pull/32427
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
CCM Final was routed through an update helper whose pointer-based
dispatch treats a NULL-input call as a no-op or a length declaration.
If an empty message skips payload Update, decryption can therefore skip
tag verification and encryption does not generate a tag.
Process an empty payload during Final only when the existing state flags
show that no payload operation took place. Route the NULL-input
EVP_Cipher() form through the same Final path.
Fixes #32253
Assisted-by: Codex:gpt-5.6-sol
(cherry picked from commit 493a46c61983195c2b49bfde75ffba0321e5e69d)
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Reviewed-by: Nikola Pajkovsky <[email protected]>
Merge-date: Fri Aug 21 10:04:26 2026
Merged-from: https://github.com/openssl/openssl/pull/32427
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
on Windows)
Also gloss over errors reading cert/CRL contents from existing symlinked files.
Fixes #23882
Reviewed-by: Andrew Dinh <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
MergeDate: Wed Aug 19 19:29:03 2026
(Merged from https://github.com/openssl/openssl/pull/31594)
(cherry picked from commit 38dd8ec5e3be47325b09f08abdef5dbebe89100f)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Generate an empty-message tag with the streaming path, then check that
EVP_Cipher() decryption accepts the correct tag and rejects a corrupted
one. Also verify that EVP_Cipher() encryption produces the same tag.
Cover AES-OCB and ChaCha20-Poly1305, with and without AAD.
Assisted-by: Codex:gpt-5.6-sol
Reviewed-by: Bob Beck <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Merge-date: Wed Aug 19 17:43:25 2026
Merged-from: https://github.com/openssl/openssl/pull/32417
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For the affected OpenSSL built-in provider AEAD implementations,
EVP_Cipher(ctx, out, NULL, 0) reaches the ccipher callback as a
NULL-input terminal call. OCB and ChaCha20-Poly1305 took an early exit
on an empty message, with or without AAD, and returned success without
comparing an explicitly supplied tag. Consequently a corrupted tag was
accepted before this change.
Make these built-in callbacks perform their terminal tag operation,
aligning their explicit-tag handling with the streaming Final path
without defining NULL input as part of the generic EVP_Cipher()
contract.
AES-GCM-SIV also failed to generate a tag when Final was its first
empty-message operation. Generate the tag in that case and propagate
failures from the matching empty-message decrypt operation.
The stable ChaCha20-Poly1305 implementation aliases Update to the
one-shot cipher callback, so this backport introduces a dedicated Update
callback to preserve zero-length Update as a no-op.
Follow-up to #31555
Fixes #32258
Fixes CVE-2026-75803
Assisted-by: Claude:claude-opus-4-8
Assisted-by: Codex:gpt-5.6-sol
(cherry picked from commit 5741d29a5f356e05262cd0936a472a9961398d53)
Co-authored-by: Mounir IDRASSI <[email protected]>
Reviewed-by: Bob Beck <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Merge-date: Wed Aug 19 17:43:24 2026
Merged-from: https://github.com/openssl/openssl/pull/32417
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When establishing a terminal socket on OpenVMS, if the async I/O
read operation (sys$qio) fails, the error path returns early without
freeing the allocated channel via sys$dassgn.
Add sys$dassgn(TerminalDeviceChan) in the sys$qio error path during
creation. Also ensure dassgn executes regardless of whether sys$cancel
succeeds during deletion to avoid exhausting the I/O channel quota.
Reviewed-by: Nikola Pajkovsky <[email protected]>
Reviewed-by: Richard Levitte <[email protected]>
Merge-date: Wed Aug 19 15:37:03 2026
Merged-from: https://github.com/openssl/openssl/pull/30375
(cherry picked from commit ee7c64fbcd24276233d238aff1cdf9996be943cd)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Update the FFC parameter validation to explicitly reject DSA configurations
where the N parameter is greater than 512. Previously, the logic accepted any
N >= 256 if L >= 3072. This change enforces the maximum supported limit for N
and raises an error to prevent the use of invalid or unsupported parameter
combinations.
This is needed because generate_q_fips186_4() allocates a `md` buffer that is
at most `EVP_MAX_MD_SIZE` long (64 bytes). If N is greater than 512 then the
qsize parameter passed in input to generate_q_fips186_4() will be greater
than 64 causing internal operations on the buffer to overflow.
This was found by Red Hat with AISLE, but deemed not a security issue
because there is no reasonable way to cause an attacket to set the qbits
values directly, if this ever happen it is just misuse of an API by an
application.
Signed-off-by: Simo Sorce <[email protected]>
Reviewed-by: Richard Levitte <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Reviewed-by: Dmitry Belyavskiy <[email protected]>
MergeDate: Tue Aug 18 12:41:55 2026
(Merged from https://github.com/openssl/openssl/pull/32271)
(cherry picked from commit 1bf213943b0f422ced4b0c2db51f626f488f89c7)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Direct access to `p7->d.sign->contents->d.data` skips the content-type
check: if the inner eContentType is a non-standard OID the ADB sets
d.other (16 bytes) instead of d.data (24 bytes), and the subsequent
os->flags write lands out of bounds.
Replace with `PKCS7_get_octet_string()`, which returns NULL for any type
that is not `NID_pkcs7_data`, matching the guard already used by
`PKCS7_ctrl()` and `PKCS7_dataDecode()`.
Added a unit-test (`pkcs7_stream_non_data_test`) to validate the change.
Fixes #31681
Reviewed-by: Bob Beck <[email protected]>
Reviewed-by: Jakub Zelenka <[email protected]>
Reviewed-by: Eugene Syromiatnikov <[email protected]>
Merge-date: Tue Aug 18 07:47:41 2026
Merged-from: https://github.com/openssl/openssl/pull/31722
(cherry picked from commit eedaf1c2c46b5e511a603833a65a742085c01bb2)
(cherry picked from commit 56c1e4fc7625295283c22108746cb974229d9575)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
State that a FIPS provider built from any validated version may be
used together with an OpenSSL library built from any supported release
from OpenSSL 3.0 onwards, backward and forward, including future major
release series.
The downloads page references in the updated paragraph now point at
https://openssl-library.org/source/, which www.openssl.org/source/
redirects to.
Aligns the documentation with the OpenSSL Library FIPS Module
Support Policy.
Assisted-by: Claude Code:claude-fable-5
Reviewed-by: Nikola Pajkovsky <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Reviewed-by: Richard Levitte <[email protected]>
Merge-date: Tue Aug 18 07:21:24 2026
Merged-from: https://github.com/openssl/openssl/pull/32105
(cherry picked from commit 93a175f15adfad7f469f98cd2455cd65551e4eb6)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
State in fips_module(7) that a FIPS provider built from a validated
version can be used with libcrypto and libssl from any supported
release from OpenSSL 3.0 onwards, backward and forward, including
future major release series, replacing the narrower wording that
limited this to the same major release series.
The downloads page reference in the same paragraph now points at
https://openssl-library.org/source/, which www.openssl.org/source/
redirects to.
Aligns the documentation with the OpenSSL Library FIPS Module
Support Policy.
Assisted-by: Claude Code:claude-fable-5
Reviewed-by: Nikola Pajkovsky <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Reviewed-by: Richard Levitte <[email protected]>
Merge-date: Tue Aug 18 07:21:22 2026
Merged-from: https://github.com/openssl/openssl/pull/32105
(cherry picked from commit 090868518bbff01f8e9590444aed3c06a254a3b2)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In asn1_gen.c `asn1_multi()` function variable allocated as
`ASN1_TYPE *typ = generate_v3()` is not freed if
`if (!sk_ASN1_TYPE_push(sk, typ))` branch fails.
Bug found by x509v3 fuzzer MFAIL test.
Example input:
```
[default]
1.2.3.4 = ASN1:SEQUENCE:items
[items]
value = INTEGER:1
```
Reviewed-by: Eugene Syromiatnikov <[email protected]>
Reviewed-by: Milan Broz <[email protected]>
Reviewed-by: Nikola Pajkovsky <[email protected]>
Merge-date: Fri Aug 14 10:29:08 2026
Merged-from: https://github.com/openssl/openssl/pull/32206
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Use OPENSSL_clear_free() with the original allocation length on the
KARI, KEKRI, and PWRI failure paths. This is defense-in-depth
hardening at the CMS/provider boundary.
Reviewed-by: Tomas Mraz <[email protected]>
Reviewed-by: Dmitry Belyavskiy <[email protected]>
Merge-date: Fri Aug 14 06:38:29 2026
Merged-from: https://github.com/openssl/openssl/pull/32303
(cherry picked from commit 57b84ed1cf9b6c6fe8230be85869351ce2e8e839)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When the RISCV vector extensions version is not explicitly
specified, qemu issues warnings to stderr when running each
program. This broke some CI jobs.
Pin the version to the (current) "v1.0" default.
Reviewed-by: Nikola Pajkovsky <[email protected]>
Reviewed-by: Saša Nedvědický <[email protected]>
Reviewed-by: Igor Ustinov <[email protected]>
MergeDate: Thu Aug 13 06:32:59 2026
(Merged from https://github.com/openssl/openssl/pull/32345)
(cherry picked from commit 31e93626b5f24b84947a954929106b4cfd5a03e7)
|
| |
|
|
|
|
|
|
|
| |
These branches are EOL, so there is no need to keep running CI jobs for them.
Reviewed-by: Eugene Syromiatnikov <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Merge-date: Wed Aug 12 10:17:15 2026
Merged-from: https://github.com/openssl/openssl/pull/32265
|
| |
|
|
|
|
|
|
|
| |
Reviewed-by: Paul Dale <[email protected]>
Reviewed-by: Dmitry Belyavskiy <[email protected]>
Reviewed-by: Tomas Mraz <[email protected]>
Merge-date: Wed Aug 12 09:54:12 2026
Merged-from: https://github.com/openssl/openssl/pull/32102
(cherry picked from commit 0f5493e60b9e8ec500de5812fe28b9f564408608)
|