Openwall GNU/*/Linux - a small security-enhanced Linux distro for servers
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Sat, 7 Nov 2009 02:05:31 +0300
From: Eygene Ryabinkin <rea-sec@...elabs.ru>
To: oss-security@...ts.openwall.com
Cc: "Steven M. Christey" <coley@...us.mitre.org>, tls@...f.org
Subject: Re: CVE-2009-3555 for TLS renegotiation MITM attacks

Sorry for jumping in, but I had missed the topic in the other lists,
so I am trying to ask here.  Also CC'ing tls@...f.org -- sorry for
such cross-posting.

Thu, Nov 05, 2009 at 03:24:30PM +0000, Mark J Cox wrote:
> Marsh Ray of PhoneFactor has discovered a flaw in the TLS/SSL protocol
> related to the handling of the session renegotiations.  In certain
> circumstances this flaw could be used in MITM attacks, allowing an
> attacker to inject attacker-chosen plain text prefix into a secure
> session of the victim.

Had anyone considered the scenario when the server requires client
certificate from the beginning, but MITM possesses some other
credentials that will be good for authentication (but can be of no use
for authorization)?  In this case MITM can use this certificate to start
the splitting request, then initiate renegotiation and proxy client's
request through the established channel.  I see that Apache asks for the
certificate for the second renegotiation, as well as the OpenSSL's
s_server.  Here is the trace for s_server:
-----
$ openssl s_client -msg -key userkey.pem -cert usercert.pem -host somehost -port 8443 | grep -E '^(<<<|>>>)'
Enter pass phrase for userkey.pem:
>>> SSL 2.0 [length 0086], CLIENT-HELLO
<<< TLS 1.0 Handshake [length 004a], ServerHello
<<< TLS 1.0 Handshake [length 0b01], Certificate
depth=1 /C=RU/O=some/CN=CA
verify error:num=19:self signed certificate in certificate chain
verify return:0
<<< TLS 1.0 Handshake [length 010d], ServerKeyExchange
<<< TLS 1.0 Handshake [length 0055], CertificateRequest
<<< TLS 1.0 Handshake [length 0004], ServerHelloDone
>>> TLS 1.0 Handshake [length 056a], Certificate
>>> TLS 1.0 Handshake [length 0046], ClientKeyExchange
>>> TLS 1.0 Handshake [length 0086], CertificateVerify
>>> TLS 1.0 ChangeCipherSpec [length 0001]
>>> TLS 1.0 Handshake [length 0010], Finished
<<< TLS 1.0 ChangeCipherSpec [length 0001]
<<< TLS 1.0 Handshake [length 0010], Finished
R
RENEGOTIATING
>>> TLS 1.0 Handshake [length 0063], ClientHello
<<< TLS 1.0 Handshake [length 0030], ServerHello
<<< TLS 1.0 Handshake [length 0b01], Certificate
depth=1 /C=RU/O=some/CN=CA
verify error:num=19:self signed certificate in certificate chain
verify return:0
<<< TLS 1.0 Handshake [length 010d], ServerKeyExchange
<<< TLS 1.0 Handshake [length 0055], CertificateRequest
<<< TLS 1.0 Handshake [length 0004], ServerHelloDone
>>> TLS 1.0 Handshake [length 056a], Certificate
>>> TLS 1.0 Handshake [length 0046], ClientKeyExchange
>>> TLS 1.0 Handshake [length 0086], CertificateVerify
>>> TLS 1.0 ChangeCipherSpec [length 0001]
>>> TLS 1.0 Handshake [length 0010], Finished
<<< TLS 1.0 Handshake [length 060a]???
<<< TLS 1.0 ChangeCipherSpec [length 0001]
<<< TLS 1.0 Handshake [length 0010], Finished
-----
If the second certificate is used for the authorization and it is
allowed to have distinct certificates during the first and second
negotiations, then this could be the other way to trigger this attack
against the servers that are requiring certificates from the beginning.

Any thoughts?
-- 
Eygene

Powered by blists - more mailing lists

Your e-mail address:

Please check out the Open Source Software Security Wiki, which is counterpart to this mailing list.

Powered by Openwall GNU/*/Linux - Powered by OpenVZ