]> git.ipfire.org Git - thirdparty/openvpn.git/log
thirdparty/openvpn.git
7 years agoAdd comments to fuzzing.c, fuzzing.h, remove unused function (fuzzer_read)
Guido Vranken [Thu, 10 Aug 2017 21:29:50 +0000 (23:29 +0200)] 
Add comments to fuzzing.c, fuzzing.h, remove unused function (fuzzer_read)

7 years agoDHCP fuzzer: add comments
Guido Vranken [Wed, 9 Aug 2017 14:23:48 +0000 (16:23 +0200)] 
DHCP fuzzer: add comments

7 years agoBase64 fuzzer: add comments, split code into separate functions, use helper functions...
Guido Vranken [Wed, 9 Aug 2017 13:59:53 +0000 (15:59 +0200)] 
Base64 fuzzer: add comments, split code into separate functions, use helper functions from fuzzing.c

8 years agoReplace all open()/close() with platform_open()/platform_open2()/platform_close()
Guido Vranken [Tue, 27 Jun 2017 10:06:12 +0000 (12:06 +0200)] 
Replace all open()/close() with platform_open()/platform_open2()/platform_close()

8 years agoInitialize crypto in fuzzer-verify-cert
Guido Vranken [Tue, 27 Jun 2017 09:30:11 +0000 (11:30 +0200)] 
Initialize crypto in fuzzer-verify-cert

8 years agoAdd crypto.c fuzzer
Guido Vranken [Tue, 27 Jun 2017 09:27:05 +0000 (11:27 +0200)] 
Add crypto.c fuzzer

8 years agoImplement platform_read, platform_write and replace all read()/write() calls
Guido Vranken [Tue, 27 Jun 2017 08:54:01 +0000 (10:54 +0200)] 
Implement platform_read, platform_write and replace all read()/write() calls

8 years agoPut README in the right directory..
Guido Vranken [Tue, 27 Jun 2017 08:42:20 +0000 (10:42 +0200)] 
Put README in the right directory..

8 years agoPut back README
Guido Vranken [Tue, 27 Jun 2017 08:39:10 +0000 (10:39 +0200)] 
Put back README

8 years agoRename README
Guido Vranken [Mon, 26 Jun 2017 21:07:43 +0000 (23:07 +0200)] 
Rename README

8 years agoUpdate README
Guido Vranken [Mon, 26 Jun 2017 21:06:15 +0000 (23:06 +0200)] 
Update README

Describe procedure to built fuzzers

8 years agoRemaining IO abstractions
Guido Vranken [Mon, 26 Jun 2017 20:09:49 +0000 (22:09 +0200)] 
Remaining IO abstractions

8 years agoIO abstractions in socks.c
Guido Vranken [Mon, 26 Jun 2017 19:57:52 +0000 (21:57 +0200)] 
IO abstractions in socks.c

8 years agoRemove erroneous endif from fuzzer-base64, fuzzer-misc, fuzzer-options
Guido Vranken [Mon, 26 Jun 2017 19:57:31 +0000 (21:57 +0200)] 
Remove erroneous endif from fuzzer-base64, fuzzer-misc, fuzzer-options

8 years agoAdd compression fuzzer
Guido Vranken [Mon, 26 Jun 2017 19:01:41 +0000 (21:01 +0200)] 
Add compression fuzzer

8 years agoPrepare compression functions for fuzzing
Guido Vranken [Mon, 26 Jun 2017 19:01:15 +0000 (21:01 +0200)] 
Prepare compression functions for fuzzing

8 years agoRemove crypto requirement from fuzzer-base64, fuzzer-misc, fuzzer-options
Guido Vranken [Mon, 26 Jun 2017 19:00:11 +0000 (21:00 +0200)] 
Remove crypto requirement from fuzzer-base64, fuzzer-misc, fuzzer-options

8 years agoAdd mroute.c fuzzer
Guido Vranken [Mon, 26 Jun 2017 18:29:54 +0000 (20:29 +0200)] 
Add mroute.c fuzzer

8 years agoPrepare mroute.c, mroute.h for fuzzing
Guido Vranken [Mon, 26 Jun 2017 18:29:34 +0000 (20:29 +0200)] 
Prepare mroute.c, mroute.h for fuzzing

8 years agoDisable check in mss.c to speed up fuzzing
Guido Vranken [Fri, 23 Jun 2017 15:34:59 +0000 (17:34 +0200)] 
Disable check in mss.c to speed up fuzzing

8 years agoAdd misc.c fuzzer
Guido Vranken [Fri, 23 Jun 2017 14:43:06 +0000 (16:43 +0200)] 
Add misc.c fuzzer

8 years agoIO abstractions + dealing with execve/popen in misc.c
Guido Vranken [Fri, 23 Jun 2017 14:42:47 +0000 (16:42 +0200)] 
IO abstractions + dealing with execve/popen in misc.c

8 years agoAdd list.c fuzzer
Guido Vranken [Fri, 23 Jun 2017 14:36:00 +0000 (16:36 +0200)] 
Add list.c fuzzer

8 years agoIO abstractions in list.c
Guido Vranken [Fri, 23 Jun 2017 14:33:10 +0000 (16:33 +0200)] 
IO abstractions in list.c

8 years agoAdd buffer.c fuzzer
Guido Vranken [Fri, 23 Jun 2017 14:31:36 +0000 (16:31 +0200)] 
Add buffer.c fuzzer

8 years agoAdd ssl_verify* fuzzer
Guido Vranken [Fri, 23 Jun 2017 14:27:45 +0000 (16:27 +0200)] 
Add ssl_verify* fuzzer

8 years agoAdd options.c fuzzer
Guido Vranken [Fri, 23 Jun 2017 14:16:47 +0000 (16:16 +0200)] 
Add options.c fuzzer

8 years agoDisable certain options in options.c
Guido Vranken [Fri, 23 Jun 2017 14:14:58 +0000 (16:14 +0200)] 
Disable certain options in options.c

8 years agoIO abstractions in options.c
Guido Vranken [Fri, 23 Jun 2017 14:08:50 +0000 (16:08 +0200)] 
IO abstractions in options.c

8 years agoAdd proxy.c fuzzer
Guido Vranken [Fri, 23 Jun 2017 14:06:58 +0000 (16:06 +0200)] 
Add proxy.c fuzzer

8 years agoIO abstractions in proxy.c
Guido Vranken [Fri, 23 Jun 2017 14:02:47 +0000 (16:02 +0200)] 
IO abstractions in proxy.c

8 years agoAdd forward.c fuzzer
Guido Vranken [Fri, 23 Jun 2017 14:00:07 +0000 (16:00 +0200)] 
Add forward.c fuzzer

8 years agoIO abstractions in buffer.c, buffer.h
Guido Vranken [Fri, 23 Jun 2017 13:50:55 +0000 (15:50 +0200)] 
IO abstractions in buffer.c, buffer.h

8 years agoAdd dhcp.c fuzzer
Guido Vranken [Fri, 23 Jun 2017 13:45:55 +0000 (15:45 +0200)] 
Add dhcp.c fuzzer

8 years agoAdd route.c fuzzer
Guido Vranken [Fri, 23 Jun 2017 13:43:13 +0000 (15:43 +0200)] 
Add route.c fuzzer

8 years agoIO abstractions in route.c
Guido Vranken [Fri, 23 Jun 2017 13:42:49 +0000 (15:42 +0200)] 
IO abstractions in route.c

8 years agoIO abstractions in socket.c, socket.h
Guido Vranken [Fri, 23 Jun 2017 13:42:30 +0000 (15:42 +0200)] 
IO abstractions in socket.c, socket.h

8 years agoIO abstractions in error.c
Guido Vranken [Fri, 23 Jun 2017 13:42:04 +0000 (15:42 +0200)] 
IO abstractions in error.c

8 years agoIgnore all messages except M_FATAL
Guido Vranken [Fri, 23 Jun 2017 13:41:38 +0000 (15:41 +0200)] 
Ignore all messages except M_FATAL

8 years agoImplement IO abstraction functions
Guido Vranken [Fri, 23 Jun 2017 13:14:44 +0000 (15:14 +0200)] 
Implement IO abstraction functions

8 years agoCreate fuzzing basis + base64 fuzzer
Guido Vranken [Fri, 23 Jun 2017 12:51:55 +0000 (14:51 +0200)] 
Create fuzzing basis + base64 fuzzer

Signed-off-by: Guido Vranken <guidovranken@gmail.com>
8 years agoFix typo in extract_x509_extension() debug message
Steffan Karger [Wed, 21 Jun 2017 21:21:31 +0000 (23:21 +0200)] 
Fix typo in extract_x509_extension() debug message

This message should use the external name, not the internal one.

Signed-off-by: Steffan Karger <steffan@karger.me>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20170621212131.6776-1-steffan@karger.me>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14939.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoOpenSSL: remove pre-1.1 function from the OpenSSL compat interface
Emmanuel Deloget [Mon, 19 Jun 2017 15:35:13 +0000 (17:35 +0200)] 
OpenSSL: remove pre-1.1 function from the OpenSSL compat interface

HMAC_CTX_init() has been removed from OpenSSL 1.1. Both this function
and function HMAC_CTX_cleanup() has been replaced by HMAC_CTX_reset().

Commit aba98e9050eb54d72d921e70bcd422cb892b9c6c introduced support for
HMAC_CTX_init() for OpenSSL 1.1+ while other functions were mimicking
the OpenSSL 1.1 interface for earlier version. This is clearly not a
good idea -- a better approach would be to provide the new interface for
pre-1.1 versions in order to have the dependant code use only one
interface version. To implement that, we remove HMAC_CTX_init() from our
compatibility layer and implement HMAC_CTX_reset() in terms of a cleanup
followed by an init (as the regular HMAC_CTX_reset() function does in
OpenSSL 1.1. This change has a consequence on HMAC_CTX_free() which now
need to cleanup() the HMAC context before freeing it.

Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170619153513.5420-1-logout@free.fr>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14889.html

Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agotravis-ci: added gcc and clang openssl-1.1.0 builds
Ilya Shipitsin [Mon, 19 Jun 2017 18:38:08 +0000 (23:38 +0500)] 
travis-ci: added gcc and clang openssl-1.1.0 builds

openssl build script was modified according to official openssl manual:
https://wiki.openssl.org/index.php/Compilation_and_Installation
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <1497897488-15999-1-git-send-email-chipitsine@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14890.html

Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoUpdate Changes.rst with relevant info for 2.4.3 release.
Gert Doering [Mon, 19 Jun 2017 17:44:00 +0000 (19:44 +0200)] 
Update Changes.rst with relevant info for 2.4.3 release.

(Since Changes.rst is mostly synchronized between master and 2.4.3,
and patches flow master->release/2.4, the change is done here even
if this particular commit is not directly part of 2.4.3 release)

General cleanup, whitespace fixes, quoting fixes by David Sommerseth
<davids@openvpn.net>

Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoFix remotely-triggerable ASSERT() on malformed IPv6 packet.
Gert Doering [Tue, 13 Jun 2017 20:08:32 +0000 (22:08 +0200)] 
Fix remotely-triggerable ASSERT() on malformed IPv6 packet.

Correct sanity checks on IPv6 packet length in mss_fixup_ipv6(),
and change the ASSERT() check in mss_fixup_dowork() into a simple
"return" (= the TCP header will simply not be inspected further).

CVE-2017-7508 has been assigned due to the serious nature of the
bug: it can be used to remotely shutdown an openvpn server or
client, if IPv6 and --mssfix are enabled and the IPv6 networks used
inside the VPN are known.

Found by Guido Vranken <guidovranken@gmail.com>.

v2: style changes

CVE: 2017-7508
Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170613200832.15027-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/search?l=mid&q=20170613200832.15027-1-gert@greenie.muc.de
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoPrevent two kinds of stack buffer OOB reads and a crash for invalid input data
Guido Vranken [Fri, 19 May 2017 12:04:25 +0000 (14:04 +0200)] 
Prevent two kinds of stack buffer OOB reads and a crash for invalid input data

Pre-authentication remote crash/information disclosure for clients

If clients use a HTTP proxy with NTLM authentication (i.e.
"--http-proxy <server> <port> [<authfile>|'auto'|'auto-nct'] ntlm2"),
a man-in-the-middle attacker between the client and the proxy can
cause the client to crash or disclose at most 96 bytes of stack
memory. The disclosed stack memory is likely to contain the proxy
password.

If the proxy password is not reused, this is unlikely to compromise
the security of the OpenVPN tunnel itself.  Clients who do not use
the --http-proxy option with ntlm2 authentication are not affected.

CVE: 2017-7520
Signed-off-by: Guido Vranken <guidovranken@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <CAO5O-EJvHKid-zTj+hmFG_3Gv78ixqCayE9=C62DZaxN32WNtQ@mail.gmail.com>
URL: https://www.mail-archive.com/search?l=mid&q=CAO5O-EJvHKid-zTj+hmFG_3Gv78ixqCayE9=C62DZaxN32WNtQ@mail.gmail.com
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoFix potential double-free in --x509-alt-username (CVE-2017-7521)
Steffan Karger [Mon, 19 Jun 2017 09:28:40 +0000 (11:28 +0200)] 
Fix potential double-free in --x509-alt-username (CVE-2017-7521)

We didn't check the return value of ASN1_STRING_to_UTF8() in
extract_x509_extension().  Ignoring such a failure could result in buf
being free'd twice.  An error in ASN1_STRING_to_UTF8() can be caused
remotely if the peer can make the local process run out of memory.

The problem can only be triggered for configurations that use the
--x509-alt-username option with an x509 extension (i.e. the option
parameter starts with "ext:").

This issue was discovered, analysed and reported to the OpenVPN team by
Guido Vranken.

Extensive testing by Guido Vranken gives confidence that this function
is very unlikely to fail in real-world usage (using subjectAltName or
issuerAltName extensions) for other reasons than memory exhaustion.

CVE: 2017-7521
Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Acked-by: David Sommerseth <davids@openvpn.net>
Acked-by: Guido Vranken <guidovranken@gmail.com>
Message-Id: <1497864520-12219-6-git-send-email-steffan.karger@fox-it.com>
URL: https://www.mail-archive.com/search?l=mid&q=1497864520-12219-6-git-send-email-steffan.karger@fox-it.com
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoRestrict --x509-alt-username extension types
Steffan Karger [Mon, 19 Jun 2017 09:28:39 +0000 (11:28 +0200)] 
Restrict --x509-alt-username extension types

The code never supported all extension types.  Make this explicit by only
allowing subjectAltName and issuerAltName (for which the current code does
work).

Using unsupported extension fields would most likely cause OpenVPN to crash
as soon as a client connects.  This does not have a real-world security
impact, as such a configuration would not be possible to use in practice.

This bug was discovered, analysed and reported to the OpenVPN team by
Guido Vranken.

Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Acked-by: David Sommerseth <davids@openvpn.net>
Acked-by: Guido Vranken <guidovranken@gmail.com>
Message-Id: <1497864520-12219-5-git-send-email-steffan.karger@fox-it.com>
URL: https://www.mail-archive.com/search?l=mid&q=1497864520-12219-5-git-send-email-steffan.karger@fox-it.com
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoFix remote-triggerable memory leaks (CVE-2017-7521)
Steffan Karger [Mon, 19 Jun 2017 09:28:38 +0000 (11:28 +0200)] 
Fix remote-triggerable memory leaks (CVE-2017-7521)

Several of our OpenSSL-specific certificate-parsing code paths did not
always clear all allocated memory.  Since a client can cause a few bytes
of memory to be leaked for each connection attempt, a client can cause a
server to run out of memory and thereby kill the server.  That makes this
a (quite inefficient) DoS attack.

When using the --x509-alt-username option on openssl builds with an
extension (argument prefixed with "ext:", e.g. "ext:subjectAltName"), the
code would not free all allocated memory.  Fix this by using the proper
free function.

If ASN1_STRING_to_UTF8() returns 0, it didn't fail and *did* allocate
memory.  So also free the returned buffer if it returns 0.

These issues were found, analysed and reported to the OpenVPN team by Guido
Vranken.

CVE: 2017-7521
Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Acked-by: David Sommerseth <davids@openvpn.net>
Acked-by: Guido Vranken <guidovranken@gmail.com>
Message-Id: <1497864520-12219-4-git-send-email-steffan.karger@fox-it.com>
URL: https://www.mail-archive.com/search?l=mid&q=1497864520-12219-4-git-send-email-steffan.karger@fox-it.com
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agombedtls: require C-string compatible types for --x509-username-field
Steffan Karger [Mon, 19 Jun 2017 09:28:37 +0000 (11:28 +0200)] 
mbedtls: require C-string compatible types for --x509-username-field

In the --x509-username-field extenstion, we handle the subject string as
if it is a C string.  Make this assumption explicit and reject incomatible
ASN.1 string types.

Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1497864520-12219-3-git-send-email-steffan.karger@fox-it.com>
URL: https://www.mail-archive.com/search?l=mid&q=1497864520-12219-3-git-send-email-steffan.karger@fox-it.com
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agombedtls: fix --x509-track post-authentication remote DoS (CVE-2017-7522)
Steffan Karger [Mon, 19 Jun 2017 09:28:36 +0000 (11:28 +0200)] 
mbedtls: fix --x509-track post-authentication remote DoS (CVE-2017-7522)

asn1_buf_to_c_string() returned a literal string if the input ASN.1 string
contained a NUL character, while the caller expects a mutable string.
The caller will attempt to change this string, which allows a client to
crash a server by sending a certificate with an embedded NUL character.

(The other way around is not interesting, as servers are allowed to stop
a client by design.)

Impact analysis:
 * applies to mbedtls builds only
 * introduced in 2.4 (so 2.3 is not affected)
 * can only be exploited if the --x509-track option is used
 * requires the CA to sign a certificate with an embedded NUL in the
   certificate subject

This bug was discovered and reported to the OpenVPN security team by
Guido Vranken.

CVE: 2017-7522
Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1497864520-12219-2-git-send-email-steffan.karger@fox-it.com>
URL: https://www.mail-archive.com/search?l=mid&q=1497864520-12219-2-git-send-email-steffan.karger@fox-it.com
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoauth-token with auth-nocache fix broke --disable-crypto builds
David Sommerseth [Mon, 19 Jun 2017 13:05:07 +0000 (15:05 +0200)] 
auth-token with auth-nocache fix broke --disable-crypto builds

After adding commit 571165360db0392fa83e, it broke builds where
the --disable-crypto was used with ./configure.  This was due to
the delayed_auth_pass_purge() which requires the crypto code paths
being called from init.c without the proper #ifdef encapsulation.

Signed-off-by: David Sommerseth <davids@openvpn.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20170619130507.13892-1-davids@openvpn.net>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14883.html
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agoIgnore auth-nocache for auth-user-pass if auth-token is pushed
Antonio Quartulli [Sat, 25 Feb 2017 00:40:14 +0000 (08:40 +0800)] 
Ignore auth-nocache for auth-user-pass if auth-token is pushed

When the auth-token option is pushed from the server to the client,
the latter has to ignore the auth-nocache directive (if specified).

The password will now be substituted by the unique token, therefore
it can't be wiped out, otherwise the next renegotiation will fail.

Trac: #840
Cc: David Sommerseth <openvpn@sf.lists.topphemmelig.net>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
Acked-by: Arne Schwabe <arne@rfc2549.org>
Message-Id: <20170225004014.28638-1-a@unstable.cc>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14194.html
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agoFix potential 1-byte overread in TCP option parsing.
Gert Doering [Sun, 18 Jun 2017 19:41:04 +0000 (21:41 +0200)] 
Fix potential 1-byte overread in TCP option parsing.

A malformed TCP header could lead to a one-byte overread when
searching for the MSS option (but as far as we know, with no
adverse consequences).

Change outer loop to always ensure there's one extra byte available
in the buffer examined.

Technically, this would cause OpenVPN to ignore the only single-byte
TCP option available, 'NOP', if it ends up being the very last
option in the buffer - so what, it's a NOP anyway, and all we
are interested is MSS, which needs 4 bytes.
(https://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml)

Found and reported by Guido Vranken <guidovranken@gmail.com>.

Trac: #745

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Arne Schwabe <arne@rfc2549.org>
Message-Id: <20170618194104.25179-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14874.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoOpenSSL: don't use direct access to the internal of HMAC_CTX
Emmanuel Deloget [Mon, 12 Jun 2017 13:43:29 +0000 (15:43 +0200)] 
OpenSSL: don't use direct access to the internal of HMAC_CTX

OpenSSL 1.1 does not allow us to directly access the internal of
any data type, including HMAC_CTX. We have to use the defined
functions to do so.

Compatibility with OpenSSL 1.0 is kept by defining the corresponding
functions when they are not found in the library.

Signed-off-by: Emmanuel Deloget <logout@free.fr>
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170612134330.20971-8-logout@free.fr>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14797.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoOpenSSL: don't use direct access to the internal of EVP_CIPHER_CTX
Emmanuel Deloget [Mon, 12 Jun 2017 13:43:28 +0000 (15:43 +0200)] 
OpenSSL: don't use direct access to the internal of EVP_CIPHER_CTX

OpenSSL 1.1 does not allow us to directly access the internal of
any data type, including EVP_CIPHER_CTX. We have to use the defined
functions to do so.

Compatibility with OpenSSL 1.0 is kept by defining the corresponding
functions when they are not found in the library.

Signed-off-by: Emmanuel Deloget <logout@free.fr>
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170612134330.20971-7-logout@free.fr>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14796.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoOpenSSL: don't use direct access to the internal of EVP_MD_CTX
Emmanuel Deloget [Mon, 12 Jun 2017 13:43:27 +0000 (15:43 +0200)] 
OpenSSL: don't use direct access to the internal of EVP_MD_CTX

OpenSSL 1.1 does not allow us to directly access the internal of
any data type, including EVP_MD_CTX. We have to use the defined
functions to do so.

Compatibility with OpenSSL 1.0 is kept by defining the corresponding
functions when they are not found in the library.

Signed-off-by: Emmanuel Deloget <logout@free.fr>
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170612134330.20971-6-logout@free.fr>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14793.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoFix mbedtls fingerprint calculation
Steffan Karger [Sat, 20 May 2017 12:57:55 +0000 (14:57 +0200)] 
Fix mbedtls fingerprint calculation

Commit 'Migrate to mbed TLS 2.x' (86d8cd68) introduced a bug in mbedtls
builds where we would calculate the certificate fingerprint over the
(too-short) 'to-be-signed' length of the certificate, rather than over the
certificate including the signature.  Fix that.

The security impact of the incorrect calculation is very minimal; the last
few bytes (max 4, typically 4) are not verified by the fingerprint.  We
expect no real-world impact, because users that used this feature before
will notice that it has suddenly stopped working, and users that didn't
will notice that connection setup fails.

Even if the user managed to somehow extract the incorrect hash (e.g. by
reading out the tls_digest_* env vars using a --tls-verify script), the
impact is miminal: the last 4 bytes must still be properly signed by the
CA, and typically contain extension fields, or the last bytes of the
public key (which are hard to choose).  The most important bits of the
certificate were always checked: the version, serial, signature algorithm,
issuer, validity and subject.

Signed-off-by: Steffan Karger <steffan@karger.me>
Acked-by: Arne Schwabe <arne@rfc2549.org>
Message-Id: <1495285075-4957-1-git-send-email-steffan@karger.me>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14711.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoAdd a DSA test key/cert pair to sample-keys
Steffan Karger [Sun, 18 Jun 2017 10:57:40 +0000 (12:57 +0200)] 
Add a DSA test key/cert pair to sample-keys

Makes it easier to test changes to DSA-related code.

Signed-off-by: Steffan Karger <steffan@karger.me>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20170618105740.10090-1-steffan@karger.me>
URL: https://www.mail-archive.com/search?l=mid&q=20170618105740.10090-1-steffan@karger.me
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoOpenSSL: force meth->name as non-const when we free() it
Emmanuel Deloget [Mon, 12 Jun 2017 13:43:30 +0000 (15:43 +0200)] 
OpenSSL: force meth->name as non-const when we free() it

We are in control of meth->name (we string_alloc() it in RSA_meth_new())
so we know that we can free() it when it's no longer needed. Yet we have
to force the value to be non-const to avoid a compiler warning -- due to
the fact that OpenSSL defines the value as a const char*, regardless of
its origin.

Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170612134330.20971-9-logout@free.fr>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14798.html

Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoOpenSSL: don't use direct access to the internal of DSA
Emmanuel Deloget [Mon, 12 Jun 2017 13:43:26 +0000 (15:43 +0200)] 
OpenSSL: don't use direct access to the internal of DSA

OpenSSL 1.1 does not allow us to directly access the internal of
any data type, including DSA. We have to use the defined
functions to do so.

Compatibility with OpenSSL 1.0 is kept by defining the corresponding
functions when they are not found in the library.

Signed-off-by: Emmanuel Deloget <logout@free.fr>
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170612134330.20971-5-logout@free.fr>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14791.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoOpenSSL: don't use direct access to the internal of RSA
Emmanuel Deloget [Mon, 12 Jun 2017 13:43:25 +0000 (15:43 +0200)] 
OpenSSL: don't use direct access to the internal of RSA

OpenSSL 1.1 does not allow us to directly access the internal of
any data type, including RSA. We have to use the defined
functions to do so.

Compatibility with OpenSSL 1.0 is kept by defining the corresponding
functions when they are not found in the library.

Signed-off-by: Emmanuel Deloget <logout@free.fr>
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170612134330.20971-4-logout@free.fr>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14790.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoOpenSSL: don't use direct access to the internal of EVP_PKEY
Emmanuel Deloget [Mon, 12 Jun 2017 13:43:24 +0000 (15:43 +0200)] 
OpenSSL: don't use direct access to the internal of EVP_PKEY

OpenSSL 1.1 does not allow us to directly access the internal of
any data type, including EVP_PKEY. We have to use the defined
functions to do so.

Compatibility with OpenSSL 1.0 is kept by defining the corresponding
functions when they are not found in the library.

Signed-off-by: Emmanuel Deloget <logout@free.fr>
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170612134330.20971-3-logout@free.fr>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14795.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoOpenSSL: don't use direct access to the internal of X509
Emmanuel Deloget [Mon, 12 Jun 2017 13:43:23 +0000 (15:43 +0200)] 
OpenSSL: don't use direct access to the internal of X509

OpenSSL 1.1 does not allow us to directly access the internal of
any data type, including X509. We have to use the defined
functions to do so.

In x509_verify_ns_cert_type() in particular, this means that we
cannot directly check for the extended flags to find whether the
certificate should be used as a client or as a server certificate.
We need to leverage the X509_check_purpose() API yet this API is
far stricter than the currently implemented check. So far, I have
not been able to find a situation where this stricter test fails
(although I must admit that I haven't tested that very well).

We double-check the certificate purpose using "direct access" to the
internal of the certificate object (of course, this is not a real
direct access, but we still fetch ASN1 strings within the X509 object
and we check the internal value of these strings). This allow us to
warn the user if there is a discrepancy between the X509_check_purpose()
return value and our internal, less strict check.

We use these changes to make peer_cert a non-const parameter to
x509_verify_ns_cert_type(). The underlying library waits for a
non-const pointer, and forcing it to be a const pointer does not make
much sense (please note that this has an effect on the mbedtls part
too).

Compatibility with OpenSSL 1.0 is kept by defining the corresponding
functions when they are not found in the library.

Signed-off-by: Emmanuel Deloget <logout@free.fr>
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170612134330.20971-2-logout@free.fr>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14792.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoFix edge case with clients failing to set up cipher on empty PUSH_REPLY.
Gert Doering [Sun, 18 Jun 2017 09:22:44 +0000 (11:22 +0200)] 
Fix edge case with clients failing to set up cipher on empty PUSH_REPLY.

The NCP (data channel crypto negotiation) code on the client side waits
for an incoming PUSH_REPLY before setting up the data channel crypto
parameters, because the PUSH_REPLY could contain a "cipher xxx" setting.

In the particular case of a empty PUSH_REPLY message, the relevant code
bits was not called because "we have not received any options, do not
bother to look into it in more detail" - so, ciphers were not set up,
resulting in an error message like this:

    Key [AF_INET]... [0] not initialized (yet), dropping packet.

Remove that check, always init the crypto layer on PUSH_REPLY.

Trac: #903

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170618092244.8801-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14856.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agodev-tools: Script generating the source releases in an automated fashion
David Sommerseth [Thu, 18 May 2017 13:24:32 +0000 (15:24 +0200)] 
dev-tools: Script generating the source releases in an automated fashion

As we've had an ugly blunder with the v2.3.15 release, this release
tries to avoid making the same mistake once again.  Plus it documents
how we produce the source packages.

Signed-off-by: David Sommerseth <davids@openvpn.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20170518132432.22776-1-davids@openvpn.net>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14672.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agocopyright: Update GPLv2 license texts
David Sommerseth [Wed, 29 Mar 2017 09:36:48 +0000 (11:36 +0200)] 
copyright: Update GPLv2 license texts

The COPYRIGHT.GPL file was slightly out-of-sync with the last GPLv2
license from Free Software Foundation, Inc.

The changes are primarily a new address, which required touching almost
all the project files.

Except of that, it is just minor adjustments to formatting, removal of
form-feed characters and referencing "GNU Lesser General Public License"
instead of "GNU Library General Public License".

Signed-off-by: David Sommerseth <davids@openvpn.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20170329093648.10156-1-davids@openvpn.net>
URL: https://www.mail-archive.com/search?l=mid&q=20170329093648.10156-1-davids@openvpn.net
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoFix a null-pointer dereference in establish_http_proxy_passthru()
Guido Vranken [Fri, 16 Jun 2017 00:58:56 +0000 (02:58 +0200)] 
Fix a null-pointer dereference in establish_http_proxy_passthru()

Prevents that the client crashes if the peer does not specify
the 'realm' and/or 'nonce' values. These pointers are
dereferenced in DigestCalcHA1() and DigestCalcResponse();
hence, if not set, a null-pointer dereference would occur.

Signed-off-by: Guido Vranken <guidovranken@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1497574736-2092-1-git-send-email-gv@guidovranken.nl>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14844.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoopenssl: fix overflow check for long --tls-cipher option
Steffan Karger [Mon, 22 May 2017 13:54:13 +0000 (15:54 +0200)] 
openssl: fix overflow check for long --tls-cipher option

The length check in tls_ctx_restrict_ciphers() did not check for overflow,
which could lead to a stack buffer overflow.

This has no real-world impact, because --tls-cipher can only be specified
by entities that are allowed to supply config settings.  Since those
entities can also change --script-security and call scripts and/or
plugins, these users already have code execution at the level of the
openvpn process.  In other words: the attacker would not gain any
capabilities.  Nevertheless, a nasty bug that we should fix.

This bug was discovered and reported to the OpenVPN security team by
Guido Vranken.

Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1495461253-20111-1-git-send-email-steffan.karger@fox-it.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14716.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoSkip tls-crypt unit tests if required crypto mode not supported
Steffan Karger [Mon, 15 May 2017 14:44:43 +0000 (16:44 +0200)] 
Skip tls-crypt unit tests if required crypto mode not supported

Instead of failing the test with an unclear error, print that the a
required crypto primitive is not supported and skip the test.

This is for example the case when using the system-supplied openssl on
SLES11, which does not support AES-256-CTR.

Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1494859483-16466-1-git-send-email-steffan.karger@fox-it.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14657.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoEnsure option array p[] is always NULL-terminated
Guido Vranken [Wed, 7 Jun 2017 23:02:38 +0000 (01:02 +0200)] 
Ensure option array p[] is always NULL-terminated

Add one element (a terminating NULL pointer) to the array into
which parse_line() stores the arguments. This prevents that options
that traverse this array until a terminator is seen (for instance
options that call no_more_than_n_args) will peek beyond buffer bounds.
In the worst case this might lead to a crash (stack overflow, not
likely in practice).

Signed-off-by: Guido Vranken <guidovranken@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <CAO5O-EKCLjPpdKUH6cCoqoZDAfekSafpc7Ga55H2_5Hs4rBopg@mail.gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14757.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoproxy.c refactoring: remove always-NULL gc parameter
Gert Doering [Fri, 9 Jun 2017 20:50:29 +0000 (22:50 +0200)] 
proxy.c refactoring: remove always-NULL gc parameter

get_proxy_authenticate() is called with a "gc" parameter which MUST
be NULL, otherwise string_alloc() will allocate memory in the gc_arena
while the caller expects the result to be durable and will do explicit
free() when no longer needed.  Remove gc parameter, call string_alloc()
with "NULL" so this is clearly visible.

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170609205029.11002-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14768.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoMissing include for socket-flags TCP_NODELAY on OpenBSD
Jérémie Courrèges-Anglas [Sat, 10 Jun 2017 17:31:21 +0000 (19:31 +0200)] 
Missing include for socket-flags TCP_NODELAY on OpenBSD

Signed-off-by: Jeremie Courreges-Anglas <jca@wxcvbn.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <87fuf7u455.fsf@ritchie.wxcvbn.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14772.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoFix an unaligned access on OpenBSD/sparc64
Jérémie Courrèges-Anglas [Sat, 10 Jun 2017 14:48:44 +0000 (16:48 +0200)] 
Fix an unaligned access on OpenBSD/sparc64

The pointer to the packet content doesn't seem to be word-aligned,
resulting in a SIGBUS when accessing it as a pointer to struct ip that
contains bit fields.

Replace with struct openvpn_iphdr and OPENVPN_IPH_GET_VER, which only
does a one byte access and thus isn't affected by alignement.
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <87ink3vpcs.fsf@ritchie.wxcvbn.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14769.html

Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoFix memory leak in add_option() for option 'connection'
Guido Vranken [Thu, 8 Jun 2017 22:04:36 +0000 (00:04 +0200)] 
Fix memory leak in add_option() for option 'connection'

This patch ensures that if an error occurs while processing
the 'connection' directive of an options specification,
the variable 'struct options sub', which is initialized
with init_options(), is properly freed with uninit_options().

Signed-off-by: Guido Vranken <guidovranken@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <CAO5O-E+HdfHNAK=--55054AB374U-Ky4q_-3M114makfPdSnBw@mail.gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14764.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoFix 2 memory leaks in proxy authentication routine
Guido Vranken [Thu, 8 Jun 2017 14:36:54 +0000 (16:36 +0200)] 
Fix 2 memory leaks in proxy authentication routine

Signed-off-by: Guido Vranken <guidovranken@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <CAO5O-EL11jDxO+c1Gu0FvunqwUTW2uxjy910+A-s63Nr5O3NWw@mail.gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14758.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agorefactor my_strupr
Guido Vranken [Wed, 7 Jun 2017 22:44:15 +0000 (00:44 +0200)] 
refactor my_strupr

Refactor my_strupr such that it will not check and possibly alter bytes
after the string's null terminator for strings of length 0.

Signed-off-by: Guido Vranken <guidovranken@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <CAO5O-ELXwXgGtRFou=FY1TAhW4W4BHPZF4=rqSY877njtXNMJg@mail.gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14756.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoRemove erroneous limitation on max number of args for --plugin
Gert Doering [Thu, 18 May 2017 19:13:11 +0000 (21:13 +0200)] 
Remove erroneous limitation on max number of args for --plugin

Commit 3d6a4cded2 introduced a maximum limit of possible arguments
for most options, to error out on config lines with too-many args.

Commit 82acf21634 extended the limit for "--plugin" to accept "one
mandatory, one optional" argument.

Both are wrong - "--plugin" can accept an arbitrary number of arguments,
but this is not directly obvious from options.c, one needs to check
plugins.c / plugin_option_list_add() and misc.c / make_extended_arg_array()
to see that.

Thus, remove the max limit for "--plugin" completely.

(Reported by SviMik on IRC)

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170518191311.4769-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14678.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoFix gateway detection with OpenBSD routing domains
Steven McDonald [Thu, 13 Apr 2017 17:31:29 +0000 (03:31 +1000)] 
Fix gateway detection with OpenBSD routing domains

When OpenVPN is started using a non-default routing table on OpenBSD
(e.g., with 'route -T10 exec openvpn ...'), it hangs forever trying to
read its default gateway from a PF_ROUTE socket. This is because
rtm_tableid is not being initialised after bzeroing the rt_msghdr we
write to the socket, so we end up asking the kernel for the default
route in routing table 0.

By default, the OpenBSD kernel will not respond to requests for routing
table 0 from a process running in a different routing table, and even
if it did, it would give us the wrong default gateway.

The solution here is to set rtm_tableid to the value returned by
getrtable(2), which always succeeds and returns the calling process's
current routing table.

This patch makes the test suite (without a t_client.rc) pass when run
in a non-default routing table, where it would fail previously. It has
also been successfully tested in client mode against both git master
and OpenVPN 2.4.1 from ports on an OpenBSD -current system.

Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20170413173129.87367-1-steven@steven-mcdonald.id.au>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14461.html

Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoAvoid a 1 byte overcopy in x509_get_subject (ssl_verify_openssl.c)
Steffan Karger [Sun, 14 May 2017 19:00:41 +0000 (21:00 +0200)] 
Avoid a 1 byte overcopy in x509_get_subject (ssl_verify_openssl.c)

This is the equivalent of the 2.3 patch (04c84548c2) by Guido Vranken,
adjusted to code in the master and release/2.4 branches.

Trac: #890

Signed-off-by: Steffan Karger <steffan@karger.me>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <143540d4-e8ea-b533-ad1a-8ae33bfd1133@karger.me>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14653.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoFix NCP behaviour on TLS reconnect.
Gert Doering [Thu, 18 May 2017 10:22:46 +0000 (12:22 +0200)] 
Fix NCP behaviour on TLS reconnect.

If a client reconnects on a hard-restart from the same port (due to --bind
in use on the client), both sides will handle this as a "reconnect" and
not a "full new connect" internally, re-using existing crypto context.

The client will still ask the server for pushed options, and the server
code to handle this refuses to do NCP if a key has already been negotiated
(because there is no way to *change* the cipher after that) - which ends
up in "the client uses the non-negotiated cipher from the config file,
while the server uses the previously-negotiated NCP cipher", and nothing
works.

The easy workaround: if we find us in the situation that we think NCP
has already been done, just re-push "cipher o->ciphername" with the
current cipher for this client context.

All credits for this go to Stefan Behrens <sbehrens@giantdisaster.de>
who found and diagnosed the issue in trac #887, came up with a first
patch to solve the issue quite similar to this (simplified) one, and
helped testing.

Trac: #887

Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170518102246.5496-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14666.html

Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agocrypto: Enable SHA256 fingerprint checking in --verify-hash
David Sommerseth [Thu, 4 May 2017 20:42:01 +0000 (22:42 +0200)] 
crypto: Enable SHA256 fingerprint checking in --verify-hash

This enhances --verify-hash with an optional algorithm flag.  If not
provided, it defaults to SHA1 to preserve backwards compatbilitity with
existing configurations.  The only valid flags are SHA1 and SHA256.

In addition enhance the layout of the --verify-hash section in the man
page.

Signed-off-by: David Sommerseth <davids@openvpn.net>
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <20170504204201.1257-1-davids@openvpn.net>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14538.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoMake openvpn-plugin.h self-contained again.
Matthias Andree [Mon, 15 May 2017 21:48:45 +0000 (23:48 +0200)] 
Make openvpn-plugin.h self-contained again.

2.4.2 introduced a declaration that references size_t, so use the C99
way of declaring it, and add #include <stddef.h>.

Note this may break on non-C99-compliant versions of MS Visual Studio.

Signed-off-by: Matthias Andree <matthias.andree@gmx.de>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1494884925-12539-1-git-send-email-matthias.andree@gmx.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14658.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoLog the negotiated (NCP) cipher
Steffan Karger [Mon, 15 May 2017 14:43:55 +0000 (16:43 +0200)] 
Log the negotiated (NCP) cipher

To make it clear that NCP is in effect, print a log message (at --verb 2)
to show that we selected a cipher using NCP.

Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: Arne Schwabe <arne@rfc2549.org>
Message-Id: <1494859435-16379-1-git-send-email-steffan.karger@fox-it.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14656.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoPass correct buffer size to GetModuleFileNameW()
Selva Nair [Fri, 12 May 2017 01:32:34 +0000 (21:32 -0400)] 
Pass correct buffer size to GetModuleFileNameW()

Fixes finding 5.6 of OSTIF/Quarkslab audit

Signed-off-by: Selva Nair <selva.nair@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1494552754-30060-1-git-send-email-selva.nair@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14647.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
8 years agoSet a low interface metric for tap adapter when block-outside-dns is in use
ValdikSS [Wed, 10 May 2017 18:47:53 +0000 (21:47 +0300)] 
Set a low interface metric for tap adapter when block-outside-dns is in use

Windows 10 before Creators Update used to resolve DNS using all
available adapters and IP addresses in parallel. Now it still
resolves addresses using all available adapters but in a round-robin
way, beginning with random adapter.
This behaviour introduces significant delay when block-outside-dns is
in use. Fortunately, setting low metric for the TAP interface solves
this issue, making Windows always pick TAP adapter first and disable
round-robin.

Signed-off-by: ValdikSS <iam@valdikss.org.ru>
Acked-by: Selva Nair <selva.nair@gmail.com>
Message-Id: <20170510184753.27145-1-valdikss@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14624.html
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agoDrop packets instead of assert out if packet id rolls over (CVE-2017-7479)
Steffan Karger [Tue, 9 May 2017 19:30:09 +0000 (21:30 +0200)] 
Drop packets instead of assert out if packet id rolls over (CVE-2017-7479)

Previously, if a mode was selected where packet ids are not allowed to roll
over, but renegotiation does not succeed for some reason (e.g. no password
entered in time, certificate expired or a malicious peer that refuses the
renegotiaion on purpose) we would continue to use the old keys.  Until the
packet ID would roll over and we would ASSERT() out.

Given that this can be triggered on purpose by an authenticated peer, this
is a fix for an authenticated remote DoS vulnerability.  An attack is
rather inefficient though; a peer would need to get us to send 2^32
packets (min-size packet is IP+UDP+OPCODE+PID+TAG (no payload), results in
(20+8+1+4+16)*2^32 bytes, or approx. 196 GB).

This is a fix for finding 5.2 from the OSTIF / Quarkslab audit.

CVE: 2017-7479
Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Acked-by: David Sommerseth <davids@openvpn.net>
Message-Id: <1494358209-4568-3-git-send-email-steffan.karger@fox-it.com>
URL: http://www.mail-archive.com/search?l=mid&q=1494358209-4568-3-git-send-email-steffan.karger@fox-it.com
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agoDon't assert out on receiving too-large control packets (CVE-2017-7478)
Steffan Karger [Tue, 9 May 2017 19:30:08 +0000 (21:30 +0200)] 
Don't assert out on receiving too-large control packets (CVE-2017-7478)

Commit 3c1b19e0 changed the maximum size of accepted control channel
packets.  This was needed for crypto negotiation (which is needed for a
nice transition to a new default cipher), but exposed a DoS
vulnerability.  The vulnerability was found during the OpenVPN 2.4 code
audit by Quarkslab (commisioned by OSTIF).

To fix the issue, we should not ASSERT() on external input (in this case
the received packet size), but instead gracefully error out and drop the
invalid packet.

CVE: 2017-7478
Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: David Sommerseth <davids@openvpn.net>
Message-Id: <1494358209-4568-2-git-send-email-steffan.karger@fox-it.com>
URL: http://www.mail-archive.com/search?l=mid&q=1494358209-4568-2-git-send-email-steffan.karger@fox-it.com
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agoDocument tls-crypt security considerations in man page
Steffan Karger [Tue, 9 May 2017 18:42:48 +0000 (20:42 +0200)] 
Document tls-crypt security considerations in man page

The tls-crypt commit message contained an elaborate discussion on the
function's security properties.  This commit adds the gist of that
discussion, "rotate keys periodically" to the man page.

(The 'real' solution will follow later: add support for per-client
tls-crypt keys.  That will make tls-crypt useful for VPN providers too.)

Note to non-crypto-geek reviewers: please verify that this text is clear
enough to explain you when you need to replace tls-crypt keys.

Note to crypto-geek reviewers: please check the numbers - see the
--tls-crypt commit message (c6e24fa3) for details.

[DS: Fixed a few typos on-the-fly during commit]

Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: Selva Nair <selva.nair@gmail.com>
Message-Id: <1494355368-20238-1-git-send-email-steffan.karger@fox-it.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14610.html
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agoIn auth-pam plugin clear the password after use
Selva Nair [Tue, 9 May 2017 19:44:29 +0000 (15:44 -0400)] 
In auth-pam plugin clear the password after use

v2: Change the plugin open to use v3 API so that secure_memzero()
    exported from OpenVPN can be used.
v3: Relaxe API compatibility check: struct version 4 or higher
    will have secure_memzero exported.

Note: context is cast as (openvpn_plugin_handle_t *) for consistency
with the current plugin header. If/when the header is fixed, change
this cast as well.

Signed-off-by: Selva Nair <selva.nair@gmail.com>
Acked-by: David Sommerseth <davids@openvpn.net>
Message-Id: <1494359069-13824-1-git-send-email-selva.nair@gmail.com>
URL: http://www.mail-archive.com/search?l=mid&q=1494359069-13824-1-git-send-email-selva.nair@gmail.com
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agoAlways clear username/password from memory on error
Steffan Karger [Tue, 9 May 2017 18:32:44 +0000 (20:32 +0200)] 
Always clear username/password from memory on error

This issue was found by Quarkslab during the OSTIF-founded security audit
(issue 5.4), we are with their analysis:

"There’s a special case where the client username and password are not
erased when the server is launched without an external script or
authentication plugin. While being invalid, this configuration does not
raise any error. If the client transmits its credentials and the session
is not established (for instance if the certificates chain has not been
verified), these credentials are not erased from memory by the server.

The likelihood of an occurrence of this issue in real life is
exceptionally low since an attacker needs elevated privileges on the
server to exploit this kind of information leak. The severity of this
issue is rated as very low."

Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: David Sommerseth <davids@openvpn.net>
Message-Id: <1494354764-19354-1-git-send-email-steffan.karger@fox-it.com>
URL: http://www.mail-archive.com/search?l=mid&q=1494354764-19354-1-git-send-email-steffan.karger@fox-it.com
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agoplugin: Export secure_memzero() to plug-ins
David Sommerseth [Fri, 5 May 2017 18:46:22 +0000 (20:46 +0200)] 
plugin: Export secure_memzero() to plug-ins

The provides plug-ins with a safe and secure way to santize sensitive
information such as passwords, by re-using the secure_memzero()
implementation in OpenVPN.

Signed-off-by: David Sommerseth <davids@openvpn.net>
Acked-by: Selva Nair <selva.nair@gmail.com>
Message-Id: <20170505184622.24520-1-davids@openvpn.net>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14546.html
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agoRestore pre-NCP frame parameters for new sessions
Steffan Karger [Mon, 8 May 2017 21:44:38 +0000 (23:44 +0200)] 
Restore pre-NCP frame parameters for new sessions

As reported in trac #879, as of the introduction of NCP we always adjust
the frame parameters on session negotiations, but do not reset the frame
state for a new session on an existing state instance.  That caused the
frame parameters to be reduced for each reconnect, resulting in smaller
and smaller packet size limits until no traffic could go through the
tunnel at all.  This patch resolves that omission.

Trac: #879
Signed-off-by: Steffan Karger <steffan@karger.me>
Acked-by: David Sommerseth <davids@openvpn.net>
Acked-by: Arne Schwabe <arne@rfc2549.org>
Message-Id: <1494279878-24601-1-git-send-email-steffan@karger.me>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14589.html
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agoplugin: Fix documentation typo for type_mask
David Sommerseth [Mon, 8 May 2017 14:19:39 +0000 (16:19 +0200)] 
plugin: Fix documentation typo for type_mask

The v3 plug-in API was slightly misleading, as that interface does not
need to use an int pointer to setting the type_mask from the plug-in.

Signed-off-by: David Sommerseth <davids@openvpn.net>
Acked-by: Selva Nair <selva.nair@gmail.com>
Message-Id: <20170508141939.31224-1-davids@openvpn.net>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14576.html
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agombedtls: correctly check return value in pkcs11_certificate_dn()
Steffan Karger [Tue, 9 May 2017 08:12:43 +0000 (10:12 +0200)] 
mbedtls: correctly check return value in pkcs11_certificate_dn()

mbedtls_x509_dn_gets() would not always return -1 error, which could cause
us to incorrectly continue after the function call failed.  To fix this,
just call our own x509_get_subject(), which does all the neccesary error
checking correctly.

pkcs11_certificate_dn() is only called by show_pkcs11_ids(), to list the
certificates on the pkcs11 token.  Therefor, this mistake did not have a
security impact.

This issue was found by Quarkslab during the OSTIF-founded security audit
(issue 5.3).

Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1494317563-6303-1-git-send-email-steffan.karger@fox-it.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14591.html
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agov4, travis-ci: add 2 mingw "build only" configurations
Ilya Shipitsin [Fri, 5 May 2017 18:08:17 +0000 (23:08 +0500)] 
v4, travis-ci: add 2 mingw "build only" configurations

Inspired by
https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg13032.h
tml
build options are taken from regular windows installer builds

Signed-off-by: Ilya Shipitsin <chipitsine@gmail.com>
Acked-by: Steffan Karger <steffan@karger.me>
Message-Id: <1494007697-6882-1-git-send-email-chipitsine@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14542.html
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agoFix memory leak in x509_verify_cert_ku()
Steffan Karger [Sun, 7 May 2017 11:01:18 +0000 (13:01 +0200)] 
Fix memory leak in x509_verify_cert_ku()

If keyUsage was only required to be present, but no specific value was
required, we would omit to free the extracted string.  This happens as of
2.4.1, if --remote-cert-tls is used.  In that case we leak a bit of
memory on each TLS (re)negotiation.

Signed-off-by: Steffan Karger <steffan@karger.me>
Acked-by: David Sommerseth <davids@openvpn.net>
Message-Id: <1494154878-18403-1-git-send-email-steffan@karger.me>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14563.html
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agoFix extract_x509_field_ssl for external objects, v2
Hristo Venev [Wed, 3 May 2017 23:10:48 +0000 (00:10 +0100)] 
Fix extract_x509_field_ssl for external objects, v2

Only fields known to OpenSSL have a NID. OBJ_txt2obj allows specifying
fields by numeric OID.

Signed-off-by: Hristo Venev <hristo@venev.name>
Acked-by: Steffan Karger <steffan@karger.me>
Message-Id: <1493853048.30207.1.camel@venev.name>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg14535.html
Signed-off-by: David Sommerseth <davids@openvpn.net>
8 years agoFix Changes.rst layout
Steffan Karger [Fri, 5 May 2017 20:14:46 +0000 (22:14 +0200)] 
Fix Changes.rst layout

The extra space before each line made the 2.4.1 section stand out from the
other sections.

Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: David Sommerseth <davids@openvpn.net>
Message-Id: <1494015286-20368-1-git-send-email-steffan.karger@fox-it.com>
URL: http://www.mail-archive.com/search?l=mid&q=1494015286-20368-1-git-send-email-steffan.karger@fox-it.com
Signed-off-by: David Sommerseth <davids@openvpn.net>