Re: [TLS] simplistic renego protection

Marsh Ray <marsh@extendedsubset.com> Mon, 16 November 2009 19:06 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 32B5B3A69E5 for <tls@core3.amsl.com>; Mon, 16 Nov 2009 11:06:59 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.191
X-Spam-Level:
X-Spam-Status: No, score=-2.191 tagged_above=-999 required=5 tests=[AWL=0.408, 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 JfycCuk7t7Hg for <tls@core3.amsl.com>; Mon, 16 Nov 2009 11:06:58 -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 58E603A694E for <tls@ietf.org>; Mon, 16 Nov 2009 11:06:58 -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 1NA6ue-000P0n-NN for tls@ietf.org; Mon, 16 Nov 2009 19:06:56 +0000
Received: from [127.0.0.1] (localhost [127.0.0.1]) by xs01.extendedsubset.com (Postfix) with ESMTP id D7872667C for <tls@ietf.org>; Mon, 16 Nov 2009 19:06:55 +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: U2FsdGVkX199RyoGTyJmqRGeOggqcHdViGAyTLAc+qA=
Message-ID: <4B01A2CB.4060404@extendedsubset.com>
Date: Mon, 16 Nov 2009 13:06:51 -0600
From: Marsh Ray <marsh@extendedsubset.com>
User-Agent: Thunderbird 2.0.0.23 (Windows/20090812)
MIME-Version: 1.0
To: "tls >> \"tls@ietf.org\"" <tls@ietf.org>
References: <200911161029.nAGAT8uN019401@fs4113.wdf.sap.corp> <4B01923F.9020806@pobox.com> <4B019434.9020001@extendedsubset.com> <4B019BC7.2080201@pobox.com>
In-Reply-To: <4B019BC7.2080201@pobox.com>
X-Enigmail-Version: 0.96.0
OpenPGP: id=1E36DBF2
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 7bit
Subject: Re: [TLS] simplistic renego protection
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: Mon, 16 Nov 2009 19:06:59 -0000

Michael D'Errico wrote:
> If a client doesn't check the server's certificate, it is subject to
> any man-in-the-middle attack.

I was going to give the example of an anonymous server and an
authenticated client, but it seems prohibited by the spec: "Anonymous
servers cannot authenticate clients".

Nevertheless, it could be done with anonymous connections in which the
client retro-actively authenticates the server. One sees this kind of
thing in sample code all the time.

> One of the requirements is that a client
> verify the certificate.

Read closely:
>  If the server is authenticated,
>    its certificate message must provide a valid certificate chain
>    leading to an acceptable certificate authority.  Similarly,
>    authenticated clients must supply an acceptable certificate to the
>    server. Each party is responsible for verifying that the other's
>    certificate is valid and has not expired or been revoked.

It requires that the endpoints _validate_ the cert chain. I haven't
found where the spec says the certs have to be the right ones.

Indeed it seems that a common application error is to hand the TLS
library an open socket and let it validate whatever cert shows up from
the server. Another form of "authentication gap" perhaps?

> If a client doesn't do that, how can we
> possibly protect it???

By restoring the application-API guarantee that was lost when
renegotition was added to ssl: both ends know they are talking to the
same part during the entire connection, even if some of the sessions
have one or more anonymous endpoints.

> I'm interested in providing the best defense to a client that is aware
> of the MITM renegotiation problem when faced with having to interact
> with possibly-unpatched servers.

Definitely. Also the best defense to patched servers talking to
unpatched clients, with or without renegotiation.

- Marsh