Commit Graph
100 Commits
Author SHA1 Message Date
Tobias Brunner a76bd171f8 github: Add a note regarding vulnerability reports to issue template
Also updated the version numbers in the template.
2026-05-22 14:33:28 +02:00
Tobias Brunner dc8b479eb8 ike-init: Fix key derivation if SA is reset after IKE_INTERMEDIATE retransmits
Because the `derived` flag was not reset (it's set after the initial
IKE_SA_INIT exchange), no keys would get derived when sending
IKE_INTERMEDIATE during the next try.  As there is then no `aead_t`
available, encrypting the message would fail and the initiation would
remain stuck.

Fixes: 0d49ddec2e ("ike-init: Add support for multiple key exchanges")
2026-05-22 14:33:28 +02:00
Tobias Brunner 18a94525a7 Revert "testing: Ignore unknown memory in leak detective"
This reverts commit b998695344.

Seems like this is not necessary anymore.  Possibly because of
8ff3238027 ("openssl: Prevent OpenSSL from using posix_memalign() if
LD is enabled").
2026-05-22 14:33:28 +02:00
Tobias Brunner 95f615a603 unit-tests: Replace expired self-signed TLS certificates 2026-05-22 14:33:28 +02:00
Tobias Brunner 9ac3db8e63 swid-gen: Use process_t to avoid potential command injection
In a targeted request, the software ID is provided by the IMV.  If no
database is used (which is not the recommended setup), the ID is not
validated and could potentially contain special characters.  With the
previous command string construction and use of popen(), which runs a
shell, that could potentially allow running arbitrary commands.
2026-05-19 17:27:33 +02:00
Tobias Brunner ac703e48c3 ike-init: Destroy KE object after each derivation during initial exchanges
This fixes error handling in build_r_multi_ke() so we don't incorrectly
reuse the object from the previous exchange if we don't receive a KE
payload.
2026-05-19 17:27:33 +02:00
Tobias Brunner 158b4c4aa4 child-rekey: Avoid potential use-after-free for deleted SPIs array 2026-05-19 17:27:33 +02:00
Tobias Brunner ea569867d2 tun-device: Fix setting IPv6 address on Linux
Unlike `struct ifreq` that's used for IPv4, `struct in6_ifreq` contains
not a `struct sockaddr[_in6]` but only a `struct in6_addr`.

Setting addresses like this is currently not used on Linux (the feature
was added to install virtual IPs on FreeBSD/macOS).

Fixes: fccc76449d ("tun-device: Fix handling of IPv6 addresses")
2026-05-19 17:27:33 +02:00
Tobias Brunner 7bdd4bf77b swanctl: Make sure options array passed to getopt_long() ends with a NULL entry 2026-05-19 17:27:33 +02:00
Tobias Brunner a1ad9e39fc pki: Make sure options array passed to getopt_long() ends with a NULL entry 2026-05-19 17:27:33 +02:00
Tobias Brunner 4950a37e56 pts: Fix error string if mandatory DH group is unavailable
Fixes: 0841280cdd ("libimcv: Fix build with DEBUG_LEVEL < 3")
2026-05-19 17:27:33 +02:00
Tobias Brunner 3b224a70ba xof: Fix mapping for SHA3-512 to a corresponding MGF1 identifier
Fixes: 3b7c49bc31 ("mgf1: Support of RSA PSS with SHA3 hash")
2026-05-19 17:27:33 +02:00
Tobias Brunner a26dd3da33 openssl: Check that EC keys don't have explicit params for internally loaded keys
Keys loaded via generic loader (KEY_ANY) or from a PKCS#12 file (or an
engine) don't go through the openssl_ec_private_key_load() constructor
that checks for explicit parameters.
2026-05-19 17:27:33 +02:00
Tobias Brunner ab19f691c7 botan: Fix registration of ECDSA signature/verification plugin features
This was broken since the Botan 3 release, which removed the EMSA1
class and the define.  The "EMSA1()" wrapper when signing/verifying is
technically not necessary anymore since then (it's deprecated but still
accepted).  But to still support Botan 2, we keep that in for now.
2026-05-19 17:27:33 +02:00
Tobias Brunner 15879eaddd github: Use AWS-LC 1.73.0 for tests 2026-05-19 17:27:33 +02:00
Tobias Brunner 7e7629499f receiver: Avoid unaligned memory access in COOKIE verification
This access could be an issue on platforms with strict alignment
requirements.
2026-05-19 17:27:33 +02:00
Tobias Brunner 8f22345542 dhcp: Fix potential OOB read when parsing DHCP messages
The missing parentheses around the additions when calculating optlen
in the previous code can cause an out-of-bound read of up to 228 bytes
if no DHCP_OPTEND is found in the message (the calculation basically
evaluated to `- 20 + 8 + 240`).

Since the buffer for the received packet (via pf_handler_t) is located
on the stack, this shouldn't cause much of an issue in practice.
2026-05-19 17:27:33 +02:00
Tobias Brunner 7faf93b701 github: Evict old entries from ccache
We don't want to build old versions using these caches, so we don't
need old entries (if header files change, there could be lots of
differences that increase the cache size unnecessarily).
2026-05-19 17:24:22 +02:00
Tobias Brunner 3b902ea59b github: Use separate caches for custom-built dependencies
These are shared by many tests, in particular the "all", "coverage",
"no-dbg" and "no-testable-ke" tests, which each would otherwise require
their own large cache.

Similarly, the "codeql" and "sonarcloud" tests rely on the same
dependencies but only the latter uses ccache for the strongSwan build.

Also reduce the maximum size per cache for all workflows to keep them
in check over time (some could even be set lower, we'll have to see
how this develops).
2026-05-12 16:34:22 +02:00
Tobias Brunner 821ba89961 github: Remove most builds with leak detective
As mentioned in the previous commit, ASAN does a fine job detecting leaks
during the tests.  We just add a single LD-enabled build of the "default"
test here to test the basic functionality.
And we continue to use leak detective in our testing environment to keep
the memory requirements low.

We don't need a separate cache for the "apidoc" test and while the
"dist" test is similar as well, it builds in a different directory,
which means that config.h causes a cache miss for everything but the
configure checks.
2026-05-12 08:37:40 +02:00
Tobias Brunner afe51f19e7 github: Always build OpenSSL with SRP support
The special handling caused a significant diff between builds with and
without LD, which made ccache less effective as we only store the cache
once for the build without LD.

However, despite this change, while it previously was the case that the
LD vs. non-LD builds didn't differ much, that's not the case anymore
nowadays.  In particular the --disable-asan option and the BFD-based
backtraces for the native OpenSSL builds (e.g. default or openssl-sys)
cause quite a significant diff.  As cache storage is limited, we keep
the current behavior for now.  But it might be an option to reduce or
even remove the LD builds in the future as ASAN seems do the job pretty
well and we still use LD in the testing environment.
2026-05-11 19:11:09 +02:00
Tobias Brunner a4b7d57c79 github: Only store a cache for large custom-built crypto libs
The others are either included already in the "all" build (to which we
now switch) or they have a relatively small diff to that (e.g. gcrypt
only differs in that relatively small plugin).  For the "openssl-sys"
build, we can rely on the "default" build but only on ubuntu-latest as
we don't build that on ubuntu-22.04.
2026-05-11 19:11:09 +02:00
Tobias Brunner 134b942494 github: Disable TRAP caching for CodeQL workflow
This creates a cache entry of ~590 MB whenever master is built.  Not sure
if it actually provides any speed up.
2026-05-08 15:48:06 +02:00
Tobias Brunner c85901e2f2 github: Fix ref in cache cleanup workflow 2026-05-08 15:30:13 +02:00
Tobias Brunner 9c140dd45c github: Add workflow to remove cache entries once a branch is deleted 2026-05-08 14:45:25 +02:00
Tobias Brunner daa0b109da github: Only store (and delete) caches for branches not PRs 2026-05-08 14:42:30 +02:00
Tobias Brunner 93cf3de1fc Use Botan 3.12.0 for tests 2026-05-08 12:00:15 +02:00
Tobias Brunner 77cc45dc6f github: Simplify the CodeQL workflow
It doesn't look like ccache will be supported anytime soon.  So just
remove all that unnecessary boilerplate.
2026-05-08 12:00:04 +02:00
Tobias Brunner 9854392a1f github: Don't restore just any cache for the Linux tests
If e.g. an "all" cache is restored for a "default", "apidoc" or a simple
crypto test, the cache will be a lot larger than necessary.
2026-05-07 18:01:30 +02:00
Tobias Brunner e4a15e5518 github: Let diff report if the active transforms are identical
Since the check is skipped if no reference file is found, this makes it
clear that files were actually compared.
2026-05-07 11:22:55 +02:00
Tobias Brunner 3a44941d2c github: Remove commit ID from cache keys and manually evict old entries
Let's try this again :)  Since cache entries with the same key are not
updated/replaced and there is no option to do so, we manually delete the
previous entry for the current branch.

This reduces the cache storage for active branches, which can cause
caches of the master branch to get evicted, which in turn will slow down
builds of not only master but also new branches as they can't fall back
on those caches.

Permission has to be explicitly granted in order to delete the cache
entries when not using the legacy all-write tokens that are the default
for old repositories.

The continue-on-error option is set for the step that deletes the old
cache entry as it's expected that cache-hit will be true for a new feature
branch when restoring the cache from the master branch.  However, because
there won't be anything to delete for this branch yet, the command will
fail.  The --succeed-on-no-caches option of the command unfortunately
only works with --all.

For the Linux tests, several jobs use the same cache key.  So there is
a chance that two jobs try to store a new entry concurrently, which will
fail (it works if there was a cache hit and they are slightly off as
previous entries are first deleted).  To avoid that, we store the cache
only for one particular config.

Also made sure that the "openssl" test does not remove "openssl-3/4"
caches by adding a suffix to the former.

For alpine, the repository had to be set explicitly as gh wasn't able to
determine it (didn't detect the Git working dir).
2026-05-07 10:52:08 +02:00
Tobias Brunner 94443ebad1 github: Disable fail-fast strategy instead of using continue-on-error
While continue-on-error can be configured more specifically (e.g. also
would allow to handle "default" and "printf-builtin" tests that rely
on debug symbols), it also lets the workflow succeed if any of these
jobs fail.  That's not ideal if there is an actual error and not
just an intermittent package sync problem.
2026-05-06 17:43:46 +02:00
Tobias Brunner 4acf09644c github: Add build against OpenSSL 4.0.0 2026-05-06 10:46:43 +02:00
Tobias Brunner 8ff3238027 openssl: Prevent OpenSSL from using posix_memalign() if LD is enabled
The leak detective doesn't wrap this function and calling the original
causes unknown memory frees and even segmentation faults.  This is now
triggered with OpenSSL 4 as the implementation of ECP256 uses
OPENSSL_aligned_alloc_array().

Setting a custom memory functions forces OpenSSL to implement aligned
allocations internally, using the registered allocation function.
2026-05-06 10:46:43 +02:00
Tobias Brunner 374b17fe88 openssl: Fix 'const' issues that came up with OpenSSL 4 2026-05-06 10:46:43 +02:00
Tobias Brunner 528e5f07c3 openssl: Use functions for ASN.1 struct members hidden in OpenSSL 4
According to the docs, most ASN.1 types are just typedefs of ASN1_STRING.
2026-05-06 10:46:43 +02:00
Tobias Brunner 4821758d46 kernel-pfkey: Add some sanity checks when processing kernel events
These are always set in kernel messages, but just make sure so static
analyzers like SonarQube are happy.
2026-04-23 15:21:45 +02:00
Tobias Brunner 0a64c27a1f constant-time: Fix Doxygen group assignment 2026-04-23 11:46:52 +02:00
Tobias Brunner b4ba8a6fb5 openssl: Fix memory leak if ipAddrBlock is non-canonical 2026-04-22 14:12:12 +02:00
Tobias Brunner 9e8292cb37 nm: Version bump to 1.6.5 2026-04-22 14:01:52 +02:00
Tobias Brunner 8b68b2ea51 NEWS: Add news for 6.0.6 and info about CVEs (CVE-2026-35328..35334) 2026-04-21 16:48:56 +02:00
Tobias Brunner e2fa67e8fc gmp: Avoid crash and timing leaks in PKCS#1 v1.5 decryption padding validation
This fixes a potential crash due to a null-pointer dereference if rsadp()
returns NULL (e.g. with an all-zero ciphertext).

And it also implements the PKCS#1 v1.5 decryption padding check in
constant time.

The timing leak caused by the previous implementation was measured at
~17.5 μs at 3 GHz, which could allow a Bleichenbacher-like attack in
LAN environments.  However, because of how RSA encryption is used in
strongSwan, this is not that much of an issue in practice.  The mechanism
is only used for two use cases.  One is SCEP/EST via PKCS#7 enveloped
data.  Fortunately, this can not be triggered in significant numbers by
an attacker.  The other use case is TLS as used by EAP methods (EAP-TLS,
EAP-PEAP/TTLS) during the authentication.  While the cipher suites that
use RSA encryption are still enabled by default, the TLS messages are
wrapped in EAP and encrypted by IKE, making any kind of attack difficult.

Note that the gmp plugin isn't enabled anymore by default.  And even
before that, most setups had the openssl plugin enabled, which has
priority over the gmp plugin.  So it's unlikely the plugin was used in
practice.

Fixes: d615ffdcf3 ("implement gmp_rsa_private_key.decrypt()")
Fixes: CVE-2026-35334
2026-04-21 16:48:56 +02:00
Tobias Brunner 90fd268088 utils: Add constant-time comparison primitives for uint32_t 2026-04-21 16:48:56 +02:00
Tobias Brunner 8dae5605a7 pkcs7: Avoid NULL pointer dereference when verifying padding in enveloped content
As the previous issue, this can be triggered via IKEv1 CERT payloads.

Fixes: d7aa09104f ("Implement PKCS#7 enveloped-data parsing and decryption")
Fixes: CVE-2026-35329
2026-04-21 16:48:56 +02:00
Tobias Brunner c6a2185c42 pkcs5: Fail decryption if data is empty
This avoids the previous bug early.
2026-04-21 16:48:56 +02:00
Tobias Brunner 4da84019cc pkcs5: Avoid NULL pointer dereference when verifying padding
Can be triggered via empty PKCS#7 encrypted content in IKEv1 CERT payload.

Fixes: 4076e3ee91 ("Extract PKCS#5 handling from pkcs8 plugin to separate helper class")
Fixes: CVE-2026-35329
2026-04-21 16:48:56 +02:00
Tobias Brunner 56c7f0d13d tls-server: Prevent infinite loop if supported versions are too short
If the extension doesn't contain a multiple of two bytes, the previous
code would get stuck in an infinite loop as `remaining()` continued to
return TRUE while `read_uint16()` failed to parse a value. Initiating
several connections with such an extension allows a DoS attack as no
threads would eventually be available to handle packets/events.

Fixes: 7fbe2e27ec ("tls-server: TLS 1.3 support for TLS server implementation")
Fixes: CVE-2026-35328
2026-04-21 16:48:56 +02:00
Tobias Brunner 64130ede5c constraints: Reject excluded directoryName (DN) name constraints
There is an issue similar to the one fixed with the previous commit when
using directoryName (DN) name constraints.  Some RDNs have to be matched
in a case-insensitive manner, which we e.g. do in
`identification.c::rdn_equals`.  By not doing it for name constraints,
a malicious intermediate CA could evade an excluded name constraint
just by modifying the case in such an RDN.

While we could use the mentioned function in `dn_matches`, this doesn't
properly fix the problem because the function is basically too strict.
Especially in regards to RDNs of type UTF8String, which are only compared
binary.  To match these properly, we'd have to implement the string
preparation described in RFC 5280, section 7.1 and the referenced RFCs.
Until that's the case, we reject excluded name constraints of type
directoryName as we are unable to enforce them.

Fixes: a2b340764f ("Implemented NameConstraint matching in constraints plugin")
Fixes: CVE-2026-35331
2026-04-21 16:48:56 +02:00
Tobias Brunner c66143db48 constraints: Match FQDN and email addresses case-insensitively
The case is generally ignored when matching such identities.  So this is
an issue with excluded name constraints where a malicious intermediate
CA could evade the constraints by issuing certificates with names that
just modify the case (e.g. strongSwan.org instead strongswan.org).

Note that it's likely that permitted name constraints are preferred over
excluded name constraints as it might be difficult to come up with a
conclusive list of names to exclude.

Fixes: a2b340764f ("Implemented NameConstraint matching in constraints plugin")
Fixes: CVE-2026-35331
2026-04-21 16:48:56 +02:00
Tobias Brunner 1e0643bef1 tls-server: Only accept non-empty ECDH public keys with TLS < 1.3
This prevents a crash due to a null-pointer dereference when processing
an empty ECDH public key.

The previous length check only applied in the `!ec` case, so in the `ec`
case, the access to `pub.ptr[0]` was unguarded.  If a crafted TLS
record ends with an empty ClientKeyExchange, then `read_data8` sets
`pub` to `chunk_empty`, causing a null-pointer dereference.

Note that if some data follows the empty ClientKeyExchange, this just
causes a 1-byte out-of-bounds read that has no further effect as the
TLS session is aborted immediately.  Either because the read value
doesn't equal TLS_ANSI_UNCOMPRESSED or because the empty public key
is rejected by `set_public_key()`.

The referenced commit that introduced the pointer access, added the
check for `pub.len` specifically to the `!ec` case, while the pointer
access was initially unconditional (probably because the code was just
copied from `tls_peer.c` which processes ECDH public keys in a separate
function, so there was no `ec` flag).  The latter was fixed a couple of
days later with 7b3c01845f ("Read the compression type byte for EC
groups, only").  However, that commit didn't change the length check.
Anyway, it's possible that the original intention was to add the check
to the `ec` case on the previous line, or that there was some confusion
with the parenthesis and something like the current code was intended to
begin with.

Fixes: e6cce7ff0d ("Prepend point format to ECDH public key")
Fixes: CVE-2026-35332
2026-04-21 16:48:56 +02:00
Tobias Brunner 19d73ef156 github: Move CI for Windows from AppVeyor to GitHub Actions
These are quite a bit faster than on AppVeyor (with ccache about a fifth,
without less than half - and they run concurrently).

We only keep the AppVeyor builds for now to test against those old
OpenSSL versions (1.1.1 and 1.0.2) for which there is still extended
support available.  Even simplified like that they still take longer
than the builds on GA.
2026-04-21 16:44:18 +02:00
Tobias Brunner e0fb06c9cc Revert "github: Remove commit ID from cache keys"
Without commit ID, no new caches are created as the key is always the
same.

This reverts commit 60f4c86780.
2026-04-21 11:05:19 +02:00
Tobias Brunner 60f4c86780 github: Remove commit ID from cache keys
This reduces the cache storage for active branches and since caches for
different branches are separate and we abort previous builds of the same
branch, this is not necessary to ensure caches can successfully be stored.
2026-04-17 15:18:11 +02:00
Tobias Brunner 1d36cae26a cirrus/github: Move CI for Alpine from Cirrus CI to GitHub Actions
Same as the previous commit.
2026-04-17 14:38:14 +02:00
Tobias Brunner 06b14b8988 cirrus/github: Move CI for FreeBSD from Cirrus CI to GitHub Actions
Cirrus CI will shut down in June, so we have to find a replacement to
test our build on FreeBSD.  This uses VMs on GitHub Actions.
2026-04-17 10:36:36 +02:00
Tobias Brunner cb27593ce0 kernel-netlink: Update family in SA selector if addresses change 2026-04-16 15:33:25 +02:00
Tobias Brunner e1a11e2c1c ike: Use correct format string for unique Child SA identifiers
Analogous to the previous commit.
2026-04-16 15:32:54 +02:00
Tobias Brunner 2a8fd3e4bf ike: Use correct format string for unique IKE SA identifiers
Would take a while until it became an issue, though.
2026-04-16 15:32:54 +02:00
Tobias Brunner 5334d93a45 delete-ike-sa-job: Log unique ID when deleting half-open IKE SA 2026-04-16 15:32:54 +02:00
Tobias Brunner 7f6fc50ba3 ike-init: Log the IKE SA's unique identifier when creating one as responder
The name will not be defined yet, but we have a similar message as
initiator so use the same format.
2026-04-16 15:32:54 +02:00
Tobias Brunner 1ee7e10940 testing: Fix typo regarding ML-KEM in description 2026-04-15 15:01:40 +02:00
Tobias Brunner 7862974e10 github: Use AWS-LC 1.72.0 for tests 2026-04-14 08:33:56 +02:00
Tobias Brunner 0d4a8cc9ba appveyor: Reduce build time and remove build against OpenSSL 1.1.0
We are still too close to the limit of 1 hour (at least with the 2019
image and the 2022 image is about the same), so reduce the build time by
not building libimcv natively, which saves about 10 minutes.

Also, only build against OpenSSL 1.0.2 (on the 2017 image) and 1.1.1 (on
the 2019 image) as these are the only versions for which OpenSSL provides
extended support.
2026-04-13 15:08:47 +02:00
Tobias Brunner 032d8adcd4 github: Continue crypto tests even if OpenSSL tests fail
These can sometimes fail because of sync issues with Ubuntu debug symbol
packages, let other crypto tests continue.
2026-04-09 09:53:36 +02:00
Tobias Brunner e8e34c4b33 Use wolfSSL 5.9.1 for tests 2026-04-09 09:53:36 +02:00
Tobias Brunner 99e9db478d unit-tests: Use longer input for ECDSA tests
wolfSSL 5.9.1 starts to enforce a minimum (and maximum) length for the
hash when signing.  Since we'll always require SHA-1, use 20 bytes as
input in the tests to succeed with SIGN_ECDSA_WITH_NULL.
2026-04-09 09:53:36 +02:00
Tobias Brunner b9d9f8ad95 fuzz: Remove unnecessary calls to set plugin dirs
All the plugins are linked statically into the binaries, so there
is no reason to set the directories that are only required when loading
them from files.
2026-04-08 15:57:17 +02:00
Tobias Brunner 444a1dc0e3 fuzz: Create fuzzers with default and custom crypto plugins
The pa_tnc fuzzer does not rely on any plugins and the pb_tnc fuzzer is
a bit special in that it does use code from the tnccs-20 plugin, but that
doesn't actually have to be loaded as such. The fuzzer directly calls
statically linked code from the plugin.
2026-04-08 15:56:42 +02:00
Tobias Brunner 521c6e05c5 github: Update actions so they don't use deprecated Node.js 20 2026-04-07 18:57:40 +02:00
Tobias Brunner b56b3d48b6 tls-server: Avoid allocating large buffer for cipher suites on stack
The `cipher_suites` field has a 16-bit length field, so up to 32k 2-byte
cipher suites could technically be proposed.  With `tls_cipher_suite_t`
typically being 4 bytes wide, the necessary allocation for the temporary
array can be up to 128 KiB.  Even though this should be fine on typical
systems, we avoid potentially overflowing the stack by using malloc()
instead of alloca().
2026-04-02 08:34:23 +02:00
Tobias Brunner a3c5fad1ff libipsec: Reject policies for anything but ESP tunnel mode
This is only relevant for trap policies as similar SAs are already
rejected when negotiated.
2026-04-02 08:34:20 +02:00
Tobias Brunner 2a63343968 trap-manager: Ignore acquires without selectors for wildcard traps
We need to know the actual destination address to process these.
2026-04-02 08:33:30 +02:00
Tobias Brunner 66fffdb1bf ike-init: Remove redundant check for more key exchanges during rekeying
We only call derive_keys() after a successful key_exchange_done() call
during rekeying, so this will always return FALSE.
2026-04-02 08:17:05 +02:00
Tobias Brunner 05807b1b1b openssl: Handle EdDSA keys from engines special again
Fixes: 052a939553 ("openssl: Add support for Ed25519 via AWS-LC")
2026-04-02 08:17:05 +02:00
Tobias Brunner 4af485d87d certreq: Avoid OOB read when enumerating hashes in OCSP CERTREQ
These certificate requests also contain SHA-1 hashes, which is assumed
in `ike_cert_pre.c::process_certreq()` when enumerating key IDs.

Because the parser allocates a separate chunk for the data and the
enumerator doesn't read beyond that chunk's length after the first
iteration, only lengths between 1 and 19 are problematic (0 doesn't
cause an enumeration because chunk_empty is assigned).

Whether the OOB read then can cause a segmentation fault depends on the
allocator, its alignment rules, and its minimum overhead.  For instance,
with glibc on a typical 64-bit system (8 bytes for pointers and size_t),
the alignment is 16 bytes and the minimum allocated size is 32 bytes,
with typically 24 that are technically available for data, even if only
0 bytes are allocated (as returned by `malloc_usable_size()`).  So with
an allocation between 1 and 19, we can always safely read 20 bytes.

Assuming that other allocators behave similar for small allocations, it
seems unlikely that this causes a crash.

Fixes: 15612b3a42 ("Add support for IKEv2 OCSP extensions (RFC 4806)")
2026-04-02 08:17:05 +02:00
Tobias Brunner 20b07f2cbf vici: Prevent uninitialized memory access if VICI_LIST_ITEM is too short
If there is only a single length byte, `value` is not changed and points
to uninitialized data.
2026-04-02 08:17:05 +02:00
Tobias Brunner 513f25ce12 tnccs_11: Avoid crash if TNCCS-ReasonStrings is empty or only contains empty nodes
`xmlNodeGetContent()` returns `NULL` if `child` is `NULL`, which causes
a segmentation fault in `chunk_from_str()`.

Fixes: ec1eab0319 ("fixed XML parsing of TNCCS 1.1 ReasonString message")
2026-04-02 08:17:05 +02:00
Tobias Brunner 65fcf08cdb eap-sim: Prevent infinite loop if version list contains more than one entry
Fixes: ac4dd5439b ("Migrated EAP-SIM to libsimaka, separated server/peer implementations")
2026-04-02 08:17:04 +02:00
Tobias Brunner 7b0190cb26 revocation: Fix memory leak if nonce in OCSP response doesn't match 2026-04-02 08:17:04 +02:00
Tobias Brunner 1e1dd2976d message: Drop fragments with total fragment count lower than before
The RFC only allows that the number of fragments increases (if the
sender reduces the MTU).

Not enforcing this before could cause early reassembly as the trigger was
that the number of received fragments matches the total count of the
current packet (which was a bit weird anyway).  Only an active MITM could
trigger this as individual fragments are encrypted and authenticated.
2026-04-02 08:17:04 +02:00
Tobias Brunner 06e5462a4b credential-factory: Enforce an upper limit when creating nested credentials
This mainly intended as defense-in-depth measure to avoid parsing
massively nested structures that could cause a call stack overflow due
to the massive recursion.  In particular PKCS#7 signed data is prone to
this as these can be nested basically infinitely.  When used in IKEv1 via
ENC_PKCS7_WRAPPED_X509 CERT payloads, our default of 10000 bytes for IKE
messages guards against this, but that's configurable and there might be
a chance for some bug that triggers problematic recursive parsing for
smaller input.

The upper limit is chosen arbitrarily, but there are currently no known
cases that require a depth of more than 10 levels.
2026-04-02 08:16:07 +02:00
Tobias Brunner 236ef93c50 tls-peer: Ensure TLS 1.3 CertificateRequest structure is valid
If nothing was read from the message, the previous code could result in
a crash depending on where `ext.ptr` pointed to, as determined by the
current stack contents.  Since TLS 1.3 is still disabled by default and
this is usually used for TLS-based EAP methods after validating the
IKEv2 server's certificate, the real world impact seems relatively low.

Fixes: 9ef46cfaf9 ("tls-peer: Mutual authentication support for TLS 1.3")
2026-04-02 08:14:29 +02:00
Tobias Brunner e454b4adb3 libsimaka: Prevent out-of-bounds read when parsing attributes with actual length field
These attributes contain a 16-bit length field for the actual length of
the data in bits or bytes, as compared to the length in 4-byte blocks in
the attribute header.  The previous code didn't correctly account for the
length of the fixed header (4 bytes) when it compared the parsed length
to the length in the header.  This could cause an out-of-bounds read of
up to four bytes beyond the end of the attribute/message.

Fixes: f8330d0395 ("Added a libsimaka library with shared message handling code for EAP-SIM/AKA")
2026-04-02 08:14:29 +02:00
Tobias Brunner 0b053e048d nm: Ignore all .gmo files 2026-04-02 07:54:04 +02:00
Tobias Brunner b377a41336 dhcp: Use correct getter for boolean force_server_address option 2026-04-01 19:33:09 +02:00
Tobias Brunner 3c637c7521 openssl: Fix return value if returning EdDSA public key fails 2026-04-01 19:33:09 +02:00
Tobias Brunner 440b7e7940 Use Botan 3.11.1 for tests 2026-04-01 19:33:09 +02:00
Tobias Brunner 01908d59b0 NEWS: Add info about CVE-2026-25075 2026-03-20 16:28:20 +01:00
Tobias Brunner 73aff21077 eap-ttls: Prevent crash if AVP length header field is invalid
The length field in the AVP header includes the 8 bytes of the header
itself.  Not checking for that and later subtracting it causes an
integer underflow that usually triggers a crash when accessing a
NULL pointer that resulted from the failing chunk_alloc() call because
of the high value.

The attempted allocations for invalid lengths (0-7) are 0xfffffff8,
0xfffffffc, or 0x100000000 (0 on 32-bit hosts), so this doesn't result
in a buffer overflow even if the allocation succeeds.

Fixes: 79f2102cb4 ("implemented server side support for EAP-TTLS")
Fixes: CVE-2026-25075
2026-03-19 16:49:41 +01:00
Tobias Brunner 0fcece9fff Use wolfSSL 5.9.0 for tests 2026-03-19 09:18:08 +01:00
Tobias Brunner b23387a3d6 conf: Install charon-specific snippets also when charon itself is not built
To make the default strongswan.conf, with `load_modular` enabled, work
if charon itself is not built, we enable generating the charon-specific
snippets also for the two other daemons that fall back on reading
options from the `charon` section.
2026-03-17 08:32:34 +01:00
Tobias Brunner 0d10fa6dda conf: Generate and install config snippets also for charon-cmd and charon-nm
This allows easier customization for distributions (e.g. disable some
plugins by default).
2026-03-17 08:08:38 +01:00
Tobias Brunner 9d268feabd github: Use AWS-LC 1.70.0 for tests 2026-03-16 16:39:09 +01:00
Tobias Brunner e535e13079 vici: Prevent uninitialized memory access when finding VICI_END in message
VICI_END (7) shouldn't be encoded in a message.  However, if we encounter
it, we should at least set `out` accordingly so callers can abort the
enumeration.  By not doing so previously and returning TRUE, callers
might access the possibly uninitialized name/value arguments passed to
the enumerator.
2026-03-13 09:35:28 +01:00
Tobias Brunner 358653d06a gmp: Reject public keys with public exponent e < 3
This ensures that we don't load a key with e=1, which basically renders
RSA into a no-op.  Since keys are universally generated with e=65537 and
no reputable CA will sign keys with e=1, allowing this before didn't have
any real world impact.
2026-03-13 09:28:32 +01:00
Tobias Brunner 6856bfe5bc github: Use AWS-LC 1.69.0 for tests 2026-03-04 16:30:48 +01:00
Tobias Brunner 77e89bdcdc NEWS: Add news for 6.0.5 2026-03-03 14:58:16 +01:00
Tobias Brunner ec2d1dc911 Use distinct identifier for "command" group in pki/swanctl to fix apidoc 2026-03-02 16:45:01 +01:00
Tobias Brunner 7f9f9bd375 Fixed some typos, courtesy of codespell 2026-03-02 16:30:12 +01:00
Tobias Brunner d5e95342b5 swanctl: Check for conflicts with existing and shared options when registering commands 2026-02-23 11:25:00 +01:00