Fix GSSAPI Key Exchange for older clients (#1323622)
Failed with older clients, because server was doing signature over different data than the verifying client. It was caused by bump of minimal DH groups offered by server and a bug in code, which was using max(client_min, server_min) instead of client_min as proposed by RFC4462.
This commit is contained in:
		
							parent
							
								
									bda184b249
								
							
						
					
					
						commit
						fc0cf7f8d5
					
				| @ -2739,3 +2739,41 @@ diff -up openssh-7.2p1/sshkey.h.gsskex openssh-7.2p1/sshkey.h | ||||
|  	KEY_UNSPEC | ||||
|  }; | ||||
|   | ||||
| diff --git a/kexgsss.c b/kexgsss.c
 | ||||
| index b2f9658..2d33ff7 100644
 | ||||
| --- a/kexgsss.c
 | ||||
| +++ b/kexgsss.c
 | ||||
| @@ -69,6 +69,7 @@ kexgss_server(struct ssh *ssh)
 | ||||
|  	u_char *kbuf; | ||||
|  	DH *dh; | ||||
|  	int min = -1, max = -1, nbits = -1; | ||||
| +	int cmin = -1, cmax = -1; /* client proposal */
 | ||||
|  	BIGNUM *shared_secret = NULL; | ||||
|  	BIGNUM *dh_client_pub = NULL; | ||||
|  	int type = 0; | ||||
| @@ -107,11 +108,12 @@ kexgss_server(struct ssh *ssh)
 | ||||
|  	case KEX_GSS_GEX_SHA1: | ||||
|  		debug("Doing group exchange"); | ||||
|  		packet_read_expect(SSH2_MSG_KEXGSS_GROUPREQ); | ||||
| -		min = packet_get_int();
 | ||||
| +		/* store client proposal to provide valid signature */
 | ||||
| +		cmin = packet_get_int();
 | ||||
|  		nbits = packet_get_int(); | ||||
| -		max = packet_get_int();
 | ||||
| -		min = MAX(DH_GRP_MIN, min);
 | ||||
| -		max = MIN(DH_GRP_MAX, max);
 | ||||
| +		cmax = packet_get_int();
 | ||||
| +		min = MAX(DH_GRP_MIN, cmin);
 | ||||
| +		max = MIN(DH_GRP_MAX, cmax);
 | ||||
|  		packet_check_eom(); | ||||
|  		if (max < min || nbits < min || max < nbits) | ||||
|  			fatal("GSS_GEX, bad parameters: %d !< %d !< %d", | ||||
| @@ -234,7 +236,7 @@ kexgss_server(struct ssh *ssh)
 | ||||
|  		    buffer_ptr(ssh->kex->peer), buffer_len(ssh->kex->peer), | ||||
|  		    buffer_ptr(ssh->kex->my), buffer_len(ssh->kex->my), | ||||
|  		    NULL, 0, | ||||
| -		    min, nbits, max,
 | ||||
| +		    cmin, nbits, cmax,
 | ||||
|  		    dh->p, dh->g, | ||||
|  		    dh_client_pub, | ||||
|  		    dh->pub_key, | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user