Re: [TLS] draft-ietf-tls-renegotation: next steps

Marsh Ray <marsh@extendedsubset.com> Wed, 16 December 2009 20:08 UTC

Return-Path: <marsh@extendedsubset.com>
X-Original-To: tls@core3.amsl.com
Delivered-To: tls@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id 8CB323A69D9; Wed, 16 Dec 2009 12:08:57 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.591
X-Spam-Level:
X-Spam-Status: No, score=-2.591 tagged_above=-999 required=5 tests=[AWL=0.008, BAYES_00=-2.599]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id FrmMb+vpd2f5; Wed, 16 Dec 2009 12:08:56 -0800 (PST)
Received: from mho-01-ewr.mailhop.org (mho-01-ewr.mailhop.org [204.13.248.71]) by core3.amsl.com (Postfix) with ESMTP id 779E23A69B5; Wed, 16 Dec 2009 12:08:56 -0800 (PST)
Received: from xs01.extendedsubset.com ([69.164.193.58]) by mho-01-ewr.mailhop.org with esmtpa (Exim 4.68) (envelope-from <marsh@extendedsubset.com>) id 1NL0As-000B0b-1w; Wed, 16 Dec 2009 20:08:42 +0000
Received: from [127.0.0.1] (localhost [127.0.0.1]) by xs01.extendedsubset.com (Postfix) with ESMTP id 8AAD16678; Wed, 16 Dec 2009 20:08:40 +0000 (UTC)
X-Mail-Handler: MailHop Outbound by DynDNS
X-Originating-IP: 69.164.193.58
X-Report-Abuse-To: abuse@dyndns.com (see http://www.dyndns.com/services/mailhop/outbound_abuse.html for abuse reporting information)
X-MHO-User: U2FsdGVkX1/USvuYVD4D80U76pCu6heioE3Im6E0Zzc=
Message-ID: <4B293E48.406@extendedsubset.com>
Date: Wed, 16 Dec 2009 14:08:40 -0600
From: Marsh Ray <marsh@extendedsubset.com>
User-Agent: Thunderbird 2.0.0.23 (Windows/20090812)
MIME-Version: 1.0
To: Eric Rescorla <ekr@networkresonance.com>
References: <808FD6E27AD4884E94820BC333B2DB774F31F17456@NOK-EUMSG-01.mgdnok.nokia.com> <20091216190811.71BF56C823C@kilo.networkresonance.com>
In-Reply-To: <20091216190811.71BF56C823C@kilo.networkresonance.com>
X-Enigmail-Version: 0.96.0
OpenPGP: id=1E36DBF2
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 7bit
Cc: ietf@ietf.org, tls@ietf.org
Subject: Re: [TLS] draft-ietf-tls-renegotation: next steps
X-BeenThere: tls@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: "This is the mailing list for the Transport Layer Security working group of the IETF." <tls.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/tls>, <mailto:tls-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/tls>
List-Post: <mailto:tls@ietf.org>
List-Help: <mailto:tls-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tls>, <mailto:tls-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 16 Dec 2009 20:08:57 -0000

Eric Rescorla wrote:
>
>   It is possible that un-upgraded servers will request that the client
>   renegotiate.  It is RECOMMENDED that clients refuse this
>   renegotiation request.  Clients which do so MUST respond to such
>   requests with a "no_renegotiation" alert [RFC 5246 requires this
>   alert to be at the "warning" level.]  It is possible that the
>   apparently un-upgraded server is in fact an attacker who is then
>   allowing the client to renegotiate with a different, legitimate,
>   upgraded server.  In order to detect this attack, clients which
>   choose to renegotiate MUST provide either the
>   TLS_RENEGO_PROTECTION_REQUEST SCSV or "renegotiation_info" in their
>   ClientHello.  In a legitimate renegotiation with an un-upgraded
>   server, either of these signals will be ignored by the server.
>   However, if the server (incorrectly) fails to ignore extensions,
>   sending the "renegotiation_info" extension may cause a handshake
>   failure.


> Thus, it is permitted, though NOT RECOMMENDED, for the
>   client to simply send the SCSV.  This is the only situation in which
>   clients are permitted to not send the "renegotiation_info" extension
>   in a ClientHello which is used for renegotiation.

This is bad because it greatly complicates the simple definition of the
SCSV as "exactly the same semantics as an empty 'renegotiation_info'
extension". In fact, it tends to convey exactly the message that the
attacker wants "this is an initial handshake".

>   Note that in the case of this downgrade attack attack above, if this
>   is the initial handshake from the server's perspective, then use of
>   the SCSV from the client precludes detection of this attack by the
>   server.  However, the attack will be detected by the client when the
>   server sends an empty "renegotiation_info" extension and the client
>   is expecting one containing the previous verify data.

It doesn't seem very robust to me. A very long chain of things have to
go just so (some even at the option of the attacker) for the client to
detect this attack.

> By contrast,
>   if the client sends the "renegotiation_info" extension, then the
>   server will immediately detect the attack.
> 
> After flip-flopping on this in my head a few times,

You're not the only one. :-)

> however, my
> personal view, is that I think this goes too far in the direction of
> accomodating broken servers.

Not so much that we want to specifically not be accommodating, but this
case introduces complexities and internal contradictions at the expense
of non-crusty clients and servers.

There's also something to be said for specifically declining to
accommodate things in a spec that are already broken twice or thrice
over (depending on which spec you read) in the first place.

It's not even fixing things half-way. It may be fixing things
one-third-way or not at all depending on your philosophy.

IMHO, the IETF shouldn't endorse the making of insecure TLS connections
by attempting to secure them poorly.

In this case, however, the specs should leave enough room for
applications to do that sort of thing on their own if they so choose.
But in doing so, application vendors, admins, and users alike should
know that they are engaging in risky behavior in public. It's visible on
the wire.

> Sending RI in this instance only creates
> an interop problem when a server (1) is doing something we know to be
> really unsafe and (2) can't even ignore extensions correctly. We've
> seen a number of suggestions that we actually forbid renegotiation in
> case (1) and while I suspect WG consensus doesn't go that far, it's not
> clear to me that we need to not only allow it but also compensate for
> servers which are broken in other respects.

> So, my preference would
> be to simply mandate RI with the previous verify_data here as in
> all other cases.

+1 for simplicity and consistency

- Marsh