aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/patches/libssh-CVE-2014-0017.patch
blob: 94d8cc33d2dbeeb2d849f0df07cf88736ea733f7 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
Patch from libssh 0.6, with bind.c hunk adjusted for 0.5.5.

From e99246246b4061f7e71463f8806b9dcad65affa0 Mon Sep 17 00:00:00 2001
From: Aris Adamantiadis <aris@0xbadc0de.be>
Date: Wed, 05 Feb 2014 20:24:12 +0000
Subject: security: fix for vulnerability CVE-2014-0017

When accepting a new connection, a forking server based on libssh forks
and the child process handles the request. The RAND_bytes() function of
openssl doesn't reset its state after the fork, but simply adds the
current process id (getpid) to the PRNG state, which is not guaranteed
to be unique.
This can cause several children to end up with same PRNG state which is
a security issue.
---
diff --git a/include/libssh/wrapper.h b/include/libssh/wrapper.h
index 7374a88..e8ff32c 100644
--- a/include/libssh/wrapper.h
+++ b/include/libssh/wrapper.h
@@ -70,5 +70,6 @@ int crypt_set_algorithms_server(ssh_session session);
 struct ssh_crypto_struct *crypto_new(void);
 void crypto_free(struct ssh_crypto_struct *crypto);
 
+void ssh_reseed(void);
 
 #endif /* WRAPPER_H_ */
diff --git a/src/bind.c b/src/bind.c
index 8d82d0d..03d3403 100644
--- a/src/bind.c
+++ b/src/bind.c
@@ -375,6 +375,8 @@ int ssh_bind_accept(ssh_bind sshbind, ss
   session->dsa_key = dsa;
   session->rsa_key = rsa;
 
+  /* force PRNG to change state in case we fork after ssh_bind_accept */
+  ssh_reseed();
   return SSH_OK;
 }
 
diff --git a/src/libcrypto.c b/src/libcrypto.c
index bb1d96a..d8cc795 100644
--- a/src/libcrypto.c
+++ b/src/libcrypto.c
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
+#include <sys/time.h>
 
 #include "libssh/priv.h"
 #include "libssh/session.h"
@@ -38,6 +39,8 @@
 #include <openssl/rsa.h>
 #include <openssl/hmac.h>
 #include <openssl/opensslv.h>
+#include <openssl/rand.h>
+
 #ifdef HAVE_OPENSSL_AES_H
 #define HAS_AES
 #include <openssl/aes.h>
@@ -74,6 +77,12 @@ static int alloc_key(struct ssh_cipher_struct *cipher) {
     return 0;
 }
 
+void ssh_reseed(void){
+    struct timeval tv;
+    gettimeofday(&tv, NULL);
+    RAND_add(&tv, sizeof(tv), 0.0);
+}
+
 SHACTX sha1_init(void) {
   SHACTX c = malloc(sizeof(*c));
   if (c == NULL) {
diff --git a/src/libgcrypt.c b/src/libgcrypt.c
index 899bccd..4617901 100644
--- a/src/libgcrypt.c
+++ b/src/libgcrypt.c
@@ -45,6 +45,9 @@ static int alloc_key(struct ssh_cipher_struct *cipher) {
     return 0;
 }
 
+void ssh_reseed(void){
+	}
+
 SHACTX sha1_init(void) {
   SHACTX ctx = NULL;
   gcry_md_open(&ctx, GCRY_MD_SHA1, 0);
--
cgit v0.9.1
self-contained-tarball"): Skip unconditionally. Ludovic Courtès 2018-06-01pack: Adjust test to expect relative symlinks....Reported by Chris Marusich <cmmarusich@gmail.com>. Fixes <https://bugs.gnu.org/31560>. * tests/pack.scm ("self-contained-tarball"): Rename 'guile' to 'bin'. Expect 'bin/Guile' to be a relative symlink. Ludovic Courtès 2018-06-01tests: Fix arguments in pack test....This is a follow-up to commit 5ffac538aa604b71814ac74579626f0d3110b96e. * tests/pack.scm (self-contained-tarball): Adjust arguments to "self-contained-tarball". Ricardo Wurmus 2017-03-22tests: Skip 'guix pack' test when networking is unavailable....* tests/pack.scm ("self-contained-tarball"): Skip unless (network-reachable?). Ludovic Courtès 2017-03-17pack: Move absolute file name to <compressor>....* guix/scripts/pack.scm (<compressor>)[package]: Remove. [command]: Document as being a gexp with an absolute file name. (%compressors): Adjust accordingly. (self-contained-tarball): Simplify PATH expression. Move 'string-join' for the compressor command on the build side. (docker-image): Simplify PATH expression. * tests/pack.scm (%gzip-compressor): Adjust accordingly. Ludovic Courtès 2017-03-14pack: Add unit test....* guix/scripts/pack.scm (self-contained-tarball): Add #:tar option. [build](tar-supports-sort?): New variable. Use it. * tests/pack.scm: New file. * Makefile.am (SCM_TESTS): Add it. Ludovic Courtès