]> git.ipfire.org Git - thirdparty/strongswan.git/log
thirdparty/strongswan.git
2 years agotest-vectors: Added NIST KEM test vectors
Andreas Steffen [Tue, 5 Nov 2019 11:12:19 +0000 (12:12 +0100)] 
test-vectors: Added NIST KEM test vectors

2 years agokey-exchange: Joint ke_test_vector format for DH and KEM
Andreas Steffen [Mon, 4 Nov 2019 21:22:47 +0000 (22:22 +0100)] 
key-exchange: Joint ke_test_vector format for DH and KEM

Both Diffie-Hellman (DH) and Key Encapsulation Mechanism (KEM) based
key exchange methods use a common ke_test_vector format. The
set_seed() function is used to provide deterministic private key
material for the crypto tests.

2 years agokey-exchange: Added NIST round 2 submission KEM candidates
Andreas Steffen [Fri, 1 Nov 2019 18:41:46 +0000 (19:41 +0100)] 
key-exchange: Added NIST round 2 submission KEM candidates

2 years agounit-tests: Ensure listeners can track SAs via ike/child_updown/rekey()
Tobias Brunner [Fri, 9 Sep 2022 16:34:29 +0000 (18:34 +0200)] 
unit-tests: Ensure listeners can track SAs via ike/child_updown/rekey()

Previously, it could happen that child_rekey() was triggered twice for
the same "old" SA.  For listeners that would mean they'd loose track as
they'd be tracking a new SA that wasn't relevant anymore and for which
no updown event would ever get triggered (it was the redundant SA in a
collision).  This new assert ensures that events are triggered in a
predictable way and listeners can track SAs properly.

2 years agoikev2: Make CHILD_SAs properly trackable during rekey collisions
Tobias Brunner [Mon, 22 Aug 2022 13:43:16 +0000 (15:43 +0200)] 
ikev2: Make CHILD_SAs properly trackable during rekey collisions

As the winner of a rekey collision, we previously always triggered the
child_rekey() event once when creating the redundant SA on behalf of the
peer in the passive child-rekey task and then a second time when
creating the winning SA in the active task.  However, both calls passed
the replaced CHILD_SA as "old". This made tracking CHILD_SAs impossible
because there was no transition from the redundant, "new" SA of the
first event to the "new", winning SA of the second.  Of course, when the
second event was triggered, the redundant SA might not have existed
anymore because the peer is expected to delete it, which could happen
before the CREATE_CHILD_SA response arrives at the initiator.

This refactoring ensures that the child_rekey() event is triggered in
a way that makes the CHILD_SAs trackable in all reasonable (and even
some unreasonable) scenarios.  The event is generally only triggered
once after installing the outbound SA for the new/winning CHILD_SA.
This can be when processing the CREATE_CHILD_SA in the active child-rekey
task, or when processing the DELETE for the old SA in a passive
child-delete task.  There are some cases where the event is still
triggered twice, but it is now ensured that listeners can properly
transition to the winning SA.

Some corner cases are now also handled correctly, e.g. if a responder's
DELETE for the new CHILD_SA arrives before its CREATE_CHILD_SA response
that actually creates it on the initiator.  Also handled properly are
responders of rekeyings that incorrectly send a DELETE for the old
CHILD_SA (previously this caused both, the new and the old SA, to get
deleted).

2 years agowip: ike-init: Indicate support for IKE_INTERMEDIATE
Tobias Brunner [Tue, 5 Nov 2019 15:42:58 +0000 (16:42 +0100)] 
wip: ike-init: Indicate support for IKE_INTERMEDIATE

wip: We should also add some checks if the notify was not received.

2 years agoproposal: Prevent selection of duplicate key exchange methods
Tobias Brunner [Fri, 16 Jul 2021 11:52:19 +0000 (13:52 +0200)] 
proposal: Prevent selection of duplicate key exchange methods

All additional (and the initial) key exchanges must use a different method.

2 years agoproposal: Add helper to check if additional key exchanges are contained
Tobias Brunner [Tue, 5 Nov 2019 16:03:42 +0000 (17:03 +0100)] 
proposal: Add helper to check if additional key exchanges are contained

2 years agoproposal: Accept NONE for additional key exchanges also for IKE proposals
Tobias Brunner [Thu, 22 Oct 2020 11:13:00 +0000 (13:13 +0200)] 
proposal: Accept NONE for additional key exchanges also for IKE proposals

2 years agounit-tests: Add tests for CHILD_SA rekeying with multiple key exchanges
Tobias Brunner [Mon, 29 Jun 2020 12:13:53 +0000 (14:13 +0200)] 
unit-tests: Add tests for CHILD_SA rekeying with multiple key exchanges

2 years agounit-tests: Add tests for CHILD_SA creation with multiple key exchanges
Tobias Brunner [Fri, 26 Jun 2020 12:12:47 +0000 (14:12 +0200)] 
unit-tests: Add tests for CHILD_SA creation with multiple key exchanges

2 years agounit-tests: Tests for additional key exchanges
Tobias Brunner [Mon, 4 Nov 2019 15:17:30 +0000 (16:17 +0100)] 
unit-tests: Tests for additional key exchanges

2 years agounit-tests: Support multiple proposals in exchange tests
Tobias Brunner [Wed, 17 Jun 2020 16:39:44 +0000 (18:39 +0200)] 
unit-tests: Support multiple proposals in exchange tests

2 years agovici: Increase maximum proposal length
Andreas Steffen [Tue, 6 Jul 2021 10:11:51 +0000 (12:11 +0200)] 
vici: Increase maximum proposal length

2 years agovici: List additional key exchanges
Andreas Steffen [Tue, 19 Nov 2019 19:44:39 +0000 (20:44 +0100)] 
vici: List additional key exchanges

Co-authored-by: Tobias Brunner <tobias@strongswan.org>
2 years agoproposal: Add prefix for additional key exchanges when logging proposals
Tobias Brunner [Thu, 22 Oct 2020 12:15:31 +0000 (14:15 +0200)] 
proposal: Add prefix for additional key exchanges when logging proposals

2 years agokey-exchange: Add dynamic parser for additional key exchange methods
Tobias Brunner [Mon, 4 Nov 2019 16:27:20 +0000 (17:27 +0100)] 
key-exchange: Add dynamic parser for additional key exchange methods

2 years agochild-rekey: Support CHILD_SA rekeying with multiple key exchanges
Tobias Brunner [Mon, 29 Jun 2020 12:12:05 +0000 (14:12 +0200)] 
child-rekey: Support CHILD_SA rekeying with multiple key exchanges

2 years agounit-tests: Fix CHILD_SA rekey tests after INVALID_KE_PAYLOAD handling changes
Tobias Brunner [Fri, 20 Jul 2018 12:12:48 +0000 (14:12 +0200)] 
unit-tests: Fix CHILD_SA rekey tests after INVALID_KE_PAYLOAD handling changes

The responder doesn't create a CHILD_SA and allocate an SPI anymore
when responding with an INVALID_KE_PAYLOAD notify.

2 years agochild-create: Add support for multiple key exchanges
Tobias Brunner [Thu, 25 Jun 2020 08:26:38 +0000 (10:26 +0200)] 
child-create: Add support for multiple key exchanges

It also changes that payloads are built before installing the CHILD_SA on
the responder, that is, the KE payload is generated before keys are derived,
so that key_exchange_t::get_public_key() is called before get_shared_secret(),
or it's internal equivalent, which could be relevant for KE implementations
that want to ensure that the key can't be used again after the key
derivation.

2 years agoike-rekey: Support IKE_SA rekeying with multiple key exchanges
Tobias Brunner [Mon, 6 Apr 2020 15:41:15 +0000 (17:41 +0200)] 
ike-rekey: Support IKE_SA rekeying with multiple key exchanges

2 years agoike-init: Add support for multiple key exchanges
Tobias Brunner [Thu, 31 Oct 2019 16:16:44 +0000 (17:16 +0100)] 
ike-init: Add support for multiple key exchanges

Initially, this is handled with a key derivation for each
IKE_INTERMEDIATE exchange.  When rekeying the keys are derived only when
all IKE_FOLLOWUP_KE exchanges are done.

2 years agobus: Support multiple key exchanges in ike/child_keys() events
Tobias Brunner [Thu, 9 Apr 2020 09:53:45 +0000 (11:53 +0200)] 
bus: Support multiple key exchanges in ike/child_keys() events

2 years agokeymat_v2: Support key derivation with multiple key exchanges
Tobias Brunner [Thu, 9 Apr 2020 09:37:52 +0000 (11:37 +0200)] 
keymat_v2: Support key derivation with multiple key exchanges

2 years agokey-exchange: Add helper to concatenate shared secrets of several key exchanges
Tobias Brunner [Thu, 9 Apr 2020 09:36:30 +0000 (11:36 +0200)] 
key-exchange: Add helper to concatenate shared secrets of several key exchanges

2 years agokeymat_v2: Proper cleanup if derive_ike_keys() is called multiple times
Tobias Brunner [Thu, 28 Jun 2018 13:33:35 +0000 (15:33 +0200)] 
keymat_v2: Proper cleanup if derive_ike_keys() is called multiple times

2 years agoike-auth: Calculate and collect IntAuth for IKE_INTERMEDIATE exchanges
Tobias Brunner [Tue, 20 Aug 2019 15:07:55 +0000 (17:07 +0200)] 
ike-auth: Calculate and collect IntAuth for IKE_INTERMEDIATE exchanges

The message ID of the first IKE_AUTH exchange is a safe-guard against
potential truncation attacks if IKE_INTERMEDIATE exchanges are not used
for multiple key exchanges but some other future use where the number of
exchanges might not depend on the selected proposal.

2 years agopubkey-authenticator: Handle IntAuth data
Tobias Brunner [Tue, 20 Aug 2019 14:38:01 +0000 (16:38 +0200)] 
pubkey-authenticator: Handle IntAuth data

2 years agopsk-authenticator: Handle IntAuth data
Tobias Brunner [Tue, 20 Aug 2019 14:36:13 +0000 (16:36 +0200)] 
psk-authenticator: Handle IntAuth data

2 years agoeap-authenticator: Handle IntAuth data
Tobias Brunner [Tue, 20 Aug 2019 14:32:17 +0000 (16:32 +0200)] 
eap-authenticator: Handle IntAuth data

2 years agokeymat_v2: Include optional IntAuth in signed octets
Tobias Brunner [Tue, 20 Aug 2019 14:18:05 +0000 (16:18 +0200)] 
keymat_v2: Include optional IntAuth in signed octets

2 years agoauthenticator: Add optional method to set IntAuth data
Tobias Brunner [Tue, 20 Aug 2019 14:13:11 +0000 (16:13 +0200)] 
authenticator: Add optional method to set IntAuth data

2 years agomessage: Store original encrypted payload when generating fragments
Tobias Brunner [Mon, 19 Jul 2021 15:12:09 +0000 (17:12 +0200)] 
message: Store original encrypted payload when generating fragments

If we don't do this, get_plain() will fail after generating the message
fragmented.

2 years agomessage: Add method to generate data to authenticate IKE_INTERMEDIATE exchanges
Tobias Brunner [Tue, 20 Aug 2019 12:57:30 +0000 (14:57 +0200)] 
message: Add method to generate data to authenticate IKE_INTERMEDIATE exchanges

2 years agogenerator: Make pointer to length field optional
Tobias Brunner [Tue, 20 Aug 2019 12:53:16 +0000 (14:53 +0200)] 
generator: Make pointer to length field optional

Only useful if we generate an IKE header.

2 years agokeymat_v2: Add method to calculate IntAuth for IKE_INTERMEDIATE exchanges
Tobias Brunner [Tue, 2 Jul 2019 13:01:26 +0000 (15:01 +0200)] 
keymat_v2: Add method to calculate IntAuth for IKE_INTERMEDIATE exchanges

2 years agomessage: Add rules for IKE_FOLLOWUP_KE exchanges
Tobias Brunner [Fri, 3 Apr 2020 13:10:40 +0000 (15:10 +0200)] 
message: Add rules for IKE_FOLLOWUP_KE exchanges

2 years agoike-header: Add IKE_FOLLOWUP_KE exchange type
Tobias Brunner [Fri, 3 Apr 2020 13:01:17 +0000 (15:01 +0200)] 
ike-header: Add IKE_FOLLOWUP_KE exchange type

2 years agonotify-payload: Add notify types for multiple key exchanges
Tobias Brunner [Fri, 25 Oct 2019 12:27:47 +0000 (14:27 +0200)] 
notify-payload: Add notify types for multiple key exchanges

2 years agoikev2: Reject IKE_INTERMEDIATE requests after IKE_AUTH
Tobias Brunner [Tue, 8 Feb 2022 13:23:37 +0000 (14:23 +0100)] 
ikev2: Reject IKE_INTERMEDIATE requests after IKE_AUTH

We currently only support these exchanges for additional key exchanges,
so once we have the final keys derived and the ike-init task is removed,
we don't expect any more of them.

2 years agomessage: Add rules for IKE_INTERMEDIATE exchanges
Tobias Brunner [Fri, 25 Oct 2019 12:40:35 +0000 (14:40 +0200)] 
message: Add rules for IKE_INTERMEDIATE exchanges

2 years agoike-header: Add IKE_INTERMEDIATE exchange type
Tobias Brunner [Fri, 25 Oct 2019 12:39:54 +0000 (14:39 +0200)] 
ike-header: Add IKE_INTERMEDIATE exchange type

2 years agonotify-payload: Add notify type for IKE_INTERMEDIATE exchange
Tobias Brunner [Wed, 18 Dec 2019 17:42:59 +0000 (18:42 +0100)] 
notify-payload: Add notify type for IKE_INTERMEDIATE exchange

2 years agoproposal-substructure: Encode additional key exchange methods
Tobias Brunner [Fri, 25 Oct 2019 12:55:05 +0000 (14:55 +0200)] 
proposal-substructure: Encode additional key exchange methods

2 years agoproposal: Make all key exchange transforms optional in ESP/AH proposals
Tobias Brunner [Tue, 5 Nov 2019 09:22:36 +0000 (10:22 +0100)] 
proposal: Make all key exchange transforms optional in ESP/AH proposals

2 years agoproposal: Skip all KE transforms if PROPOSAL_SKIP_KE given
Tobias Brunner [Tue, 29 Oct 2019 10:50:00 +0000 (11:50 +0100)] 
proposal: Skip all KE transforms if PROPOSAL_SKIP_KE given

2 years agotransform: Add helper to check if transform type negotiates key exchange
Tobias Brunner [Tue, 29 Oct 2019 10:46:22 +0000 (11:46 +0100)] 
transform: Add helper to check if transform type negotiates key exchange

2 years agotransform: Add additional key exchange transform types
Tobias Brunner [Fri, 25 Oct 2019 12:20:59 +0000 (14:20 +0200)] 
transform: Add additional key exchange transform types

2 years agoappveyor: Build eap-radius plugin on Windows
Tobias Brunner [Wed, 8 Mar 2023 14:33:43 +0000 (15:33 +0100)] 
appveyor: Build eap-radius plugin on Windows

2 years agolibradius: Link to winsock32 on Windows
Tobias Brunner [Wed, 8 Mar 2023 14:55:38 +0000 (15:55 +0100)] 
libradius: Link to winsock32 on Windows

2 years agoeap-radius: Don't include socket.h explicitly
Tobias Brunner [Wed, 8 Mar 2023 14:31:42 +0000 (15:31 +0100)] 
eap-radius: Don't include socket.h explicitly

We rely on the includes via utils.h so this compiles on Windows.

2 years agowindows: Fix compat define for sendto(2)
Tobias Brunner [Wed, 8 Mar 2023 14:05:42 +0000 (15:05 +0100)] 
windows: Fix compat define for sendto(2)

2 years agokernel-wfp: Install bypass policies also on FWPM_SUBLAYER_IPSEC_TUNNEL sublayer
Tobias Brunner [Wed, 1 Mar 2023 16:08:37 +0000 (17:08 +0100)] 
kernel-wfp: Install bypass policies also on FWPM_SUBLAYER_IPSEC_TUNNEL sublayer

This is apparently necessary to bypass tunnel mode SAs/policies.

References strongswan/strongswan#1552

2 years agowindows: Fix invalid pointer dereference when terminating service thread
Tobias Brunner [Tue, 7 Mar 2023 15:57:27 +0000 (16:57 +0100)] 
windows: Fix invalid pointer dereference when terminating service thread

When running as a service, the libraries are initialized/deinitialized
not by the main thread but by a separate thread that runs the registered
main service procedure.  When the service is stopped, the libraries are
deinitialized by that thread and the thread lock and hashtable are
destroyed.  But afterwards the DllMain callback is also triggered for
that thread so we have to prevent it from accessing these objects again.

References strongswan/strongswan#1567

2 years agocontroller: Immediately return after re-initiating an existing IKE_SA childless
Tobias Brunner [Wed, 1 Mar 2023 16:31:07 +0000 (17:31 +0100)] 
controller: Immediately return after re-initiating an existing IKE_SA childless

If no CHILD_SA is initiated, we wait for a state change to IKE_ESTABLISHED
but that will never happen for already established IKE_SAs.

References strongswan/strongswan#1553

2 years agovici: Fix fallback to remote ID if no mediation peer ID is configured
Tobias Brunner [Thu, 2 Mar 2023 09:21:43 +0000 (10:21 +0100)] 
vici: Fix fallback to remote ID if no mediation peer ID is configured

Also adds error reporting via VICI for issues with mediation settings.

Fixes: 229cdf6bc8f2 ("vici: Order auth rounds by optional `round` parameter instead of by position in the request")
References strongswan/strongswan#1569

2 years agodhcp: Don't use get_source_addr() to determine source address
Tobias Brunner [Fri, 10 Mar 2023 09:43:24 +0000 (10:43 +0100)] 
dhcp: Don't use get_source_addr() to determine source address

That method is subject to interface filtering, which isn't ideal for
DHCP traffic that probably uses an internal interface on which the IKE
daemon might be disabled.  In that case `giaddr` is set to an incorrect
public IP, which in turn might prevent the plugin from receiving the
DHCP server's unicast response, in particular if the DHCP socket
is bound to the internal interface.

This new approach connects the client socket and thereby determines the
source address to reach the DHCP server.

Closes strongswan/strongswan#1573

2 years agopki: Fix enum for SCEP CA capabilities
Tobias Brunner [Fri, 17 Mar 2023 16:24:41 +0000 (17:24 +0100)] 
pki: Fix enum for SCEP CA capabilities

As indicated by the comparisons and the parsing in scep_parse_caps()
this should be a bitmask.

Fixes: 7c7a5a0260ca ("pki: Enroll an X.509 certificate with a SCEP server")
Closes strongswan/strongswan#1607

2 years agoeap-tls: Fix server implementation with TLS 1.2 and earlier
Tobias Brunner [Mon, 13 Mar 2023 12:39:17 +0000 (13:39 +0100)] 
eap-tls: Fix server implementation with TLS 1.2 and earlier

With 5401a74d3608 ("eap-tls: Add support for TLS 1.3") a TLS application
was added to implement TLS 1.3's protected success indication.  For
earlier TLS versions, its build() method simply returned SUCCESS as
there was nothing to send.  However, that had the unintended side-effect
of also not sending the final TLS handshake messages (ChangeCipherSpec
and Finished).

The reason is that the TLS stack first checks for remaining handshake
messages but then also asks the registered application for data to
piggyback to that response (before the commit there was no application,
so that step was skipped).  The problem is that the status returned by
the application is directly forwarded through the TLS stack.  So not
returning INVALID_STATE caused the session to get concluded immediately
instead of resulting in ALREADY_DONE that would trigger sending the
final EAP message instead of an EAP-Success.

Fixes: 5401a74d3608 ("eap-tls: Add support for TLS 1.3")
2 years agotls: Only return EAP MSK if TLS handshake is complete
Tobias Brunner [Mon, 13 Mar 2023 12:26:25 +0000 (13:26 +0100)] 
tls: Only return EAP MSK if TLS handshake is complete

The MSK is generated when the keys are derived.  For TLS 1.3 that's also
when the handshake is complete.  However, for TLS 1.2 it happens when
generating or processing the ClientKeyExchange message, which, on the
client, happens before the final Finished handshake message has been
received from the server.  This caused the EAP-TLS client to accept an
EAP-Success message instead of the server's final TLS handshake
messages, unintentionally allowing servers to cut the exchange short by
two EAP messages (in the regular exchange the response to the server's
final handshake messages is an empty EAP-Response, which is then
followed by the server's EAP-Success).

While this is not correct, it does not seem to pose a security issue.
If DH is used as key exchange, the server signs the ServerKeyExchange
message and the client is sure to communicate with a trusted server
before it derives the MSK.  If RSA encryption is used as key exchange,
the client sends the premaster secret, on which the MSK is based,
encrypted with the server's public key (as extracted from the trusted
certificate).  An attacker won't be able to decrypt this and, therefore,
can't derive the same MSK to generate a valid AUTH payload and the IKE
authentication will fail.

2 years agogithub: Add LSan workaround for tests on Ubuntu 20.04 again
Tobias Brunner [Thu, 16 Mar 2023 13:11:12 +0000 (14:11 +0100)] 
github: Add LSan workaround for tests on Ubuntu 20.04 again

This was removed with 0fea6a7f8e7e ("github: Adapt to switch to Ubuntu
22.04 for ubuntu-latest") as it didn't seem necessary anymore.  But
recently there have been such random crashes again with the 20.04 image.

2 years agogithub: Use OpenSSL 3.1.0 for tests
Tobias Brunner [Tue, 14 Mar 2023 16:03:05 +0000 (17:03 +0100)] 
github: Use OpenSSL 3.1.0 for tests

2 years agovici: Generalize timeout support in Python bindings
Jean-Tiare Le Bigot [Thu, 2 Mar 2023 22:20:13 +0000 (23:20 +0100)] 
vici: Generalize timeout support in Python bindings

Since 3dd5dc50119d ("Merge branch 'vici-python-timeout'"), any timeout
set directly on the socket is reset by `vici.Transport.receive()` unless
called by `vici.Session.listen()`. This prevents configuring a default
timeout directly on the socket.

However, setting a timeout directly on the socket also had drawbacks
since it can cause `vici.Transport.receive()` to raise a timeout error
while a subset of the data have been received, with no way to recover.

This commit merges both approaches by considering the timeout configured
on the socket by default (when no timeout is explicitly set) and
keeping the switch to blocking receive once the first byte has been
received. When the full expected data have been received, the timeout
configured on the socket is restored.

Co-authored-by: Tobias Brunner <tobias@strongswan.org>
Signed-off-by: Jean-Tiare Le Bigot <jt@yadutaf.fr>
Closes strongswan/strongswan#1562

2 years agogithub: Don't build on Ubuntu 18.04 anymore
Tobias Brunner [Tue, 7 Mar 2023 13:51:10 +0000 (14:51 +0100)] 
github: Don't build on Ubuntu 18.04 anymore

The Ubuntu 18.04 image is deprecated and builds will start to fail
temporarily during four 24 hour periods from now until the final
deprecation on April 1st.  So better remove these runs now.

2 years agoappveyor: Fix LDFLAGS for Windows build
Tobias Brunner [Fri, 3 Mar 2023 12:02:44 +0000 (13:02 +0100)] 
appveyor: Fix LDFLAGS for Windows build

With newer OpenSSL builds, the DLL files contain parts of the version
number and the architecture in their name, e.g. for OpenSSL 1.1.1 the
DLL for libcrypto is called libcrypto-1_1-x64.dll.  So referencing that
directly could be kinda tricky.  And by using `-lcrypto` we therefore
didn't link those DLLs but the OpenSSL version installed by msys2.
Since the latter ships OpenSSL 3 since January and the VS 2019 image
was updated recently, our builds broke as we used the headers from
the 1.1.1 installation but then tried to link OpenSSL 3.

Luckily, in the lib/ directory of the OpenSSL installation, there is a
libcrypto.lib file, which is an import library (containing the symbols
and a reference to the DLL).  We can use that to link the right library
via `-lcrypto`.

With the old OpenSSL 1.0.2 build on the VS 2015 image, there is also
such a .lib file but it seems the linker is too old or otherwise incapable
of finding the DLL.  But since the DLL is just called libeay32.dll there,
we use that directly and don't reference the lib/ dir.

Also removed a superfluous AC_MSG_RESULT() if libeay32 isn't found.

2 years agoappveyor: Install gperf manually on newer versions of msys2
Tobias Brunner [Thu, 2 Mar 2023 10:44:59 +0000 (11:44 +0100)] 
appveyor: Install gperf manually on newer versions of msys2

2 years agoVersion bump to 5.9.10 5.9.10
Andreas Steffen [Thu, 2 Mar 2023 08:58:24 +0000 (09:58 +0100)] 
Version bump to 5.9.10

2 years agoNEWS: Add info about CVE-2023-26463
Tobias Brunner [Fri, 24 Feb 2023 15:07:38 +0000 (16:07 +0100)] 
NEWS: Add info about CVE-2023-26463

2 years agoeap-peap: Initiate Phase 2 immediately for TLS 1.3
Tobias Brunner [Wed, 1 Mar 2023 14:51:38 +0000 (15:51 +0100)] 
eap-peap: Initiate Phase 2 immediately for TLS 1.3

Before TLS 1.3, the server sent the last handshake message and had the
option to piggyback the EAP-Identity request directly onto the packet
with the TLS Finished message, or wait for the empty message by the
client that acknowledges the completion of the handshake.  With TLS 1.3,
the client finishes the handshake after the server.  So this option
is irrelevant there and we immediately start with Phase 2.

2 years agotesting: Negotiate TLS 1.3 for part of the EAP-TLS scenarios
Andreas Steffen [Wed, 1 Mar 2023 09:42:06 +0000 (10:42 +0100)] 
testing: Negotiate TLS 1.3 for part of the EAP-TLS scenarios

2 years agoNEWS: Add news for 5.9.10
Tobias Brunner [Fri, 24 Feb 2023 15:03:07 +0000 (16:03 +0100)] 
NEWS: Add news for 5.9.10

2 years agopki: Add possibility to add/remove flags in requests when issuing certificates
Tobias Brunner [Thu, 23 Feb 2023 16:03:05 +0000 (17:03 +0100)] 
pki: Add possibility to add/remove flags in requests when issuing certificates

2 years agopki: Allow overriding EKU flags from certificate request via command line
Tobias Brunner [Thu, 23 Feb 2023 15:54:51 +0000 (16:54 +0100)] 
pki: Allow overriding EKU flags from certificate request via command line

The flags encoded in the PKCS#10 structure (or derived from the encoded
profile name) might not be appropriate in some instances. This allows
overriding them without having to issue a new certificate request.

2 years agoVersion bump to 5.9.10rc1 5.9.10rc1
Andreas Steffen [Wed, 22 Feb 2023 19:00:18 +0000 (20:00 +0100)] 
Version bump to 5.9.10rc1

2 years agotesting: Add a failing client to the ikev2/rw-eap-tls-only scenario
Tobias Brunner [Wed, 22 Feb 2023 16:10:03 +0000 (17:10 +0100)] 
testing: Add a failing client to the ikev2/rw-eap-tls-only scenario

2 years agolibvici: Fix Doxygen comment for vici_on_close()
Tobias Brunner [Wed, 22 Feb 2023 13:08:24 +0000 (14:08 +0100)] 
libvici: Fix Doxygen comment for vici_on_close()

Fixes: 9e5533fef940 ("libvici: Add callback invoked if connection is closed by daemon")
2 years agoswanctl: Fix Windows build of --monitor-sas command
Tobias Brunner [Wed, 22 Feb 2023 13:01:59 +0000 (14:01 +0100)] 
swanctl: Fix Windows build of --monitor-sas command

Fixes: 4784c92c557f ("swanctl: Terminate --monitor-sa command if daemon closes connection")
2 years agoutils: Add counterpart to wait_sigint() to explicitly stop waiting
Tobias Brunner [Wed, 22 Feb 2023 13:29:39 +0000 (14:29 +0100)] 
utils: Add counterpart to wait_sigint() to explicitly stop waiting

2 years agoMerge branch 'nm-xfrmi'
Tobias Brunner [Wed, 22 Feb 2023 12:44:10 +0000 (13:44 +0100)] 
Merge branch 'nm-xfrmi'

Use XFRM interfaces instead of dummy TUN devices to avoid issues with
name resolution if supported by the kernel.

Closes strongswan/strongswan#1048

2 years agocharon-nm: Use an XFRM interface if available
Tobias Brunner [Mon, 9 Jan 2023 14:19:43 +0000 (15:19 +0100)] 
charon-nm: Use an XFRM interface if available

This allows NM more freedom in regards to how it wants to use the passed
device.  In particular, if dnsmasq is used with NM as that binds to the
interface to send requests via VPN.

Installing the VIPs on lo avoids weird address removal/addition events
that happen for IPv6 on the physical interface (which would cause the VIP
to get incorrectly detected as non-VIP address and ignored during
deletion).

We could let NM install routes via XFRM interface, however, that causes
problems with e.g. the bypass-lan plugin (the throw routes in table 220
wouldn't have any effect).  We could let it install regular routes in
the main table, but determining the physical interface would be tricky
as the routes installed by NM, also in the main table, would conflict.

So instead we let the kernel-netlink interface install routes via XFRM
interface and to avoid routing the IKE traffic that way, we set a mark
on the IKE socket and exclude traffic with that mark from our routing
table.

2 years agokernel-netlink: Add an option to install routes for SAs with XFRM interfaces
Tobias Brunner [Mon, 9 Jan 2023 14:10:55 +0000 (15:10 +0100)] 
kernel-netlink: Add an option to install routes for SAs with XFRM interfaces

Since these might conflict with IKE traffic, this requires special care.
One option is to install bypass policies for the peer, which install
appropriate (throw) routes.  However, that won't work if the traffic to
the gateway itself should be protected, in particular, for host-to-host
tunnels.  So an alternative is to set a mark for the IKE socket and then
exclude that traffic from table 220 via the kernel-netlink plugin's
fwmark option.

2 years agokernel-netlink: Automatically bring up XFRM interfaces after creation
Tobias Brunner [Mon, 9 Jan 2023 13:54:28 +0000 (14:54 +0100)] 
kernel-netlink: Automatically bring up XFRM interfaces after creation

2 years agokernel-netlink: Add manager for XFRM interfaces
Tobias Brunner [Mon, 11 Jul 2022 11:12:46 +0000 (13:12 +0200)] 
kernel-netlink: Add manager for XFRM interfaces

The manager will allow charon-nm to create XFRM interfaces if supported
by the kernel instead of creating an unused dummy TUN interface.

The xfrmi tool is mostly obsolete nowadays as iproute2 supports creating
XFRM interfaces since 5.1.0 (2019-05).  Older Debians don't ship that and
early versions didn't list the interface IDs.  So there might still be
some uses for this tool.

2 years agocharon-nm: Tie lifetime of dummy TUN device to connection
Tobias Brunner [Thu, 5 Jan 2023 15:24:42 +0000 (16:24 +0100)] 
charon-nm: Tie lifetime of dummy TUN device to connection

NM doesn't terminate charon-nm after disconnecting, so the TUN device
previously stayed around even if no connection was established.  This
might be a bit more what users expect.

2 years agoeap-tls: Add support for TLS 1.3
Tobias Brunner [Tue, 17 Jan 2023 14:06:40 +0000 (15:06 +0100)] 
eap-tls: Add support for TLS 1.3

As defined in RFC 9190, a "protected success indication" (0x00) is sent
from the server to the client over the TLS connection when using TLS 1.3.

The client responds with an empty EAP message, which is interpreted as
acknowledgement in our stack.

If we ever support session resumption with tunneled methods such as
EAP-TTLS, we'd have to send such an indication there too.

2 years agotls-crypto: Fix MSK calculation for TLS 1.3
Tobias Brunner [Fri, 12 Feb 2021 12:25:05 +0000 (13:25 +0100)] 
tls-crypto: Fix MSK calculation for TLS 1.3

As noted in 121ac4b9e37e ("tls-crypto: Generate MSK for TLS 1.3"), the
calculation was only preliminary.  It is now fixed according to RFC 9190
and draft-ietf-emu-tls-eap-types (soon to become an RFC, currently in
the RFC editor queue).

Fixes: 121ac4b9e37e ("tls-crypto: Generate MSK for TLS 1.3")
2 years agoMerge branch 'kernel-netlink-sa-lastused'
Tobias Brunner [Wed, 22 Feb 2023 12:21:31 +0000 (13:21 +0100)] 
Merge branch 'kernel-netlink-sa-lastused'

Adds support for a change in Linux kernel 6.2 that allows retrieving
the last use time of an SA from the SA itself instead of having to query
the policies.

2 years agokernel-netlink: Increase log level for dumped Netlink messages
Tobias Brunner [Wed, 11 Jan 2023 16:05:37 +0000 (17:05 +0100)] 
kernel-netlink: Increase log level for dumped Netlink messages

Some of these contain key material so they should be logged on level 4.

2 years agoandroid: Announce support for TFC padding
Tobias Brunner [Thu, 23 Jun 2022 14:38:02 +0000 (16:38 +0200)] 
android: Announce support for TFC padding

Has been supported by libipsec for a long time (since 5.1.1).  UDP encap
is already enforced via config, this just makes the flags the same as
in kernel-libipsec.

2 years agokernel-netlink: Read last use time from SA if possible
Tobias Brunner [Thu, 23 Jun 2022 14:15:45 +0000 (16:15 +0200)] 
kernel-netlink: Read last use time from SA if possible

Since 6.2 the Linux kernel updates the last use time per SA.  In
previous releases the attribute was only updated and reported for
specific outbound IPv6 SAs.

Using this reduces the number of kernel queries per CHILD_SA: for DPDs
from two policy queries (IN/FWD) to a single query of the inbound SA,
and for status reports the three policy queries (IN/FWD/OUT) can be
omitted and only the two SAs have to be queried.  For NAT keepalives the
number of queries doesn't change but a policy query (OUT) is replaced by
a query for the outbound SA.

While we could use the existence of the attribute as indicator for its
support, we don't know this until we queried an SA.  By using a version
check we can announce the feature from the start.

2 years agochild-sa: Query policies only if querying SAs doesn't update the use time
Tobias Brunner [Thu, 23 Jun 2022 14:13:02 +0000 (16:13 +0200)] 
child-sa: Query policies only if querying SAs doesn't update the use time

2 years agokernel-interface: Add feature to indicate if query_sa() returns last use time
Tobias Brunner [Thu, 23 Jun 2022 13:59:56 +0000 (15:59 +0200)] 
kernel-interface: Add feature to indicate if query_sa() returns last use time

Currently supported by libipsec and PF_KEY on macOS (FreeBSD, like Linux,
reports the time the SA was first used in sadb_lifetime_usetime - it also
triggers rekeyings based on that, which Linux doesn't, it also triggers
them if an SA is never used).

2 years agoikev2: Add option to prefer childless IKE_SAs as initiator
Tobias Brunner [Fri, 3 Feb 2023 08:46:37 +0000 (09:46 +0100)] 
ikev2: Add option to prefer childless IKE_SAs as initiator

2 years agoswanctl: Terminate --monitor-sa command if daemon closes connection
Tobias Brunner [Thu, 26 Jan 2023 10:17:30 +0000 (11:17 +0100)] 
swanctl: Terminate --monitor-sa command if daemon closes connection

2 years agolibvici: Add callback invoked if connection is closed by daemon
Tobias Brunner [Thu, 26 Jan 2023 10:16:11 +0000 (11:16 +0100)] 
libvici: Add callback invoked if connection is closed by daemon

2 years agogithub: Explicitly install pkg-config in macOS build
Tobias Brunner [Mon, 20 Feb 2023 13:24:29 +0000 (14:24 +0100)] 
github: Explicitly install pkg-config in macOS build

Apparently not installed anymore in the latest build image.  If it's
missing, we see errors like these:

  configure.ac:38: error: possibly undefined macro: AC_DEFINE

2 years agoandroid: Update the README for the build via NDK
Tobias Brunner [Mon, 20 Feb 2023 13:11:29 +0000 (14:11 +0100)] 
android: Update the README for the build via NDK

2 years agoandroid: New release after OpenSSL plugin fix android-2.4.1-1
Tobias Brunner [Fri, 17 Feb 2023 15:59:13 +0000 (16:59 +0100)] 
android: New release after OpenSSL plugin fix

2 years agoopenssl: Fix size of plugin feature array
Tobias Brunner [Fri, 17 Feb 2023 15:58:19 +0000 (16:58 +0100)] 
openssl: Fix size of plugin feature array

Fixes: 312847e1a322 ("openssl: Add curve25519 and curve448 after ECDH groups")
2 years agoandroid: New release after fixing interoperability issue with Zyxel firewalls android-2.4.1
Tobias Brunner [Fri, 17 Feb 2023 15:36:28 +0000 (16:36 +0100)] 
android: New release after fixing interoperability issue with Zyxel firewalls