* gnu/packages/patches/libssh-CVE-2014-0017.patch: Delete file. * gnu/packages/patches/libssh-0.6.5-CVE-2016-0739.patch: New file. * gnu-system.am (dist_patch_DATA): Adjust accordingly. * gnu/packages/ssh.scm (libssh): Update to 0.7.3. (libssh-0.5): Rename to... (libssh-0.6): ... this. Update to 0.6.5. [source]: Add patch for CVE-2016-0739. (guile-ssh)[inputs]: Use libssh-0.6. Modified-By: Mark H Weaver <mhw@netris.org>
		
			
				
	
	
		
			77 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
Fix CVE-2016-0739 (Weak Diffie-Hellman secret generation in
 | 
						|
dh_generate_x() and dh_generate_y()).
 | 
						|
 | 
						|
"Due to a byte/bit confusion, the DH secret was too short. This file was
 | 
						|
completely reworked and will be commited in a future version."
 | 
						|
Source:
 | 
						|
https://git.libssh.org/projects/libssh.git/commit/?id=f8d0026c65fc8a55748ae481758e2cf376c26c86
 | 
						|
 | 
						|
This patch was created by upstream for libssh-0.7.3, but applied without
 | 
						|
modification to libssh-0.6.3 by Debian. In Guix, we apply it without
 | 
						|
modification to libssh-0.6.5.
 | 
						|
 | 
						|
References:
 | 
						|
https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2016-0739
 | 
						|
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-0739
 | 
						|
https://security-tracker.debian.org/tracker/CVE-2016-0739
 | 
						|
 | 
						|
---
 | 
						|
 src/dh.c | 22 +++++++++++++++++-----
 | 
						|
 1 file changed, 17 insertions(+), 5 deletions(-)
 | 
						|
 | 
						|
diff --git a/src/dh.c b/src/dh.c
 | 
						|
index e489a1d..d27b66e 100644
 | 
						|
--- a/src/dh.c
 | 
						|
+++ b/src/dh.c
 | 
						|
@@ -227,15 +227,21 @@ void ssh_crypto_finalize(void) {
 | 
						|
 }
 | 
						|
 
 | 
						|
 int dh_generate_x(ssh_session session) {
 | 
						|
+  int keysize;
 | 
						|
+  if (session->next_crypto->kex_type == SSH_KEX_DH_GROUP1_SHA1) {
 | 
						|
+    keysize = 1023;
 | 
						|
+  } else {
 | 
						|
+    keysize = 2047;
 | 
						|
+  }
 | 
						|
   session->next_crypto->x = bignum_new();
 | 
						|
   if (session->next_crypto->x == NULL) {
 | 
						|
     return -1;
 | 
						|
   }
 | 
						|
 
 | 
						|
 #ifdef HAVE_LIBGCRYPT
 | 
						|
-  bignum_rand(session->next_crypto->x, 128);
 | 
						|
+  bignum_rand(session->next_crypto->x, keysize);
 | 
						|
 #elif defined HAVE_LIBCRYPTO
 | 
						|
-  bignum_rand(session->next_crypto->x, 128, 0, -1);
 | 
						|
+  bignum_rand(session->next_crypto->x, keysize, -1, 0);
 | 
						|
 #endif
 | 
						|
 
 | 
						|
   /* not harder than this */
 | 
						|
@@ -248,15 +254,21 @@ int dh_generate_x(ssh_session session) {
 | 
						|
 
 | 
						|
 /* used by server */
 | 
						|
 int dh_generate_y(ssh_session session) {
 | 
						|
-    session->next_crypto->y = bignum_new();
 | 
						|
+  int keysize;
 | 
						|
+  if (session->next_crypto->kex_type == SSH_KEX_DH_GROUP1_SHA1) {
 | 
						|
+    keysize = 1023;
 | 
						|
+  } else {
 | 
						|
+    keysize = 2047;
 | 
						|
+  }
 | 
						|
+  session->next_crypto->y = bignum_new();
 | 
						|
   if (session->next_crypto->y == NULL) {
 | 
						|
     return -1;
 | 
						|
   }
 | 
						|
 
 | 
						|
 #ifdef HAVE_LIBGCRYPT
 | 
						|
-  bignum_rand(session->next_crypto->y, 128);
 | 
						|
+  bignum_rand(session->next_crypto->y, keysize);
 | 
						|
 #elif defined HAVE_LIBCRYPTO
 | 
						|
-  bignum_rand(session->next_crypto->y, 128, 0, -1);
 | 
						|
+  bignum_rand(session->next_crypto->y, keysize, -1, 0);
 | 
						|
 #endif
 | 
						|
 
 | 
						|
   /* not harder than this */
 | 
						|
-- 
 | 
						|
cgit v0.12
 | 
						|
 |