Changelog for 4.2.x¶
- The new server-side EAP RADIUS plugin (--enable-eap-radius)
relays EAP messages to and from a RADIUS server. Succesfully
tested with with a freeradius server using EAP-MD5 and EAP-SIM.
- A vulnerability in the Dead Peer Detection (RFC 3706) code was found by
Gerd v. Egidy <gerd.von.egidy AT intra2net DOT com> of Intra2net AG affecting
all Openswan and strongSwan releases. A malicious (or expired ISAKMP)
R_U_THERE or R_U_THERE_ACK Dead Peer Detection packet can cause the
pluto IKE daemon to crash and restart. No authentication or encryption
is required to trigger this bug. One spoofed UDP packet can cause the
pluto IKE daemon to restart and be unresponsive for a few seconds while
restarting. This DPD null state vulnerability has been officially
registered as CVE-2009-0790 and is fixed by this release.
- ASN.1 to time_t conversion caused a time wrap-around for
dates after Jan 18 03:14:07 UTC 2038 on 32-bit platforms.
As a workaround such dates are set to the maximum representable
time, i.e. Jan 19 03:14:07 UTC 2038.
- Distinguished Names containing wildcards (*) are not sent in the
IDr payload anymore.
- Fixed a use-after-free bug in the DPD timeout section of the
IKEv1 pluto daemon which sporadically caused a segfault.
- Fixed a crash in the IKEv2 charon daemon occuring with
mixed RAM-based and SQL-based virtual IP address pools.
- Fixed ASN.1 parsing of algorithmIdentifier objects where the
parameters field is optional.
- Ported nm plugin to NetworkManager 7.1.
- Support of the EAP-MSCHAPv2 protocol enabled by the option
--enable-eap-mschapv2. Requires the MD4 hash algorithm enabled
either by --enable-md4 or --enable-openssl.
- Assignment of up to two DNS and up to two WINS servers to peers via
the IKEv2 Configuration Payload (CP). The IPv4 or IPv6 nameserver
addresses are defined in strongswan.conf.
- The strongSwan applet for the Gnome NetworkManager is now built and
distributed as a separate tarball under the name NetworkManager-strongswan.
- Fixed ESP NULL encryption broken by the refactoring of keymat.c.
Also introduced proper initialization and disposal of keying material.
- Fixed the missing listing of connection definitions in ipsec statusall
broken by an unfortunate local variable overload.
- Several performance improvements to handle thousands of tunnels with almost
linear upscaling. All relevant data structures have been replaced by faster
counterparts with better lookup times.
- Better parallelization to run charon on multiple cores. Due to improved
ressource locking and other optimizations the daemon can take full
advantage of 16 or even more cores.
- The load-tester plugin can use a NULL Diffie-Hellman group and simulate
unique identities and certificates by signing peer certificates using a CA
on the fly.
- The redesigned stroke in-memory IP pool handles leases. The "ipsec leases"
command queries assigned leases.
- Added support for smartcards in charon by using the ENGINE API provided by
OpenSSL, based on patches by Michael Roßberg.
- The Padlock plugin supports the hardware RNG found on VIA CPUs to provide a
reliable source of randomness.
- Flexible configuration of logging subsystem allowing to log to multiple
syslog facilities or to files using fine-grained log levels for each target.
- Load testing plugin to do stress testing of the IKEv2 daemon against self
or another host. Found and fixed issues during tests in the multi-threaded
use of the OpenSSL plugin.
- Added profiling code to synchronization primitives to find bottlenecks if
running on multiple cores. Found and fixed an issue where parts of the
Diffie-Hellman calculation acquired an exclusive lock. This greatly improves
parallelization to multiple cores.
- updown script invocation has been separated into a plugin of its own to
further slim down the daemon core.
- Separated IKE_SA/CHILD_SA key derivation process into a closed system,
allowing future implementations to use a secured environment in e.g. kernel
memory or hardware.
- The kernel interface of charon has been modularized. XFRM NETLINK (default)
and PFKEY (--enable-kernel-pfkey) interface plugins for the native IPsec
stack of the Linux 2.6 kernel as well as a PFKEY interface for the KLIPS
IPsec stack (--enable-kernel-klips) are provided.
- Basic Mobile IPv6 support has been introduced, securing Binding Update
messages as well as tunneled traffic between Mobile Node and Home Agent.
The installpolicy=no option allows peaceful cooperation with a dominant
mip6d daemon and the new type=transport_proxy implements the special MIPv6
IPsec transport proxy mode where the IKEv2 daemon uses the Care-of-Address
but the IPsec SA is set up for the Home Adress.
- Implemented migration of Mobile IPv6 connections using the KMADDRESS
field contained in XFRM_MSG_MIGRATE messages sent by the mip6d daemon
via the Linux 2.6.28 (or appropriately patched) kernel.
- IKEv2 charon daemon supports authentication based on raw public keys
stored in the SQL database backend. The ipsec listpubkeys command
lists the available raw public keys via the stroke interface.
- Several MOBIKE improvements: Detect changes in NAT mappings in DPD exchanges,
handle events if kernel detects NAT mapping changes in UDP-encapsulated
ESP packets (requires kernel patch), reuse old addesses in MOBIKE updates as
long as possible and other fixes.
- Fixed a bug in addr_in_subnet() which caused insertion of wrong source
routes for destination subnets having netwmasks not being a multiple of 8 bits.
Thanks go to Wolfgang Steudel, TU Ilmenau for reporting this bug.
- Fixed a Denial-of-Service vulnerability where an IKE_SA_INIT message with
a KE payload containing zeroes only can cause a crash of the IKEv2 charon
daemon due to a NULL pointer returned by the mpz_export() function of the
GNU Multiprecision Library (GMP). Thanks go to Mu Dynamics Research Labs
for making us aware of this problem.
- The new agent plugin provides a private key implementation on top of an
- The NetworkManager plugin has been extended to support certificate client
authentication using RSA keys loaded from a file or using ssh-agent.
- Daemon capability dropping has been ported to libcap and must be enabled
explicitly --with-capabilities=libcap. Future version will support the
newer libcap2 library.
- ipsec listalgs lists the IKEv2 cryptografic algorithms registered with the
charon keying daemon.
- A NetworkManager plugin allows GUI-based configuration of road-warrior
clients in a simple way. It features X509 based gateway authentication
and EAP client authentication, tunnel setup/teardown and storing passwords
in the Gnome Keyring.
- A new EAP-GTC plugin implements draft-sheffer-ikev2-gtc-00.txt and allows
username/password authentication against any PAM service on the gateway.
The new EAP method interacts nicely with the NetworkManager plugin and allows
client authentication against e.g. LDAP.
- Improved support for the EAP-Identity method. The new ipsec.conf eap_identity
parameter defines an additional identity to pass to the server in EAP
- The "ipsec statusall" command now lists CA restrictions, EAP
authentication types and EAP identities.
- Fixed two multithreading deadlocks occurring when starting up
several hundred tunnels concurrently.
- Fixed the --enable-integrity-test configure option which
computes a SHA-1 checksum over the libstrongswan library.
- Consistent logging of IKE and CHILD SAs at the audit (AUD) level.
- Improved the performance of the SQL-based virtual IP address pool
by introducing an additional addresses table. The leases table
storing only history information has become optional and can be
disabled by setting charon.plugins.sql.lease_history = no in
- The XFRM_STATE_AF_UNSPEC flag added to xfrm.h allows IPv4-over-IPv6
and IPv6-over-IPv4 tunnels with the 2.6.26 and later Linux kernels.
- management of different virtual IP pools for different
network interfaces have become possible.
- fixed a bug which prevented the assignment of more than 256
virtual IP addresses from a pool managed by an sql database.
- fixed a bug which did not delete own IPCOMP SAs in the kernel.
- Added statistics functions to ipsec pool --status and ipsec pool --leases
and input validation checks to various ipsec pool commands.
- ipsec statusall now lists all loaded charon plugins and displays
the negotiated IKEv2 cipher suite proposals.
- The openssl plugin supports the elliptic curve Diffie-Hellman groups
19, 20, 21, 25, and 26.
- The openssl plugin supports ECDSA authentication using elliptic curve
- Fixed a bug in stroke which caused multiple charon threads to close
the file descriptors during packet transfers over the stroke socket.
- ESP sequence numbers are now migrated in IPsec SA updates handled by
MOBIKE. Works only with Linux kernels >= 2.6.17.
- Fixed the strongswan.conf path configuration problem that occurred when
--sysconfig was not set explicitly in ./configure.
- Fixed a number of minor bugs that where discovered during the 4th
IKEv2 interoperability workshop in San Antonio, TX.
- Plugins for libstrongswan and charon can optionally be loaded according
to a configuration in strongswan.conf. Most components provide a
"load = " option followed by a space separated list of plugins to load.
This allows e.g. the fallback from a hardware crypto accelerator to
to software-based crypto plugins.
- Charons SQL plugin has been extended by a virtual IP address pool.
Configurations with a rightsourceip=%poolname setting query a SQLite or
MySQL database for leases. The "ipsec pool" command helps in administrating
the pool database. See ipsec pool --help for the available options
- The Authenticated Encryption Algorithms AES-CCM-8/12/16 and AES-GCM-8/12/16
for ESP are now supported starting with the Linux 2.6.25 kernel. The
syntax is e.g. esp=aes128ccm12 or esp=aes256gcm16.
- Support for "Hash and URL" encoded certificate payloads has been implemented
in the IKEv2 daemon charon. Using the "certuribase" option of a CA section
allows to assign a base URL to all certificates issued by the specified CA.
The final URL is then built by concatenating that base and the hex encoded
SHA1 hash of the DER encoded certificate. Note that this feature is disabled
by default and must be enabled using the option "charon.hash_and_url".
- The IKEv2 daemon charon now supports the "uniqueids" option to close multiple
IKE_SAs with the same peer. The option value "keep" prefers existing
connection setups over new ones, where the value "replace" replaces existing
- The crypto factory in libstrongswan additionaly supports random number
generators, plugins may provide other sources of randomness. The default
plugin reads raw random data from /dev/(u)random.
- Extended the credential framework by a caching option to allow plugins
persistent caching of fetched credentials. The "cachecrl" option has been
- The new trustchain verification introduced in 4.2.0 has been parallelized.
Threads fetching CRL or OCSP information no longer block other threads.
- A new IKEv2 configuration attribute framework has been introduced allowing
plugins to provide virtual IP addresses, and in the future, other
configuration attribute services (e.g. DNS/WINS servers).
- The stroke plugin has been extended to provide virtual IP addresses from
a pool defined in ipsec.conf. The "rightsourceip" parameter now accepts
address pools in CIDR notation (e.g. 10.1.1.0/24). The parameter also accepts
the value "%poolname", where "poolname" identifies a pool provided by a
- Fixed compilation on uClibc and a couple of other minor bugs.
- Set DPD defaults in ipsec starter to dpd_delay=30s and dpd_timeout=150s.
- The IKEv1 pluto daemon now supports the ESP encryption algorithm CAMELLIA
with key lengths of 128, 192, and 256 bits, as well as the authentication
algorithm AES_XCBC_MAC. Configuration example: esp=camellia192-aesxcbc.
- libstrongswan has been modularized to attach crypto algorithms,
credential implementations (keys, certificates) and fetchers dynamically
through plugins. Existing code has been ported to plugins:
- RSA/Diffie-Hellman implementation using the GNU Multi Precision library
- X509 certificate system supporting CRLs, OCSP and attribute certificates
- Multiple plugins providing crypto algorithms in software
- CURL and OpenLDAP fetcher
- libstrongswan gained a relational database API which uses pluggable database
providers. Plugins for MySQL and SQLite are available.
- The IKEv2 keying daemon charon is more extensible. Generic plugins may provide
connection configuration, credentials and EAP methods or control the daemon.
Existing code has been ported to plugins:
- EAP-AKA, EAP-SIM, EAP-MD5 and EAP-Identity
- stroke configuration, credential and control (compatible to pluto)
- XML based management protocol to control and query the daemon
The following new plugins are available:
- An experimental SQL configuration, credential and logging plugin on
top of either MySQL or SQLite
- A unit testing plugin to run tests at daemon startup
- The authentication and credential framework in charon has been heavily
refactored to support modular credential providers, proper
CERTREQ/CERT payload exchanges and extensible authorization rules.
- The framework of strongSwan Manager has envolved to the web application
framework libfast (FastCGI Application Server w/ Templates) and is usable
by other applications.