[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: (ITS#5361) cert verification failures with GnuTLS and DNS subjectAltName



hyc@symas.com wrote:
> Steve Langasek wrote:
>> Given that one of the errors
>> returned by gnutls_x509_crt_get_subject_alt_name() is
>> GNUTLS_E_SHORT_MEMORY_BUFFER, it seems obvious to me that this should use
>> semantics for storage size rather than string length, and the only question
>> in my mind is whether the trailing NUL is included as part of the internal
>> representation of the string.
>>
>> If this is a behavior change as you say, then I guess we need clarification
>> from GnuTLS upstream about whether this is intentional.

Yes. I've just tested with GnuTLS 2.2.1 and 2.3.0 and see the same result 
you're seeing. The change is here:
http://git.savannah.gnu.org/gitweb/?p=gnutls.git;a=commitdiff;h=deaa3ac31c2e83c292562ab66c1817c7ebc27048

and it is clearly a bug, since subjectAltName's are not necessarily strings. 
(E.g., they can also be IP addresses, which are just 4 or 16 octets.) If you 
notice in the diff, they set
	 *name_size = len + 1;
and then later
	name[len] = 0;
but this occurs *after* the check for SHORT_MEMORY_BUFFER. So in fact they can 
cause a write past the end of the supplied buffer.

This patch should be reverted, it is clearly wrong.
-- 
   -- Howard Chu
   Chief Architect, Symas Corp.  http://www.symas.com
   Director, Highland Sun        http://highlandsun.com/hyc/
   Chief Architect, OpenLDAP     http://www.openldap.org/project/