parent
91c24fefe0
commit
d452e6f197
@ -0,0 +1,65 @@
|
|||||||
|
From 4ff991c46e6b202cabd623eeffa5ae1af1ba5c8e Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Woodhouse <dwmw2@infradead.org>
|
||||||
|
Date: Fri, 23 Apr 2021 10:40:44 +0100
|
||||||
|
Subject: [PATCH 1/2] Ignore errors fetching NC landing page if auth was
|
||||||
|
successful
|
||||||
|
|
||||||
|
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
|
||||||
|
(cherry picked from commit 3e77943692b511719d9217d2ecc43588b7c6c08b)
|
||||||
|
---
|
||||||
|
auth-juniper.c | 18 +++++++++++-------
|
||||||
|
www/changelog.xml | 2 +-
|
||||||
|
2 files changed, 12 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/auth-juniper.c b/auth-juniper.c
|
||||||
|
index 19d43978..63af3bfc 100644
|
||||||
|
--- a/auth-juniper.c
|
||||||
|
+++ b/auth-juniper.c
|
||||||
|
@@ -663,6 +663,17 @@ int oncp_obtain_cookie(struct openconnect_info *vpninfo)
|
||||||
|
ret = do_https_request(vpninfo, "GET", NULL, NULL,
|
||||||
|
&form_buf, 2);
|
||||||
|
|
||||||
|
+ /* After login, the server will redirect the "browser" to a landing page.
|
||||||
|
+ * https://kb.pulsesecure.net/articles/Pulse_Security_Advisories/SA44784
|
||||||
|
+ * turned some of those landing pages into a 403 but we don't *care*
|
||||||
|
+ * about that as long as we have the cookie we wanted. So check for
|
||||||
|
+ * cookie success *before* checking 'ret'. */
|
||||||
|
+ if (!check_cookie_success(vpninfo)) {
|
||||||
|
+ free(form_buf);
|
||||||
|
+ ret = 0;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (ret < 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -680,13 +691,6 @@ int oncp_obtain_cookie(struct openconnect_info *vpninfo)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (!check_cookie_success(vpninfo)) {
|
||||||
|
- buf_free(url);
|
||||||
|
- free(form_buf);
|
||||||
|
- ret = 0;
|
||||||
|
- break;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
doc = htmlReadMemory(form_buf, ret, url->data, NULL,
|
||||||
|
HTML_PARSE_RECOVER|HTML_PARSE_NOERROR|HTML_PARSE_NOWARNING|HTML_PARSE_NONET);
|
||||||
|
buf_free(url);
|
||||||
|
diff --git a/www/changelog.xml b/www/changelog.xml
|
||||||
|
index bca5c8e2..1a05eda7 100644
|
||||||
|
--- a/www/changelog.xml
|
||||||
|
+++ b/www/changelog.xml
|
||||||
|
@@ -15,7 +15,7 @@
|
||||||
|
<ul>
|
||||||
|
<li><b>OpenConnect HEAD</b>
|
||||||
|
<ul>
|
||||||
|
- <li><i>No changelog entries yet</i></li>
|
||||||
|
+ <li>Ignore failures to fetch the NC landing page if the authentication was successful.</li>
|
||||||
|
</ul><br/>
|
||||||
|
</li>
|
||||||
|
<li><b><a href="ftp://ftp.infradead.org/pub/openconnect/openconnect-8.10.tar.gz">OpenConnect v8.10</a></b>
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
@ -0,0 +1,134 @@
|
|||||||
|
From cc4658504b21eb87f9fa6bf7c1e42b83b6f64aaa Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Woodhouse <dwmw2@infradead.org>
|
||||||
|
Date: Sat, 12 Jun 2021 08:50:09 +0100
|
||||||
|
Subject: [PATCH 2/2] Unconditionally bypass system crypto policy
|
||||||
|
|
||||||
|
This makes me extremely sad, but they rolled it out with *no* way to
|
||||||
|
selectively allow the user to say "connect anyway", as we've always had
|
||||||
|
for "invalid" certificates, etc.
|
||||||
|
|
||||||
|
It's just unworkable and incomplete as currently implemented in the
|
||||||
|
distributions, so we have no choice except to bypass it and wait for
|
||||||
|
it to be fixed.
|
||||||
|
|
||||||
|
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
|
||||||
|
(cherry picked from commit 7e862f2f0352409357fa7a4762481fde49909eb8
|
||||||
|
and commit d29822cf30293d5f8b039baf3306eed2769fa0b5)
|
||||||
|
---
|
||||||
|
configure.ac | 3 +++
|
||||||
|
libopenconnect.map.in | 2 +-
|
||||||
|
main.c | 23 +++++++++++++++++++++++
|
||||||
|
openconnect-internal.h | 9 +++++++++
|
||||||
|
www/changelog.xml | 1 +
|
||||||
|
5 files changed, 37 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 8b1b540f..3ea5e9cc 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -26,6 +26,7 @@ symver_getline=
|
||||||
|
symver_asprintf=
|
||||||
|
symver_vasprintf=
|
||||||
|
symver_win32_strerror=
|
||||||
|
+symver_win32_setenv=
|
||||||
|
|
||||||
|
case $host_os in
|
||||||
|
*linux* | *gnu* | *nacl*)
|
||||||
|
@@ -54,6 +55,7 @@ case $host_os in
|
||||||
|
# For asprintf()
|
||||||
|
AC_DEFINE(_GNU_SOURCE, 1, [_GNU_SOURCE])
|
||||||
|
symver_win32_strerror="openconnect__win32_strerror;"
|
||||||
|
+ symver_win32_setenv="openconnect__win32_setenv;"
|
||||||
|
# Win32 does have the SCard API
|
||||||
|
system_pcsc_libs="-lwinscard"
|
||||||
|
system_pcsc_cflags=
|
||||||
|
@@ -156,6 +158,7 @@ AC_SUBST(SYMVER_GETLINE, $symver_getline)
|
||||||
|
AC_SUBST(SYMVER_ASPRINTF, $symver_asprintf)
|
||||||
|
AC_SUBST(SYMVER_VASPRINTF, $symver_vasprintf)
|
||||||
|
AC_SUBST(SYMVER_WIN32_STRERROR, $symver_win32_strerror)
|
||||||
|
+AC_SUBST(SYMVER_WIN32_SETENV, $symver_win32_setenv)
|
||||||
|
|
||||||
|
AS_COMPILER_FLAGS(WFLAGS,
|
||||||
|
"-Wall
|
||||||
|
diff --git a/libopenconnect.map.in b/libopenconnect.map.in
|
||||||
|
index 5b4bc5d7..1039aacf 100644
|
||||||
|
--- a/libopenconnect.map.in
|
||||||
|
+++ b/libopenconnect.map.in
|
||||||
|
@@ -109,7 +109,7 @@ OPENCONNECT_5_6 {
|
||||||
|
} OPENCONNECT_5_5;
|
||||||
|
|
||||||
|
OPENCONNECT_PRIVATE {
|
||||||
|
- global: @SYMVER_TIME@ @SYMVER_GETLINE@ @SYMVER_JAVA@ @SYMVER_ASPRINTF@ @SYMVER_VASPRINTF@ @SYMVER_WIN32_STRERROR@
|
||||||
|
+ global: @SYMVER_TIME@ @SYMVER_GETLINE@ @SYMVER_JAVA@ @SYMVER_ASPRINTF@ @SYMVER_VASPRINTF@ @SYMVER_WIN32_STRERROR@ @SYMVER_WIN32_SETENV@
|
||||||
|
openconnect_get_tls_library_version;
|
||||||
|
openconnect_fopen_utf8;
|
||||||
|
openconnect_open_utf8;
|
||||||
|
diff --git a/main.c b/main.c
|
||||||
|
index cc3dd91e..129755a1 100644
|
||||||
|
--- a/main.c
|
||||||
|
+++ b/main.c
|
||||||
|
@@ -1436,6 +1436,29 @@ int main(int argc, char **argv)
|
||||||
|
openconnect_binary_version, openconnect_version_str);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* Some systems have a crypto policy which completely prevents DTLSv1.0
|
||||||
|
+ * from being used, which is entirely pointless and will just drive
|
||||||
|
+ * users back to the crappy proprietary clients. Or drive OpenConnect
|
||||||
|
+ * to implement its own DTLS instead of using the system crypto libs.
|
||||||
|
+ * We're happy to conform by default to the system policy which is
|
||||||
|
+ * carefully curated to keep up to date with developments in crypto
|
||||||
|
+ * attacks — but we also *need* to be able to override it and connect
|
||||||
|
+ * anyway, when the user asks us to. Just as we *can* continue even
|
||||||
|
+ * when the server has an invalid certificate, based on user input.
|
||||||
|
+ * It was a massive oversight that GnuTLS implemented the system
|
||||||
|
+ * policy *without* that basic override facility, so until/unless
|
||||||
|
+ * it actually gets implemented properly we have to just disable it.
|
||||||
|
+ * We can't do this from openconnect_init_ssl() since that would be
|
||||||
|
+ * calling setenv() from a library in someone else's process. And
|
||||||
|
+ * thankfully we don't really need to since the auth-dialogs don't
|
||||||
|
+ * care; this is mostly for the DTLS connection.
|
||||||
|
+ */
|
||||||
|
+#ifdef OPENCONNECT_GNUTLS
|
||||||
|
+ setenv("GNUTLS_SYSTEM_PRIORITY_FILE", DEVNULL, 0);
|
||||||
|
+#else
|
||||||
|
+ setenv("OPENSSL_CONF", DEVNULL, 0);
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
openconnect_init_ssl();
|
||||||
|
|
||||||
|
vpninfo = openconnect_vpninfo_new((char *)"Open AnyConnect VPN Agent",
|
||||||
|
diff --git a/openconnect-internal.h b/openconnect-internal.h
|
||||||
|
index 92edf763..9eb274c2 100644
|
||||||
|
--- a/openconnect-internal.h
|
||||||
|
+++ b/openconnect-internal.h
|
||||||
|
@@ -41,6 +41,15 @@
|
||||||
|
|
||||||
|
#include "openconnect.h"
|
||||||
|
|
||||||
|
+/* Equivalent of "/dev/null" on Windows.
|
||||||
|
+ * See https://stackoverflow.com/a/44163934
|
||||||
|
+ */
|
||||||
|
+#ifdef _WIN32
|
||||||
|
+#define DEVNULL "NUL:"
|
||||||
|
+#else
|
||||||
|
+#define DEVNULL "/dev/null"
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#if defined(OPENCONNECT_OPENSSL)
|
||||||
|
#include <openssl/ssl.h>
|
||||||
|
#include <openssl/err.h>
|
||||||
|
diff --git a/www/changelog.xml b/www/changelog.xml
|
||||||
|
index 1a05eda7..ca90413f 100644
|
||||||
|
--- a/www/changelog.xml
|
||||||
|
+++ b/www/changelog.xml
|
||||||
|
@@ -16,6 +16,7 @@
|
||||||
|
<li><b>OpenConnect HEAD</b>
|
||||||
|
<ul>
|
||||||
|
<li>Ignore failures to fetch the NC landing page if the authentication was successful.</li>
|
||||||
|
+ <li>Disable brittle "system policy" enforcement where it cannot be gracefully overridden at user request. <a href="https://bugzilla.redhat.com/show_bug.cgi?id=1960763"><i>(RH#1960763)</i></a>.</li>
|
||||||
|
</ul><br/>
|
||||||
|
</li>
|
||||||
|
<li><b><a href="ftp://ftp.infradead.org/pub/openconnect/openconnect-8.10.tar.gz">OpenConnect v8.10</a></b>
|
||||||
|
--
|
||||||
|
2.31.1
|
||||||
|
|
Loading…
Reference in new issue