libssh: bump to 0.7.6 CVE-2018-10933 fixlilik-openwrt-22.03
@ -0,0 +1,83 @@ | |||||
From f81ca6161223e3566ce78a427571235fb6848fe9 Mon Sep 17 00:00:00 2001 | |||||
From: Andreas Schneider <asn@cryptomilk.org> | |||||
Date: Wed, 29 Aug 2018 18:41:15 +0200 | |||||
Subject: [PATCH 1/8] misc: Add strndup implementation if not provides by the | |||||
OS | |||||
Fixes T112 | |||||
Signed-off-by: Andreas Schneider <asn@cryptomilk.org> | |||||
(cherry picked from commit 247983e9820fd264cb5a59c14cc12846c028bd08) | |||||
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> | |||||
--- | |||||
ConfigureChecks.cmake | 1 + | |||||
config.h.cmake | 3 +++ | |||||
include/libssh/priv.h | 4 ++++ | |||||
src/misc.c | 21 +++++++++++++++++++++ | |||||
4 files changed, 29 insertions(+) | |||||
--- a/ConfigureChecks.cmake | |||||
+++ b/ConfigureChecks.cmake | |||||
@@ -115,6 +115,7 @@ endif (NOT WITH_GCRYPT) | |||||
check_function_exists(isblank HAVE_ISBLANK) | |||||
check_function_exists(strncpy HAVE_STRNCPY) | |||||
+check_function_exists(strndup HAVE_STRNDUP) | |||||
check_function_exists(strtoull HAVE_STRTOULL) | |||||
if (NOT WIN32) | |||||
--- a/config.h.cmake | |||||
+++ b/config.h.cmake | |||||
@@ -103,6 +103,9 @@ | |||||
/* Define to 1 if you have the `strncpy' function. */ | |||||
#cmakedefine HAVE_STRNCPY 1 | |||||
+/* Define to 1 if you have the `strndup' function. */ | |||||
+#cmakedefine HAVE_STRNDUP 1 | |||||
+ | |||||
/* Define to 1 if you have the `cfmakeraw' function. */ | |||||
#cmakedefine HAVE_CFMAKERAW 1 | |||||
--- a/include/libssh/priv.h | |||||
+++ b/include/libssh/priv.h | |||||
@@ -43,6 +43,10 @@ | |||||
# endif | |||||
#endif /* !defined(HAVE_STRTOULL) */ | |||||
+#if !defined(HAVE_STRNDUP) | |||||
+char *strndup(const char *s, size_t n); | |||||
+#endif /* ! HAVE_STRNDUP */ | |||||
+ | |||||
#ifdef HAVE_BYTESWAP_H | |||||
#include <byteswap.h> | |||||
#endif | |||||
--- a/src/misc.c | |||||
+++ b/src/misc.c | |||||
@@ -1028,6 +1028,27 @@ int ssh_match_group(const char *group, c | |||||
return 0; | |||||
} | |||||
+#if !defined(HAVE_STRNDUP) | |||||
+char *strndup(const char *s, size_t n) | |||||
+{ | |||||
+ char *x = NULL; | |||||
+ | |||||
+ if (n + 1 < n) { | |||||
+ return NULL; | |||||
+ } | |||||
+ | |||||
+ x = malloc(n + 1); | |||||
+ if (x == NULL) { | |||||
+ return NULL; | |||||
+ } | |||||
+ | |||||
+ memcpy(x, s, n); | |||||
+ x[n] = '\0'; | |||||
+ | |||||
+ return x; | |||||
+} | |||||
+#endif /* ! HAVE_STRNDUP */ | |||||
+ | |||||
/** @} */ | |||||
/* vim: set ts=4 sw=4 et cindent: */ |
@ -0,0 +1,24 @@ | |||||
From e4c6d591df6a9c34c1ff3ec9f367c7257122bef3 Mon Sep 17 00:00:00 2001 | |||||
From: Andreas Schneider <asn@cryptomilk.org> | |||||
Date: Wed, 17 Oct 2018 07:23:10 +0200 | |||||
Subject: [PATCH 2/8] packet: Add missing break in ssh_packet_incoming_filter() | |||||
CID 1396239 | |||||
Signed-off-by: Andreas Schneider <asn@cryptomilk.org> | |||||
(cherry picked from commit fe618a35dc4be3e73ddf29d0c4a96b98d3b9c48f) | |||||
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> | |||||
--- | |||||
src/packet.c | 1 + | |||||
1 file changed, 1 insertion(+) | |||||
--- a/src/packet.c | |||||
+++ b/src/packet.c | |||||
@@ -285,6 +285,7 @@ static enum ssh_packet_filter_result_e s | |||||
(session->dh_handshake_state != DH_STATE_FINISHED)) | |||||
{ | |||||
rc = SSH_PACKET_DENIED; | |||||
+ break; | |||||
} | |||||
rc = SSH_PACKET_ALLOWED; |
@ -0,0 +1,24 @@ | |||||
From 734e3ce6747a5ed120b93a1ff253b3fde5f20024 Mon Sep 17 00:00:00 2001 | |||||
From: Meng Tan <mtan@wallix.com> | |||||
Date: Wed, 17 Oct 2018 14:50:08 +0200 | |||||
Subject: [PATCH 3/8] server: Set correct state after sending INFO_REQUEST (Kbd | |||||
Interactive) | |||||
Signed-off-by: Meng Tan <mtan@wallix.com> | |||||
Reviewed-by: Andreas Schneider <asn@cryptomilk.org> | |||||
(cherry picked from commit 4ea46eecce9f4e676150fe27fec34e1570b70ace) | |||||
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> | |||||
--- | |||||
src/server.c | 1 + | |||||
1 file changed, 1 insertion(+) | |||||
--- a/src/server.c | |||||
+++ b/src/server.c | |||||
@@ -976,6 +976,7 @@ int ssh_message_auth_interactive_request | |||||
msg->session->kbdint->prompts = NULL; | |||||
msg->session->kbdint->echo = NULL; | |||||
} | |||||
+ msg->session->auth.state = SSH_AUTH_STATE_INFO; | |||||
return rc; | |||||
} |
@ -0,0 +1,37 @@ | |||||
From 3fe7510b261098e3937ab5417935916a46e6727b Mon Sep 17 00:00:00 2001 | |||||
From: Andreas Schneider <asn@cryptomilk.org> | |||||
Date: Fri, 19 Oct 2018 11:40:44 +0200 | |||||
Subject: [PATCH 4/8] messages: Check that the requested service is | |||||
'ssh-connection' | |||||
Signed-off-by: Andreas Schneider <asn@cryptomilk.org> | |||||
(cherry picked from commit 9c200d3ef4f62d724d3bae2563b81c38cc31e215) | |||||
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> | |||||
--- | |||||
src/messages.c | 8 ++++++++ | |||||
1 file changed, 8 insertions(+) | |||||
--- a/src/messages.c | |||||
+++ b/src/messages.c | |||||
@@ -649,6 +649,7 @@ SSH_PACKET_CALLBACK(ssh_packet_userauth_ | |||||
ssh_message msg = NULL; | |||||
char *service = NULL; | |||||
char *method = NULL; | |||||
+ int cmp; | |||||
int rc; | |||||
(void)user; | |||||
@@ -675,6 +676,13 @@ SSH_PACKET_CALLBACK(ssh_packet_userauth_ | |||||
service, method, | |||||
msg->auth_request.username); | |||||
+ cmp = strcmp(service, "ssh-connection"); | |||||
+ if (cmp != 0) { | |||||
+ SSH_LOG(SSH_LOG_WARNING, | |||||
+ "Invalid service request: %s", | |||||
+ service); | |||||
+ goto end; | |||||
+ } | |||||
if (strcmp(method, "none") == 0) { | |||||
msg->auth_request.method = SSH_AUTH_METHOD_NONE; |
@ -0,0 +1,72 @@ | |||||
From acb0e4f401440ca325e441064d2cb4b896fb9a3d Mon Sep 17 00:00:00 2001 | |||||
From: Andreas Schneider <asn@cryptomilk.org> | |||||
Date: Wed, 17 Oct 2018 17:32:54 +0200 | |||||
Subject: [PATCH 5/8] examples: Explicitly track auth state in | |||||
samplesshd-kbdint | |||||
Signed-off-by: Andreas Schneider <asn@cryptomilk.org> | |||||
(cherry picked from commit 0ff566b6dde5cd27653aa35280feceefad5d5224) | |||||
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> | |||||
--- | |||||
examples/samplesshd-kbdint.c | 20 ++++++++++++++++---- | |||||
1 file changed, 16 insertions(+), 4 deletions(-) | |||||
--- a/examples/samplesshd-kbdint.c | |||||
+++ b/examples/samplesshd-kbdint.c | |||||
@@ -23,6 +23,7 @@ clients must be made or how a client sho | |||||
#include <stdlib.h> | |||||
#include <string.h> | |||||
#include <stdio.h> | |||||
+#include <stdbool.h> | |||||
#define SSHD_USER "libssh" | |||||
#define SSHD_PASSWORD "libssh" | |||||
@@ -36,6 +37,7 @@ clients must be made or how a client sho | |||||
#endif | |||||
static int port = 22; | |||||
+static bool authenticated = false; | |||||
#ifdef WITH_PCAP | |||||
static const char *pcap_file = "debug.server.pcap"; | |||||
@@ -61,11 +63,20 @@ static void cleanup_pcap(void) { | |||||
#endif | |||||
-static int auth_password(const char *user, const char *password){ | |||||
- if(strcmp(user, SSHD_USER)) | |||||
+static int auth_password(const char *user, const char *password) | |||||
+{ | |||||
+ int cmp; | |||||
+ | |||||
+ cmp = strcmp(user, SSHD_USER); | |||||
+ if (cmp != 0) { | |||||
return 0; | |||||
- if(strcmp(password, SSHD_PASSWORD)) | |||||
+ } | |||||
+ cmp = strcmp(password, SSHD_PASSWORD); | |||||
+ if (cmp != 0) { | |||||
return 0; | |||||
+ } | |||||
+ | |||||
+ authenticated = true; | |||||
return 1; // authenticated | |||||
} | |||||
#ifdef HAVE_ARGP_H | |||||
@@ -200,6 +211,7 @@ static int kbdint_check_response(ssh_ses | |||||
return 0; | |||||
} | |||||
+ authenticated = true; | |||||
return 1; | |||||
} | |||||
@@ -328,7 +340,7 @@ int main(int argc, char **argv){ | |||||
/* proceed to authentication */ | |||||
auth = authenticate(session); | |||||
- if(!auth){ | |||||
+ if (!auth || !authenticated) { | |||||
printf("Authentication error: %s\n", ssh_get_error(session)); | |||||
ssh_disconnect(session); | |||||
return 1; |
@ -0,0 +1,22 @@ | |||||
From 7ad80ba1cc48f7af1f192692d100a6255d97b843 Mon Sep 17 00:00:00 2001 | |||||
From: Andreas Schneider <asn@cryptomilk.org> | |||||
Date: Wed, 24 Oct 2018 19:57:17 +0200 | |||||
Subject: [PATCH 6/8] server: Fix compile error | |||||
Signed-off-by: Andreas Schneider <asn@cryptomilk.org> | |||||
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> | |||||
--- | |||||
src/server.c | 2 +- | |||||
1 file changed, 1 insertion(+), 1 deletion(-) | |||||
--- a/src/server.c | |||||
+++ b/src/server.c | |||||
@@ -976,7 +976,7 @@ int ssh_message_auth_interactive_request | |||||
msg->session->kbdint->prompts = NULL; | |||||
msg->session->kbdint->echo = NULL; | |||||
} | |||||
- msg->session->auth.state = SSH_AUTH_STATE_INFO; | |||||
+ msg->session->auth_state = SSH_AUTH_STATE_INFO; | |||||
return rc; | |||||
} |
@ -0,0 +1,24 @@ | |||||
From 103973215443f6e02e010114a3f7ac19eb6f3c8c Mon Sep 17 00:00:00 2001 | |||||
From: Meng Tan <mtan@wallix.com> | |||||
Date: Thu, 25 Oct 2018 17:06:06 +0200 | |||||
Subject: [PATCH 7/8] gssapi: Set correct state after sending GSSAPI_RESPONSE | |||||
(select mechanism OID) | |||||
Signed-off-by: Meng Tan <mtan@wallix.com> | |||||
Reviewed-by: Andreas Schneider <asn@cryptomilk.org> | |||||
(cherry picked from commit bce8d567053232debd6ec490af5a7d27e1160f39) | |||||
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> | |||||
--- | |||||
src/gssapi.c | 1 + | |||||
1 file changed, 1 insertion(+) | |||||
--- a/src/gssapi.c | |||||
+++ b/src/gssapi.c | |||||
@@ -120,6 +120,7 @@ static int ssh_gssapi_send_response(ssh_ | |||||
ssh_set_error_oom(session); | |||||
return SSH_ERROR; | |||||
} | |||||
+ session->auth_state = SSH_AUTH_STATE_GSSAPI_TOKEN; | |||||
packet_send(session); | |||||
SSH_LOG(SSH_LOG_PACKET, |
@ -0,0 +1,24 @@ | |||||
From 9d5cf209df4c260546e1468cc15fbbbfba3097c6 Mon Sep 17 00:00:00 2001 | |||||
From: Andreas Schneider <asn@cryptomilk.org> | |||||
Date: Sat, 27 Oct 2018 22:15:56 +0200 | |||||
Subject: [PATCH 8/8] libcrypto: Fix memory leak in evp_final() | |||||
Fixes T116 | |||||
Signed-off-by: Andreas Schneider <asn@cryptomilk.org> | |||||
(cherry picked from commit a2807474621e51b386ea26ce2a01d2b1aa295c7b) | |||||
Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk> | |||||
--- | |||||
src/libcrypto.c | 1 + | |||||
1 file changed, 1 insertion(+) | |||||
--- a/src/libcrypto.c | |||||
+++ b/src/libcrypto.c | |||||
@@ -165,6 +165,7 @@ void evp_update(EVPCTX ctx, const void * | |||||
void evp_final(EVPCTX ctx, unsigned char *md, unsigned int *mdlen) | |||||
{ | |||||
EVP_DigestFinal(ctx, md, mdlen); | |||||
+ EVP_MD_CTX_free(ctx); | |||||
} | |||||
#endif | |||||