(Vlad Glagolev) Submitted an OpenBSD port for fwknop-2.0.3
[fwknop.git] / ChangeLog
1 fwknop-2.0.4 (09/20/2012):
2     - [server] (Vlad Glagolev) Submitted a patch to fix ndbm/gdbm usage when
3       --disable-file-cache is used for the autoconf configure script.  This
4       functionality was broken in be4193d734850fe60f14a26b547525ea0b9ce1e9
5       through improper handling of #define macros from --disable-file-cache.
6     - [server] (Vlad Glagolev) Submitted a patch to fix command exec mode
7       under SPA message type validity test.  Support for command exec mode was
8       also added to the test suite.
9     - (Vlad Glagolev) Submitted an OpenBSD port for fwknop-2.0.3, and this has
10       been checked in under extras/openbsd/.
11
12 fwknop-2.0.3 (09/03/2012):
13     - [server] Fernando Arnaboldi from IOActive found several DoS/code
14       execution vulnerabilities for malicious fwknop clients that manage to
15       get past the authentication stage (so a such a client must be in
16       possession of a valid access.conf encryption key).  These vulnerabilities
17       manifested themselves in the handling of malformed access requests, and
18       both the fwknopd server code along with libfko now perform stronger input
19       validation of access request data.  These vulnerabilities affect
20       pre-2.0.3 fwknop releases.
21     - [server] Fernando Arnaboldi from IOActive found a condition in which
22       the server did not properly validate allow IP addresses from malicious
23       authenticated clients.  This has been fixed with stronger allow IP
24       validation.
25     - [client+server] Fernando Arnaboldi from IOActive found that strict
26       filesystem permissions for various fwknop files are not verified.  Added
27       warnings whenever permissions are not strict enough, and ensured that
28       files created by the fwknop client and server are only set to user
29       read/write.
30     - [client] Fernando Arnaboldi from IOActive found a local buffer overflow
31       in --last processing with a maliciously constructed ~/.fwknop.run file.
32       This has been fixed with proper validation of .fwknop.run arguments.
33     - [server] Fernando Arnaboldi from IOActive found several conditions in
34       which the server did not properly throw out maliciously constructed
35       variables in the access.conf file.  This has been fixed along with new
36       fuzzing tests in the test suite.
37     - [test suite] Added a new fuzzing capability to ensure proper server-side
38       input validation.  Fuzzing data is constructed with modified fwknop
39       client code that is designed to emulate malicious behavior.
40     - Fixed RPM builds by including the $(DESTDIR) prefix for uninstall-local
41       and install-exec-hook stages in Makefile.am.
42
43 fwknop-2.0.2 (08/18/2012):
44     - [server] For GPG mode, added a new access.conf variable
45       "GPG_ALLOW_NO_PW" to make it possible to leverage a server-side GPG key
46       pair that has no associated password.  This comes in handy when a system
47       requires the user to leverage gpg-agent / pinentry which can present a
48       problem in automated environments as required by the fwknopd server.
49       Now, it might seem like a problem to remove the passphrase from a GPG
50       key pair, but it's important to note that simply doing this is little
51       worse than storing the passphrase in the clear on disk anyway in the
52       access.conf file.  Further, this link helps provide additional detail:
53
54       http://www.gnupg.org/faq/GnuPG-FAQ.html#how-can-i-use-gnupg-in-an-automated-environment
55
56     - [client] In IP resolution mode (-R) changed HTTP connection type to
57       'close' since there is no need for connection persistence, and indeed the
58       client expects to just get the IP and the connection to be closed.
59       Jonathan Schulz submitted a patch for this.
60     - [client] Bug fix to ensure that all data is read via recv() from a
61       remote webserver IP resolution mode (-R).  Previously IP resolution
62       could fail if HTTP headers were transferred separately from the data
63       (for whatever reason).  Jonathan Schulz submitted a patch for this.
64     - [client] Added backup check against a cipherdyne.com 'myip' cgi instance
65       in -R mode if the normal check against cipherdyne.org fails.
66     - [server] Bug fix to implement FLUSH_IPT_AT_INIT and FLUSH_IPT_AT_EXIT
67       functionality.  These are enabled by default, and now iptables rules
68       added by fwknopd can be made persistent by setting these variables to
69       "N" in the fwknopd.conf file (this is not a recommended setting
70       however).
71       [server] Added FLUSH_IPFW_AT_INIT and FLUSH_IPFW_AT_EXIT for ipfw
72       firewalls to emulate the corresponding functionality that is implemented
73       for iptables firewalls.  This was suggested by Jonathan Schulz.
74     - [server] Replay attack bug fix to ensure that an attacker cannot force a
75       replay attack by intercepting an SPA packet and the replaying it with the
76       base64 version of "Salted__" (for Rijndael) or the "hQ" prefix (for
77       GnuPG).  This is an important fix.  The following comment was added into
78       the fwknopd code:
79
80       /* Ignore any SPA packets that contain the Rijndael or GnuPG prefixes
81        * since an attacker might have tacked them on to a previously seen
82        * SPA packet in an attempt to get past the replay check.  And, we're
83        * no worse off since a legitimate SPA packet that happens to include
84        * a prefix after the outer one is stripped off won't decrypt properly
85        * anyway because libfko would not add a new one.
86       */
87
88     - [server] Fixed a memory leak bug in the replay attack detection code.
89       The leak was found with the test suite in --enable-valgrind mode, and
90       here is the valgrind trace that exposed it:
91
92       44 bytes in 1 blocks are definitely lost in loss record 2 of 2
93          at 0x482BE68: malloc (in
94          /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
95          by 0x490EA50: strdup (strdup.c:43)
96          by 0x10CD69: incoming_spa (incoming_spa.c:162)
97          by 0x10E000: process_packet (process_packet.c:200)
98          by 0x4862E63: ??? (in /usr/lib/i386-linux-gnu/libpcap.so.1.1.1)
99          by 0x4865667: pcap_dispatch (in /usr/lib/i386-linux-gnu/libpcap.so.1.1.1)
100          by 0x10DABF: pcap_capture (pcap_capture.c:226)
101          by 0x10A798: main (fwknopd.c:299)
102
103     - [test suite] Added GPG tests for keyrings that have no associated
104       passphrases.
105     - [server] Implemented a new check to ensure that the iptables 'comment'
106       match exists to ensure the proper environment for fwknopd operations.
107       This check is controlled by the new ENABLE_IPT_COMMENT_CHECK variable,
108       and was suggested by Hank Leininger.
109     - [server] 'make install' fix to ensure restrictive permissions on the
110       /etc/fwknop/ directory and /etc/fwknop/* files.  Also updated the 'make
111       install' step to not overwrite any existing config files in /etc/fwknop/
112       and instead install new copies from the source tree at
113       /etc/fwknop/fwknopd.conf.inst and /etc/fwknop/access.conf.inst
114
115 fwknop-2.0.1 (07/23/2012):
116     - [server] Bug fix where the same encryption key used for two stanzas in
117       the access.conf file would result in access requests that matched the
118       second stanza to always be treated as a replay attack.  This has been
119       fixed for the fwknop-2.0.1 release, and was reported by Andy Rowland. Now
120       the fwknopd server computes the SHA256 digest of raw incoming payload
121       data before decryption, and compares this against all previous hashes.
122       Previous to this commit, fwknopd would add a new hash to the replay
123       digest list right after the first access.conf stanza match, so when SPA
124       packet data matched the second access.conf stanza a matching replay
125       digest would already be there.
126     - [server] Updated PCAP_LOOP_SLEEP default to 1/10th of a second (in
127       microseconds).  This was supposed to be the default anyway, but C
128       Anthony Risinger reported a bug where fwknopd was consuming more
129       resources than necessary, and the cause was PCAP_LOOP_SLEEP set by
130       default to 1/100th of a second - this has been fixed.
131     - [libfko] Added SPA message validation calls to fko decoding routines to
132       help ensure that SPA messages conform to expected values.
133     - Bug fix for PF firewalls: updated the PF anchor check to not rely on
134       listing the PF policy - fwknopd now uses 'pfctl -s Anchor' instead.
135     - [test suite] Added parsing of valgrind output to produce a listing of
136       functions that have been flagged - this assists in the development
137       process to ensure that fwknop is not leaking memory.
138     - [test suite] Bug fix on Mac OS X systems to account for libfko.dylib path
139       instead of libfko.so.  This fixes the existence check for libfko.
140     - [test suite] Added tests for --nat-local mode.
141     - [client] Fixed several minor memory leaks caught by valgrind.
142     - [libfko] Minor gcc warning fix: fko_decode.c:43:17: warning: variable
143       'edata_size' set but not used [-Wunused-but-set-variable].
144     - Updated fwknopd init script for Debian systems (contributed by Franck
145       Joncourt).
146
147 fwknop-2.0 (01/02/2012):
148     - This is the first production release that has been completely re-written
149       in C.  This brings Single Packet Authorization functionality to all sorts
150       of machines from embedded devices to large systems.  iptables, ipfw, and
151       pf firewalls are supported by the fwknopd daemon, and the fwknop client
152       is known to work on most major *NIX environments, the iPhone and Android
153       operating systems, and Cygwin under Windows.
154     - Added FORCE_NAT mode to the access.conf file so that for any valid SPA
155       packet, force the requested connection to be NAT'd through to the
156       specified (usually internal) IP and port value.  This is useful if there
157       are multiple internal systems running a service such as SSHD, and you
158       want to give transparent access to only one internal system for each
159       stanza in the access.conf file.  This way, multiple external users can
160       each directly access only one internal system per SPA key.
161     - Added two new access.conf variables are added "ACCESS_EXPIRE" and
162       "ACCESS_EXPIRE_EPOCH" to allow access stanzas to be expired without
163       having to modify the access.conf file and restart fwknopd.
164     - Added a new feature to allow an access stanza that matches the SPA source
165       address to not automatically short circuit other stanzas if there is an
166       error (such as when there are multiple encryption keys involved and an
167       incoming SPA packet is meant for, say, the second stanza and the first
168       therefore doesn't allow proper decryption).
169     - Bug fix to exclude SPA packets with timestamps in the future that are too
170       great (old packets were properly excluded already).
171     - Bug fix to honor the fwknop client --time-offset-plus and
172       --time-offset-minus options
173     - Added DNAT mode tests, minor memory leak fix in NAT mode, added fwknopd
174       check for ENABLE_IPT_FORWARDING variable before attempting NAT access.
175     - [test suite] Added --diff mode to compare results from one execution to
176       the next.