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. |