updated ChangeLog.git file for fwknop-2.0.4 changes
[fwknop.git] / ChangeLog
1 fwknop-2.0.4 (12/09/2012):
2     - [client] Misc fixes and the addition of save_args and last command 
3       (.fwknop.last) support on the Windows platform.
4     - [client] Fixed bug in username determination code where a valid value
5       could be overrwritten in certain circumstances.
6     - [server] Added upstart config at extras/upstart/fwknop.conf.  This
7       allows the fwknopd to easily be managed with upstart via commands like
8       "service fwknop start" and "service fwknop stop".
9     - [server] (Vlad Glagolev) Submitted a patch to fix ndbm/gdbm usage when
10       --disable-file-cache is used for the autoconf configure script.  This
11       functionality was broken in be4193d734850fe60f14a26b547525ea0b9ce1e9
12       through improper handling of #define macros from --disable-file-cache.
13     - [server] (Vlad Glagolev) Submitted a patch to fix command exec mode
14       under SPA message type validity test.  Support for command exec mode was
15       also added to the test suite.
16     - (Vlad Glagolev) Submitted an OpenBSD port for fwknop-2.0.3, and this has
17       been checked in under the extras/openbsd/ directory.
18     - [server] Bug fix to allow GPG_ALLOW_NO_PW to result in not also having
19       to specify a Rijndael key.
20     - [Android] Added new .properties files to allow the fwknop client to
21       build and function properly on the latest Android release (4.1.2).
22     - [client] Added '-P udpraw' to allow the client to send SPA packets over
23       UDP with a spoofed source IP address.  This is in addition to the
24       original 'tcpraw' and 'icmp' protocols that also support a spoofed
25       source IP.
26     - [libfko] Bug fix to check b64_decode() return value to ensure that
27       non-base64 encoded data is never used.  Even though other validation
28       routines checked decoded results, it is important to discard invalid
29       data as early as possible.  Note too that such invalid data would only
30       be provided to b64_decode() after proper decryption, so the client must
31       provide authentic SPA data.
32     - [libfko] Added validation of NAT access strings in the various NAT
33       modes.
34     - [libfko] Restricted usernames embedded in SPA packets to be
35       alpha-numeric along with "-" chars.
36     - [client] (Franck Joncourt) Contributed a patch to allow the fwknop
37       client to be stopped during the password entry prompt with Ctrl-C before
38       any SPA packet is sent on the wire.
39     - [client+server] Applied patch from Franck Joncourt to remove unnecessary
40       chmod() call when creating client rc file and server replay cache file.
41       The permissions are now set appropriately via open(), and at the same
42       time this patch fixes a potential race condition since the previous code
43       used fopen() followed by chmod().
44     - [server] Bug fix to accept SPA packets over ICMP if the fwknop client
45       is executed with '-P icmp' and the user has the required privileges.
46     - [test suite] Applied patch from Franck Joncourt to have the perl FKO
47       module link against libfko in the local directory (if it exists) so that
48       it doesn't have to have libfko completely installed in the /usr/lib/
49       directory.  This allows the test suite to run FKO tests without
50       installing libfko.
51     - [test suite] Significant update to include a set of fuzzing SPA packets
52       that are built using a patched version of libfko.  These packets are
53       located in the test/fuzzing/bogus_spa_packets file, and are designed to
54       ensure proper validation of SPA packet data.  This validation is
55       performed in --enable-perl-module-checks mode via the perl FKO module.
56     - [client] Added --icmp-type and --icmp-code arguments so the user can
57       control the icmp type/code combination for spoofed SPA packets ('-P
58       icmp') mode.
59     - [client] Updated default TTL value to 64 for spoofed SPA packets.  This
60       is closer to more OS default TTL values than the previous 255.
61     - Updated build CFLAGS and LDFLAGS to conform to the Debian
62       hardening-includes file for PIE support (e.g. '-fPIE' for CFLAGS and
63       '-fPIE -pie' for LDFLAGS).
64     - [test suite] For GnuPG tests that require a passphrase associated with
65       a gpg key, added a pinentry check to see if the local gpg engine
66       requires it.  If so, the gpg test that require a key are excluded since.
67     - [server] Added a new '--pcap-file <file>' option to allow pcap files to
68       be processed directly by fwknopd instead of sniffing an interface.  This
69       feature is mostly intended for debugging purposes.
70     - [server] Added chain_exists() check to SPA rule creation so that if any
71       of the fwknop chains are deleted out from under fwknopd they will be
72       recreated on the fly.  This mitigates scenarios where fwknopd might be
73       started before a system level firewall policy is applied due to init
74       script ordering, or if an iptables policy is re-applied without
75       restarting fwknopd.
76
77 fwknop-2.0.3 (09/03/2012):
78     - [server] Fernando Arnaboldi from IOActive found several DoS/code
79       execution vulnerabilities for malicious fwknop clients that manage to
80       get past the authentication stage (so a such a client must be in
81       possession of a valid access.conf encryption key).  These vulnerabilities
82       manifested themselves in the handling of malformed access requests, and
83       both the fwknopd server code along with libfko now perform stronger input
84       validation of access request data.  These vulnerabilities affect
85       pre-2.0.3 fwknop releases.
86     - [server] Fernando Arnaboldi from IOActive found a condition in which
87       the server did not properly validate allow IP addresses from malicious
88       authenticated clients.  This has been fixed with stronger allow IP
89       validation.
90     - [client+server] Fernando Arnaboldi from IOActive found that strict
91       filesystem permissions for various fwknop files are not verified.  Added
92       warnings whenever permissions are not strict enough, and ensured that
93       files created by the fwknop client and server are only set to user
94       read/write.
95     - [client] Fernando Arnaboldi from IOActive found a local buffer overflow
96       in --last processing with a maliciously constructed ~/.fwknop.run file.
97       This has been fixed with proper validation of .fwknop.run arguments.
98     - [server] Fernando Arnaboldi from IOActive found several conditions in
99       which the server did not properly throw out maliciously constructed
100       variables in the access.conf file.  This has been fixed along with new
101       fuzzing tests in the test suite.
102     - [test suite] Added a new fuzzing capability to ensure proper server-side
103       input validation.  Fuzzing data is constructed with modified fwknop
104       client code that is designed to emulate malicious behavior.
105     - Fixed RPM builds by including the $(DESTDIR) prefix for uninstall-local
106       and install-exec-hook stages in Makefile.am.
107
108 fwknop-2.0.2 (08/18/2012):
109     - [server] For GPG mode, added a new access.conf variable
110       "GPG_ALLOW_NO_PW" to make it possible to leverage a server-side GPG key
111       pair that has no associated password.  This comes in handy when a system
112       requires the user to leverage gpg-agent / pinentry which can present a
113       problem in automated environments as required by the fwknopd server.
114       Now, it might seem like a problem to remove the passphrase from a GPG
115       key pair, but it's important to note that simply doing this is little
116       worse than storing the passphrase in the clear on disk anyway in the
117       access.conf file.  Further, this link helps provide additional detail:
118
119       http://www.gnupg.org/faq/GnuPG-FAQ.html#how-can-i-use-gnupg-in-an-automated-environment
120
121     - [client] In IP resolution mode (-R) changed HTTP connection type to
122       'close' since there is no need for connection persistence, and indeed the
123       client expects to just get the IP and the connection to be closed.
124       Jonathan Schulz submitted a patch for this.
125     - [client] Bug fix to ensure that all data is read via recv() from a
126       remote webserver IP resolution mode (-R).  Previously IP resolution
127       could fail if HTTP headers were transferred separately from the data
128       (for whatever reason).  Jonathan Schulz submitted a patch for this.
129     - [client] Added backup check against a cipherdyne.com 'myip' cgi instance
130       in -R mode if the normal check against cipherdyne.org fails.
131     - [server] Bug fix to implement FLUSH_IPT_AT_INIT and FLUSH_IPT_AT_EXIT
132       functionality.  These are enabled by default, and now iptables rules
133       added by fwknopd can be made persistent by setting these variables to
134       "N" in the fwknopd.conf file (this is not a recommended setting
135       however).
136       [server] Added FLUSH_IPFW_AT_INIT and FLUSH_IPFW_AT_EXIT for ipfw
137       firewalls to emulate the corresponding functionality that is implemented
138       for iptables firewalls.  This was suggested by Jonathan Schulz.
139     - [server] Replay attack bug fix to ensure that an attacker cannot force a
140       replay attack by intercepting an SPA packet and the replaying it with the
141       base64 version of "Salted__" (for Rijndael) or the "hQ" prefix (for
142       GnuPG).  This is an important fix.  The following comment was added into
143       the fwknopd code:
144
145       /* Ignore any SPA packets that contain the Rijndael or GnuPG prefixes
146        * since an attacker might have tacked them on to a previously seen
147        * SPA packet in an attempt to get past the replay check.  And, we're
148        * no worse off since a legitimate SPA packet that happens to include
149        * a prefix after the outer one is stripped off won't decrypt properly
150        * anyway because libfko would not add a new one.
151       */
152
153     - [server] Fixed a memory leak bug in the replay attack detection code.
154       The leak was found with the test suite in --enable-valgrind mode, and
155       here is the valgrind trace that exposed it:
156
157       44 bytes in 1 blocks are definitely lost in loss record 2 of 2
158          at 0x482BE68: malloc (in
159          /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
160          by 0x490EA50: strdup (strdup.c:43)
161          by 0x10CD69: incoming_spa (incoming_spa.c:162)
162          by 0x10E000: process_packet (process_packet.c:200)
163          by 0x4862E63: ??? (in /usr/lib/i386-linux-gnu/libpcap.so.1.1.1)
164          by 0x4865667: pcap_dispatch (in /usr/lib/i386-linux-gnu/libpcap.so.1.1.1)
165          by 0x10DABF: pcap_capture (pcap_capture.c:226)
166          by 0x10A798: main (fwknopd.c:299)
167
168     - [test suite] Added GPG tests for keyrings that have no associated
169       passphrases.
170     - [server] Implemented a new check to ensure that the iptables 'comment'
171       match exists to ensure the proper environment for fwknopd operations.
172       This check is controlled by the new ENABLE_IPT_COMMENT_CHECK variable,
173       and was suggested by Hank Leininger.
174     - [server] 'make install' fix to ensure restrictive permissions on the
175       /etc/fwknop/ directory and /etc/fwknop/* files.  Also updated the 'make
176       install' step to not overwrite any existing config files in /etc/fwknop/
177       and instead install new copies from the source tree at
178       /etc/fwknop/fwknopd.conf.inst and /etc/fwknop/access.conf.inst
179
180 fwknop-2.0.1 (07/23/2012):
181     - [server] Bug fix where the same encryption key used for two stanzas in
182       the access.conf file would result in access requests that matched the
183       second stanza to always be treated as a replay attack.  This has been
184       fixed for the fwknop-2.0.1 release, and was reported by Andy Rowland. Now
185       the fwknopd server computes the SHA256 digest of raw incoming payload
186       data before decryption, and compares this against all previous hashes.
187       Previous to this commit, fwknopd would add a new hash to the replay
188       digest list right after the first access.conf stanza match, so when SPA
189       packet data matched the second access.conf stanza a matching replay
190       digest would already be there.
191     - [server] Updated PCAP_LOOP_SLEEP default to 1/10th of a second (in
192       microseconds).  This was supposed to be the default anyway, but C
193       Anthony Risinger reported a bug where fwknopd was consuming more
194       resources than necessary, and the cause was PCAP_LOOP_SLEEP set by
195       default to 1/100th of a second - this has been fixed.
196     - [libfko] Added SPA message validation calls to fko decoding routines to
197       help ensure that SPA messages conform to expected values.
198     - Bug fix for PF firewalls: updated the PF anchor check to not rely on
199       listing the PF policy - fwknopd now uses 'pfctl -s Anchor' instead.
200     - [test suite] Added parsing of valgrind output to produce a listing of
201       functions that have been flagged - this assists in the development
202       process to ensure that fwknop is not leaking memory.
203     - [test suite] Bug fix on Mac OS X systems to account for libfko.dylib path
204       instead of libfko.so.  This fixes the existence check for libfko.
205     - [test suite] Added tests for --nat-local mode.
206     - [client] Fixed several minor memory leaks caught by valgrind.
207     - [libfko] Minor gcc warning fix: fko_decode.c:43:17: warning: variable
208       'edata_size' set but not used [-Wunused-but-set-variable].
209     - Updated fwknopd init script for Debian systems (contributed by Franck
210       Joncourt).
211
212 fwknop-2.0 (01/02/2012):
213     - This is the first production release that has been completely re-written
214       in C.  This brings Single Packet Authorization functionality to all sorts
215       of machines from embedded devices to large systems.  iptables, ipfw, and
216       pf firewalls are supported by the fwknopd daemon, and the fwknop client
217       is known to work on most major *NIX environments, the iPhone and Android
218       operating systems, and Cygwin under Windows.
219     - Added FORCE_NAT mode to the access.conf file so that for any valid SPA
220       packet, force the requested connection to be NAT'd through to the
221       specified (usually internal) IP and port value.  This is useful if there
222       are multiple internal systems running a service such as SSHD, and you
223       want to give transparent access to only one internal system for each
224       stanza in the access.conf file.  This way, multiple external users can
225       each directly access only one internal system per SPA key.
226     - Added two new access.conf variables are added "ACCESS_EXPIRE" and
227       "ACCESS_EXPIRE_EPOCH" to allow access stanzas to be expired without
228       having to modify the access.conf file and restart fwknopd.
229     - Added a new feature to allow an access stanza that matches the SPA source
230       address to not automatically short circuit other stanzas if there is an
231       error (such as when there are multiple encryption keys involved and an
232       incoming SPA packet is meant for, say, the second stanza and the first
233       therefore doesn't allow proper decryption).
234     - Bug fix to exclude SPA packets with timestamps in the future that are too
235       great (old packets were properly excluded already).
236     - Bug fix to honor the fwknop client --time-offset-plus and
237       --time-offset-minus options
238     - Added DNAT mode tests, minor memory leak fix in NAT mode, added fwknopd
239       check for ENABLE_IPT_FORWARDING variable before attempting NAT access.
240     - [test suite] Added --diff mode to compare results from one execution to
241       the next.