Project

General

Profile

Version 5.5.3 » History » Version 3

Tobias Brunner, 30.05.2017 14:09
Vulnerabilities added

1 1 Tobias Brunner
h1. Version 5.5.3
2 1 Tobias Brunner
3 3 Tobias Brunner
* Fixed a DoS vulnerability in the _gmp_ plugin that was caused by insufficient input
4 3 Tobias Brunner
  validation when verifying RSA signatures.  More specifically, @mpz_powm_sec()@ has two
5 3 Tobias Brunner
  requirements regarding the passed exponent and modulus that the plugin did not
6 3 Tobias Brunner
  enforce, if these are not met the calculation will result in a floating point exception
7 3 Tobias Brunner
  that crashes the whole process.
8 3 Tobias Brunner
  This vulnerability has been registered as "CVE-2017-9022":https://www.cve.mitre.org/cgi-bin/cvename.cgi?name=2017-9022.
9 3 Tobias Brunner
  Please refer to "our blog":https://www.strongswan.org/blog/2017/05/30/strongswan-vulnerability-(cve-2017-9022).html for details.
10 3 Tobias Brunner
11 3 Tobias Brunner
* Fixed a DoS vulnerability in the _x509_ plugin that was caused because the ASN.1 parser
12 3 Tobias Brunner
  didn't handle ASN.1 CHOICE types properly, which could result in an infinite loop when
13 3 Tobias Brunner
  parsing X.509 extensions that use such types.
14 3 Tobias Brunner
  This vulnerability has been registered as "CVE-2017-9023":https://www.cve.mitre.org/cgi-bin/cvename.cgi?name=2017-9023.
15 3 Tobias Brunner
  Please refer to "our blog":https://www.strongswan.org/blog/2017/05/30/strongswan-vulnerability-(cve-2017-9023).html for details.
16 3 Tobias Brunner
17 2 Tobias Brunner
* The behavior during IKEv2 CHILD_SA rekeying has been changed in order to avoid
18 2 Tobias Brunner
  traffic loss. When responding to a @CREATE_CHILD_SA@ request to rekey a CHILD_SA
19 2 Tobias Brunner
  the responder already has everything available to install and use the new CHILD_SA.
20 2 Tobias Brunner
  However, this could lead to lost traffic as the initiator won't be able to process
21 2 Tobias Brunner
  inbound packets until it processed the @CREATE_CHILD_SA@ response and updated the
22 2 Tobias Brunner
  inbound SA.  To avoid this the responder now only installs the new inbound SA and
23 2 Tobias Brunner
  delays installing the outbound SA until it receives the DELETE for the replaced CHILD_SA.
24 2 Tobias Brunner
25 2 Tobias Brunner
  The messages transporting these DELETEs could reach the peer before packets sent
26 2 Tobias Brunner
  with the deleted outbound SAs reach it.  To reduce  the chance of traffic loss due
27 2 Tobias Brunner
  to this the inbound SA of the replaced CHILD_SA is not removed for a configurable
28 2 Tobias Brunner
  amount of seconds (_charon.delete_rekeyed_delay_) after the DELETE has been processed.
29 2 Tobias Brunner
30 2 Tobias Brunner
* The code base has been ported to Apple's ARM64 iOS platform, which required several
31 2 Tobias Brunner
  changes regarding the use of variadic functions.  This was necessary because the calling
32 2 Tobias Brunner
  conventions for variadic and regular functions are "different there":https://developer.apple.com/library/content/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARM64FunctionCallingConventions.html.
33 2 Tobias Brunner
  This means that assigning a non-variadic function to a variadic function pointer, as we
34 2 Tobias Brunner
  did with our @enumerator_t::enumerate()@ implementations and several callbacks, will
35 2 Tobias Brunner
  result in crashes as the called function accesses the arguments differently than the
36 2 Tobias Brunner
  caller provided them.  To avoid this issue the @enumerator_t@ interface has been changed
37 2 Tobias Brunner
  and the signature of the callback functions for @enumerator_create_filter()@ and two
38 2 Tobias Brunner
  methods on @linked_list_t@ have been changed. Refer to the *developer notes* below
39 2 Tobias Brunner
  for details.
40 2 Tobias Brunner
41 2 Tobias Brunner
* Adds support for [[fuzzing]] the certificate parser provided by the default plugins
42 2 Tobias Brunner
  (x509, pem, gmp etc.) on Google's "OSS-Fuzz":https://github.com/google/oss-fuzz infrastructure (or generally with
43 2 Tobias Brunner
  libFuzzer). Several issues found while fuzzing these plugins were fixed.
44 2 Tobias Brunner
    
45 2 Tobias Brunner
* Two new options have been added to charon's [[retransmission]] settings:
46 2 Tobias Brunner
  _retransmit_limit_ and _retransmit_jitter_.  The former adds an upper limit to the
47 2 Tobias Brunner
  calculated retransmission timeout, the latter randomly reduces it.
48 2 Tobias Brunner
  Refer to [[Retransmission]] for details.
49 2 Tobias Brunner
50 2 Tobias Brunner
* A bug in [[swanctl]]'s @--load-creds@ command was fixed that caused unencrypted
51 2 Tobias Brunner
  private keys to get unloaded if the command was called multiple times.
52 2 Tobias Brunner
  The _load-key_ [[VICI]] command now returns the key ID of the loaded key on success.
53 2 Tobias Brunner
54 2 Tobias Brunner
* The credential manager now enumerates local credential sets before global ones.
55 2 Tobias Brunner
  This means certificates supplied by the peer will now be preferred over certificates
56 2 Tobias Brunner
  with the same identity that may be locally stored (e.g. in the certificate cache).
57 2 Tobias Brunner
58 2 Tobias Brunner
* Adds support for hardware offload of IPsec SAs as introduced by Linux 4.11 for
59 2 Tobias Brunner
  specific hardware that supports this.
60 2 Tobias Brunner
61 2 Tobias Brunner
* To announce support for IKE fragmentation but not actively fragment IKE messages
62 2 Tobias Brunner
  the new _accept_ option for the _fragmentation_ setting may be used.
63 2 Tobias Brunner
64 2 Tobias Brunner
* If _charon.plugins.socket-default.set_sourceif_ is enabled the _socket-default_ plugin
65 2 Tobias Brunner
  sets the outbound interface via IP_PKTINFO/IN6_PKTINFO.  This is usually not required
66 2 Tobias Brunner
  but could be used in special scenarios, e.g. to use IPv6 link-local addresses as
67 2 Tobias Brunner
  tunnel endpoints.
68 2 Tobias Brunner
69 2 Tobias Brunner
* Add support for @SADB_X_EXT_NEW_ADDRESS_SRC|DST@ extensions for PF_KEYv2's
70 2 Tobias Brunner
  @SADB_UPDATE@ message, which upcoming FreeBSD kernels will support for updating
71 2 Tobias Brunner
  IP addresses of existing SAs.
72 2 Tobias Brunner
73 2 Tobias Brunner
* The value of _charon.plugins.kernel-netlink.xfrm_acq_expires_ is now determined
74 2 Tobias Brunner
  automatically based on the configured [[retransmission]] settings.
75 2 Tobias Brunner
76 2 Tobias Brunner
* If updating the inbound SA fails the _kernel-netlink_ plugin now tries to add it, which
77 2 Tobias Brunner
  could be useful if the SPI already expired after lots of retransmits of several exchanges.
78 2 Tobias Brunner
79 2 Tobias Brunner
* _charon-nm_ and the [[NetworkManager]] plugin now support customizing the IKE and
80 2 Tobias Brunner
  ESP proposals.
81 2 Tobias Brunner
82 2 Tobias Brunner
* With the _sha_256_96_ compatibility option it's possible to locally configure 96-bit truncation
83 2 Tobias Brunner
  for HMAC_SHA256 (the correct truncation is 128 bit) when negotiated using the official
84 2 Tobias Brunner
  algorithm identifier (12).  This is only useful for compatibility with peers that incorrectly
85 2 Tobias Brunner
  use this shorter truncation as the actual truncation length is not negotiated.
86 2 Tobias Brunner
87 2 Tobias Brunner
* The removal of all online leases by the [[attrsql|attr-sql]] plugin at startup may now be disabled
88 2 Tobias Brunner
  to share the database between multiple instances.
89 2 Tobias Brunner
90 2 Tobias Brunner
* The [[ipsecpki|pki]] tool loads the _curve25519_ plugin by default.
91 2 Tobias Brunner
92 2 Tobias Brunner
* When building the libraries monolithically and statically the plugin constructors are now
93 2 Tobias Brunner
  hard-coded in each library so the plugin code is not removed by the linker because it
94 2 Tobias Brunner
  thinks none of their symbols are ever referenced.  This allows building an almost stand-alone
95 2 Tobias Brunner
  static version of e.g. charon when building with @--enable-monolithic --enable-static
96 2 Tobias Brunner
  --disable-shared@ (without @--disable-shared@ libtool will build a version that still links
97 2 Tobias Brunner
  the libraries dynamically, which might save some disk space if it's not necessary to link
98 2 Tobias Brunner
  them statically, however, using @--enable-monolithic@ might be enough in that case).
99 2 Tobias Brunner
  External libraries (e.g. gmp or openssl) are not linked statically this way, though.
100 2 Tobias Brunner
101 2 Tobias Brunner
102 2 Tobias Brunner
* Notes for developers:
103 2 Tobias Brunner
104 2 Tobias Brunner
  * *child_sa_t*: The API used for installing policies and SAs has been changed (traffic
105 2 Tobias Brunner
    selectors are now only set once, outbound SAs and policies may be installed/uninstalled
106 2 Tobias Brunner
    separately).
107 2 Tobias Brunner
  * *enumerator_t*: A new mandatory method, venumerate(), has been added that takes
108 2 Tobias Brunner
    a @va_list@ with the arguments provided while enumerating.  @enumerate()@ is replaced
109 2 Tobias Brunner
    with a generic implementation that prepares a @va_list@ and calls the enumerator's
110 2 Tobias Brunner
    @venumerate()@ implementation.  As this allows passing the arguments of one enumerator
111 2 Tobias Brunner
    to another it avoids the five pointer hack previously used by @enumerator_create_nested()@
112 2 Tobias Brunner
    and @enumerator_create_cleaner()@. To simplify the implementation of @venumerate()@ a
113 2 Tobias Brunner
    helper macro is provided that assigns values from a given @va_list@ to local variables.
114 2 Tobias Brunner
  * *enumerator_create_filter()*: The signature of the callback has changed significantly.
115 2 Tobias Brunner
    It's now required to enumerate over the original enumerator in the callback itself, as
116 2 Tobias Brunner
    this avoids the previous in/out pointer hack. The arguments to the outer enumerator are
117 2 Tobias Brunner
    provided in a @va_list@.
118 2 Tobias Brunner
  * *linked_list_t*: To avoid the five pointer hack previously used the signatures of the
119 2 Tobias Brunner
    callbacks for @linked_list_t@'s @invoke_function()@ and @find_first()@ methods have been
120 2 Tobias Brunner
    changed to take a @va_list@ as second argument.  For the latter method the return type also
121 2 Tobias Brunner
    changed from @status_t@ to @bool@, which is important as @SUCCESS@ is defined as 0, so checks
122 2 Tobias Brunner
    for @== SUCCESS@ will now fail.