Re: [TLS] simplistic renego protection

Martin Rex <mrex@sap.com> Sun, 22 November 2009 02:24 UTC

Return-Path: <mrex@sap.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 C73723A68E1 for <tls@core3.amsl.com>; Sat, 21 Nov 2009 18:24:36 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.11
X-Spam-Level:
X-Spam-Status: No, score=-6.11 tagged_above=-999 required=5 tests=[AWL=0.139, BAYES_00=-2.599, HELO_EQ_DE=0.35, RCVD_IN_DNSWL_MED=-4]
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 eUoqMuZDSsnB for <tls@core3.amsl.com>; Sat, 21 Nov 2009 18:24:36 -0800 (PST)
Received: from smtpde03.sap-ag.de (smtpde03.sap-ag.de [155.56.68.140]) by core3.amsl.com (Postfix) with ESMTP id B87183A683D for <tls@ietf.org>; Sat, 21 Nov 2009 18:24:35 -0800 (PST)
Received: from mail.sap.corp by smtpde03.sap-ag.de (26) with ESMTP id nAM2OTF5012424 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sun, 22 Nov 2009 03:24:29 +0100 (MET)
From: Martin Rex <mrex@sap.com>
Message-Id: <200911220224.nAM2OSYD011390@fs4113.wdf.sap.corp>
To: stefan@aaa-sec.com
Date: Sun, 22 Nov 2009 03:24:28 +0100
In-Reply-To: <C72E1052.6851%stefan@aaa-sec.com> from "Stefan Santesson" at Nov 21, 9 09:46:58 pm
MIME-Version: 1.0
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit
X-Scanner: Virus Scanner virwal06
X-SAP: out
Cc: tls@ietf.org
Subject: Re: [TLS] simplistic renego protection
X-BeenThere: tls@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
Reply-To: mrex@sap.com
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: Sun, 22 Nov 2009 02:24:36 -0000

Stefan Santesson wrote:
> 
> What I claim is that it is possible to design an application that
> use channel binding to keep itself safe from this attack.
> All it needs to do is to make sure that it's state is reset
> after completed channel binding.
> 
> The fact that it is possible to be safe despite this vulnerability is an
> argument that lenient servers should be supported in the solution.
> 
> If I analyze my application and determine that it is safe from the attack,
> then I could just allow gradual upgrades and stay lenient.

If it just was that easy.

In addition to the TLS renegotiation vulnerability there may
be unexpected consequences of the architecture of the API
that is used between the TLS implementation and the application.


The particular problem with HTTP is, that it does not authenticate
the request as first thing in the protocol when Cookie-based
or basic authentication is used, which makes that particular
attack successful.

When TLS client-certs are used it may actually become _a_lot_worse_
because the TLS authentication is not tied to a specific
request, but instead is supposed to authenticate the entire channel
and all data that travels it.  Here is where HTTP 1.1
Connection: Keep-alive significantly expands an attackers options.


If no client-certs are used and the authentication is performed
inside the application data as the first thing in the request,
then this app might not be vulnerable.



I can't comment on the "application that use channel binding" though,
because I don't understand that concept yet.  If the app uses
some crypto stuff outside of regular TLS to digitally sign or
protect each request with a keyed hash based on cryptographic
properties of the TLS channel (like the finished messages),
then this could work.

But the problem that I see there is the layering.  TLS is supposed
to go directly on top of TCP.  If the application several layers
above TLS uses properties such as a finished message for
a keyed hash on individual requests, then I don't see how this
could work well in a distributed environment, where the
original TLS channel might be terminated at the perimeter of
the distributed backend system (server farm), while the
backend application runs on some backend machine far away from the
endpoint of the TLS channel.


A layering violation of that kind puts significant constraints
on the (absence of compexity of) the infrastructure where it
might be used.


-Martin