There is an outstanding pull request to resolve this security issue in a 
different way than the initial commit; unfortunately I’m not well versed enough 
in the intricacies of DH to conclude if it’s a good patch or not.  

I did contact Daniel about making the group_order * 8 - 1 change in the SHA1 
function the day the security bulletin was posted and he agreed it needed to be 
done; but apparently no one has actually committed the change.  I have 
submitted a pull request with the original fix ported to the SHA1 method which 
is identical to the fedora patch.

Regards,
Will

> On Apr 7, 2016, at 1:17 AM, Kamil Dudka <kdu...@redhat.com> wrote:
> 
> On Wednesday 06 April 2016 15:08:41 Cody P Schafer wrote:
>> I was looking into CVE-2016-0787 (bits vs bytes confusion within dh
>> exponent generation) and noted that someone had taken a look at the
>> code and commented on the github commit:
>> https://github.com/libssh2/libssh2/commit/ca5222ea819cc5ed797860070b4c6c1aee
>> b28420
>> 
>> After some examination myself, it appears that diffie_hellman_sha1 is
>> vulnerable to the same issue that diffie_hellman_sha256 was vulnerable
>> to, and there are other issues with private exponent generation that
>> should be examined.
> 
> Yes, this seems to be a known issue:
> 
>    https://www.libssh2.org/mail/libssh2-devel-archive-2016-02/0029.shtml
> 
> In Fedora we apply the following patch on top of libssh2-1.7.0:
> 
>    
> http://pkgs.fedoraproject.org/cgit/rpms/libssh2.git/tree/CVE-2016-0787.patch?id=2d448ce0
> 
> Daniel, should we apply the patch upstream, too?
> 
> I know there are some outstanding issues reported in the above thread but
> they should IMO not prevent this one-liner from being applied as such.
> 
> Kamil
> 
>> I'm including the comments from github below for posterity:
>> 
>> yumkam commented on ca5222e on Feb 23:
>>> Something feels eerily wrong here.
>>> 1) compare diffie_hellman_sha1 and diffie_hellman_sha256; is not there
>>> exactly same problem in sha1 variant? 2) if I was not mistaken, this is
>>> generation of "private exponent"; but "private exponent" need not be as
>>> large as group order! Normal size is "twice as generated key material",
>>> something from 256 bits to 512 bits for usual symmetric algos and key
>>> sizes, see rfc4419 section 6.2 (Private exponent) [1]. That is, it was,
>>> indeed, about 2 times too small before (and still wrong for
>>> diffie_hellman_sha1?), but it is more than 4 times too large now. (Well,
>>> at least later is only performance issue). Disclaimer: I'm not real
>>> cryptographer, but only playing one.
>>> P.S. openssh uses
>>> min(2*max(symmetric_{key,iv,block,mac}_in_bits),p_bits-1)
>> 
>> yumkam commented on ca5222e on Feb 23:
>>> Also, for diffie-hellman-group-exchange-*, if p_bits+1 is not multiply of
>>> 8, group_order*8 can be larger than p_bits (by up to 7 bits); thus,
>>> generated group_order*8-1-bit random value x can fail 1 < x < (p-1)/2
>>> test, see rfc4419[2]
>> [1]: https://tools.ietf.org/html/rfc4419#section-6.2
>> [2]: https://tools.ietf.org/html/rfc4419#section-3
>> 
>> Checking the code in git today shows the same flaws noted in those
>> comments still exist.
>> 
>> _______________________________________________
>> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
> 
> _______________________________________________
> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel


_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

Reply via email to