IETF-SSH archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: OpenSSH bug in decoding EXT_INFO extension values



I appreciate the acknowledgment. I will plan accordingly. Thank you!
 
My attitude does stink. I’m afraid this comes from frustration with your work over the past 17 years.
 
This will seem unfair to you because you value your work on the basis of what good it does.
 
Your work does a lot of good. It is a security-conscious project, with a quality of implementation that exceeds at least half of commercial implementations. It makes a difference in day to day lives for millions of users. It improves the overall security of the internet. Its open source nature is a valuable counterweight that helps keep in reign IP encroachment by commercial implementations.
 
I could be cynical, and say that “one gets what one pays for”. This would be partly true, in ways you might not be aware of. But it would also be fundamentally unfair, because the value of your work is much more than anyone pays.
 
I don’t know about your circumstance. I don’t know if you are adequately compensated for the work you do by some benevolent benefactor. It is possible that you are not, and if you’re not, I consider this a significant unfairness. If this is the case, it’s an unfairness you have chosen, but it’s unfair nevertheless.
 
All of this being said – although I can praise your project in all these respects, and I can consider it better than a number of commercial implementations;
 
and although the very fact that I can have this conversation with you is meaningful, and valuable; it is more than is possible in many cases, and I do not take it for granted;
 
all of these things being said...
 
I am another implementor who is not part of your project; and therefore does not have influence.
 
So when you do things in your project that are short-sighted; or are poorly planned; or do not consider the impact on others; in such cases, I am impacted.
 
And because I do not have control; my reaction is not “OK, so this looks like a mistake. Everyone makes mistakes. These guys are doing valuable work for free. The world should be thankful for their efforts.” My reaction instead is: “OMG, these open source developers again, and what passes their threshold for quality work.”
 
This is partly unfair, because as I’ve said, your work is actually better than 50% of commercial implementations. That is without counting those implementations that are actually ripping off from your work. :)
 
But I hold you to a higher standard, and that’s not despite your work being free, but because it is free, and therefore popular. I feel that with the market position you have, comes great responsibility.
 
And the reason I’m peeved is because I feel that the problem is not accidental, but systemic. If you participate in an open source project as long as you do, you’re not just giving the world a freebie. You are writing the code for a principle. If your aim is to serve a principle; and your software becomes overwhelmingly popular because people see and recognize your commitment; then you are also taking on responsibility.
 
And when you do that, I am then peeved if you simultaneously abrogate this responsibility, by developing, planning, and designing sloppily.
 
If you’re going to uphold a principle, then uphold a great principle, dammit. Do excellent work. Don’t be satisfied with adequate. :)
 
Again, I have no idea how this is experienced on your end. And yes – your code is still better than many.
 
And it’s better, and more responsible, and your development process is more responsive, than commercial companies have been in similar leading market positions.
 
denis
 
 
Sent: Tuesday, June 13, 2017 05:11
Subject: Re: OpenSSH bug in decoding EXT_INFO extension values
 
Yes, this is a bug in OpenSSH.

Yes, we'll fix it for 7.6.

Yes, your attitude and approach stinks.

On Mon, 12 Jun 2017, denis bider (Bitvise) wrote:

> Bad news, everyone.
>
> Again - there’s a bug in OpenSSH that’s now widely deployed, and will require
> workarounds to coexist with.
>
> OpenSSH implements EXT_INFO. Excellent. Very nice. I'm grateful. Thank you.
>
> But it does so incorrectly.
>
> Suppose that a server sends the "delay-compression" extension to an OpenSSH
> client.
>
> The client disconnects, without attempting to authenticate, as soon as it sees
> the extension's encoding.
>
> It disconnects due to this choice of function in kex_input_ext_info:
>
>
> if ((r = sshpkt_get_cstring(ssh, &val, NULL)) != 0) {
>    free(name);
>    return r;
> }
>
>
> This is an incorrect function to use for the extension value, because it
> contains the following logic:
>
>
> /* Allow a \0 only at the end of the string */
> if (len > 0 &&
>    (z = memchr(p , '\0', len)) != NULL && z < p + len - 1) {
>    SSHBUF_DBG(("SSH_ERR_INVALID_FORMAT"));
>    return SSH_ERR_INVALID_FORMAT;
> }
>
>
> THIS IS NOT CORRECT LOGIC TO USE WHEN PROCESSING AN UNKNOWN EXTENSION VALUE,
> OF UNKNOWN FORMAT, WHERE THERE'S NO GUARANTEE IT WON'T CONTAIN ZEROS!
>
> The value for the “delay-compression” extension, in particular, contains
> zeros.
>
> The whole extension is defined as follows:
>
>
> string         "delay-compression"
> string:
>  name-list    compression_algorithms_client_to_server
>  name-list    compression_algorithms_server_to_client
>
>
> Obviously, the lengths of both name-lists will have zeros, which will appear
> right at the start of the value.
>
> So we implement an extension mechanism - and once again, it cannot be used
> with OpenSSH, because it deploys a fundamentally botched implementation.
>
> Remember - the reason this "delay-compression" extension exists IN THE FIRST
> PLACE is that OpenSSH botched its delayed compression; designing it with a
> built-in, unescapable race condition.
>
> God dammit, guys. God dammit.
>
> What should I do with this?
>
> Not send "delay-compression" to OpenSSH versions up to 7.5?
>
> Or not send it to ANY OpenSSH version?
>
> denis
>
>
>


Home | Main Index | Thread Index | Old Index