- fix three security issues in gnutls handshake - GNUTLS-SA-2008-1
(#447461, #447462, #447463)
This commit is contained in:
		
							parent
							
								
									0c2a289f4e
								
							
						
					
					
						commit
						7eaa87392c
					
				
							
								
								
									
										98
									
								
								gnutls-1.4.1-sa-2008-1.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								gnutls-1.4.1-sa-2008-1.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,98 @@ | |||||||
|  | diff -up gnutls-1.4.1/lib/ext_server_name.c.sa-2008-1 gnutls-1.4.1/lib/ext_server_name.c
 | ||||||
|  | --- gnutls-1.4.1/lib/ext_server_name.c.sa-2008-1	2006-03-08 11:44:59.000000000 +0100
 | ||||||
|  | +++ gnutls-1.4.1/lib/ext_server_name.c	2008-05-20 09:52:13.000000000 +0200
 | ||||||
|  | @@ -74,10 +74,27 @@ _gnutls_server_name_recv_params (gnutls_
 | ||||||
|  |  	  len = _gnutls_read_uint16 (p); | ||||||
|  |  	  p += 2; | ||||||
|  |   | ||||||
|  | -	  DECR_LENGTH_RET (data_size, len, 0);
 | ||||||
|  | -	  server_names++;
 | ||||||
|  | +	  if (len > 0)
 | ||||||
|  | +	    {
 | ||||||
|  | +	      DECR_LENGTH_RET (data_size, len, 0);
 | ||||||
|  | +	      server_names++;
 | ||||||
|  | +	      p += len;
 | ||||||
|  | +	    }
 | ||||||
|  | +	  else
 | ||||||
|  | +	    _gnutls_handshake_log
 | ||||||
|  | +	      ("HSK[%x]: Received zero size server name (under attack?)\n",
 | ||||||
|  | +	       session);
 | ||||||
|  |   | ||||||
|  | -	  p += len;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +      /* we cannot accept more server names.
 | ||||||
|  | +       */
 | ||||||
|  | +      if (server_names > MAX_SERVER_NAME_EXTENSIONS)
 | ||||||
|  | +	{
 | ||||||
|  | +	  _gnutls_handshake_log
 | ||||||
|  | +	    ("HSK[%x]: Too many server names received (under attack?)\n",
 | ||||||
|  | +	     session);
 | ||||||
|  | +	  server_names = MAX_SERVER_NAME_EXTENSIONS;
 | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  |        session->security_parameters.extensions.server_names_size = | ||||||
|  | @@ -85,10 +102,6 @@ _gnutls_server_name_recv_params (gnutls_
 | ||||||
|  |        if (server_names == 0) | ||||||
|  |  	return 0;		/* no names found */ | ||||||
|  |   | ||||||
|  | -      /* we cannot accept more server names.
 | ||||||
|  | -       */
 | ||||||
|  | -      if (server_names > MAX_SERVER_NAME_EXTENSIONS)
 | ||||||
|  | -	server_names = MAX_SERVER_NAME_EXTENSIONS;
 | ||||||
|  |   | ||||||
|  |        p = data + 2; | ||||||
|  |        for (i = 0; i < server_names; i++) | ||||||
|  | diff -up gnutls-1.4.1/lib/gnutls_handshake.c.sa-2008-1 gnutls-1.4.1/lib/gnutls_handshake.c
 | ||||||
|  | --- gnutls-1.4.1/lib/gnutls_handshake.c.sa-2008-1	2006-04-17 18:32:16.000000000 +0200
 | ||||||
|  | +++ gnutls-1.4.1/lib/gnutls_handshake.c	2008-05-20 09:52:13.000000000 +0200
 | ||||||
|  | @@ -929,6 +929,14 @@ _gnutls_recv_handshake_header (gnutls_se
 | ||||||
|  |   | ||||||
|  |        *recv_type = session->internals.handshake_header_buffer.recv_type; | ||||||
|  |   | ||||||
|  | +      if (*recv_type != type)
 | ||||||
|  | +	{
 | ||||||
|  | +	  gnutls_assert ();
 | ||||||
|  | +	  _gnutls_handshake_log
 | ||||||
|  | +	    ("HSK[%x]: Handshake type mismatch (under attack?)\n", session);
 | ||||||
|  | +	  return GNUTLS_E_UNEXPECTED_HANDSHAKE_PACKET;
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  |        return session->internals.handshake_header_buffer.packet_length; | ||||||
|  |      } | ||||||
|  |   | ||||||
|  | diff -up gnutls-1.4.1/lib/gnutls_cipher.c.sa-2008-1 gnutls-1.4.1/lib/gnutls_cipher.c
 | ||||||
|  | --- gnutls-1.4.1/lib/gnutls_cipher.c.sa-2008-1	2006-03-08 11:44:59.000000000 +0100
 | ||||||
|  | +++ gnutls-1.4.1/lib/gnutls_cipher.c	2008-05-20 09:52:48.000000000 +0200
 | ||||||
|  | @@ -445,7 +445,6 @@ _gnutls_ciphertext2compressed (gnutls_se
 | ||||||
|  |        return GNUTLS_E_INTERNAL_ERROR; | ||||||
|  |      } | ||||||
|  |   | ||||||
|  | -
 | ||||||
|  |    /* actual decryption (inplace) | ||||||
|  |     */ | ||||||
|  |    switch (_gnutls_cipher_is_block | ||||||
|  | @@ -496,17 +495,20 @@ _gnutls_ciphertext2compressed (gnutls_se
 | ||||||
|  |   | ||||||
|  |        pad = ciphertext.data[ciphertext.size - 1] + 1;	/* pad */ | ||||||
|  |   | ||||||
|  | -      length = ciphertext.size - hash_size - pad;
 | ||||||
|  | -
 | ||||||
|  | -      if (pad > ciphertext.size - hash_size)
 | ||||||
|  | +      if ((int)pad > (int)ciphertext.size - hash_size)
 | ||||||
|  |  	{ | ||||||
|  |  	  gnutls_assert (); | ||||||
|  | +	  _gnutls_record_log
 | ||||||
|  | +	    ("REC[%x]: Short record length %d > %d - %d (under attack?)\n",
 | ||||||
|  | +	     session, pad, ciphertext.size, hash_size);
 | ||||||
|  |  	  /* We do not fail here. We check below for the | ||||||
|  |  	   * the pad_failed. If zero means success. | ||||||
|  |  	   */ | ||||||
|  |  	  pad_failed = GNUTLS_E_DECRYPTION_FAILED; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | +      length = ciphertext.size - hash_size - pad;
 | ||||||
|  | +
 | ||||||
|  |        /* Check the pading bytes (TLS 1.x) | ||||||
|  |         */ | ||||||
|  |        if (ver >= GNUTLS_TLS1 && pad_failed == 0) | ||||||
| @ -1,7 +1,7 @@ | |||||||
| Summary: A TLS protocol implementation | Summary: A TLS protocol implementation | ||||||
| Name: gnutls | Name: gnutls | ||||||
| Version: 2.0.4 | Version: 2.0.4 | ||||||
| Release: 2%{?dist} | Release: 3%{?dist} | ||||||
| # The libgnutls library is LGPLv2+, utilities and remaining libraries are GPLv2+ | # The libgnutls library is LGPLv2+, utilities and remaining libraries are GPLv2+ | ||||||
| License: GPLv2+ and LGPLv2+ | License: GPLv2+ and LGPLv2+ | ||||||
| Group: System Environment/Libraries | Group: System Environment/Libraries | ||||||
| @ -15,6 +15,7 @@ URL: http://www.gnutls.org/ | |||||||
| Source0: %{name}-%{version}-nosrp.tar.bz2 | Source0: %{name}-%{version}-nosrp.tar.bz2 | ||||||
| Source1: libgnutls-config | Source1: libgnutls-config | ||||||
| Patch0: gnutls-2.0.4-nosrp.patch | Patch0: gnutls-2.0.4-nosrp.patch | ||||||
|  | Patch4: gnutls-1.4.1-sa-2008-1.patch | ||||||
| 
 | 
 | ||||||
| BuildRoot:  %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) | BuildRoot:  %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) | ||||||
| Requires: libgcrypt >= 1.2.2 | Requires: libgcrypt >= 1.2.2 | ||||||
| @ -56,6 +57,7 @@ manipulation tools. | |||||||
| %prep | %prep | ||||||
| %setup -q | %setup -q | ||||||
| %patch0 -p1 -b .nosrp | %patch0 -p1 -b .nosrp | ||||||
|  | %patch4 -p1 -b .sa-2008-1 | ||||||
| 
 | 
 | ||||||
| for i in auth_srp_rsa.c auth_srp_sb64.c auth_srp_passwd.c auth_srp.c gnutls_srp.c ext_srp.c; do | for i in auth_srp_rsa.c auth_srp_sb64.c auth_srp_passwd.c auth_srp.c gnutls_srp.c ext_srp.c; do | ||||||
|     touch lib/$i |     touch lib/$i | ||||||
| @ -124,6 +126,10 @@ fi | |||||||
| %{_mandir}/man1/* | %{_mandir}/man1/* | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Tue May 20 2008 Tomas Mraz <tmraz@redhat.com> 2.0.4-3 | ||||||
|  | - fix three security issues in gnutls handshake - GNUTLS-SA-2008-1 | ||||||
|  |   (#447461, #447462, #447463) | ||||||
|  | 
 | ||||||
| * Mon Feb  4 2008 Joe Orton <jorton@redhat.com> 2.0.4-2 | * Mon Feb  4 2008 Joe Orton <jorton@redhat.com> 2.0.4-2 | ||||||
| - use system libtasn1 | - use system libtasn1 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user