On 31.03.2010 14:26, Eddy Nigg wrote:
  [ Please follow up to mozilla.dev.tech.crypto ]

After some discussion at bug 554594 I'm following up here - the bug was
unfortunately misused by me a little for the initial discussion.

At https://wiki.mozilla.org/Security:Renegotiation under item 4.4 the
following is proposed:


          security.ssl.require_safe_negotiation

    If set to true, a Mozilla client will reject *all* connection
    attempts to servers that are still using the old SSL/TLS protocol
    and which might be vulnerable to the attack.


I believe this to be a mistake for various reasons, but first and
foremost because an attack on a server without compromise of the client
data as well, is basically useless. When a attacker induces
renegotiation at the server, the attacker must have client credentials
in order to act as if he were the original client. Without those
credentials, the attacker would be treated as any other unauthenticated
source.


The attack that made it necessary to develop RFC 5746 is difficult to understand.


The attacker doesn't need to know the credentials of the user.

It's sufficient that the user's credentials will be sent by the client, after the renegotiation between MITM and server happened.

The client will see it as an initial negotiation, it will encrypt the data, readable for the server only, not readable by the attacker. The attacker will pass through all unreadable encrypted data.

On the server side, a request from the attacker will be combined with the credentials sent by the client.

It's explained here:
http://www.educatedguesswork.org/2009/11/understanding_the_tls_renegoti.html

I'm quoting the relevant example from above document:

====== snip quote begin ======
E.g., the attacker would send:

GET /pizza?toppings=pepperoni;address=attackersaddress HTTP/1.1
X-Ignore-This:

And leave the last line empty without a carriage return line feed. Then when the client makes his own request

GET /pizza?toppings=sausage;address=victimssaddress HTTP/1.1
Cookie: victimscookie


the two requests get glued together into:

GET /pizza?toppings=pepperoni;address=attackersaddress HTTP/1.1
X-Ignore-This: GET /pizza?toppings=sausage;address=victimssaddress HTTP/1.1
Cookie: victimscookie

And the server uses the victim's account to send a pizza to the attacker.
======= snip quote end =======


When a client (as in our case Firefox) implements RFC 5746, the client
can't be compromised and no data is leaked from the client. I propose
that Firefox should support the RFC 5746 extension exclusively, but NOT
block or warn on accessing servers which don't support the extension.


It doesn't help if the client is the only side supporting RFC 5746.

Imagine the transition from USB 2.0 to USB 3.0, where the plug remains compatible, but the inner parts of the USB 3.0 plug introduces new connectors.

If the client uses USB 3.0 and supports additional information, but the server still uses the older USB 2.0 plug, it won't help anyone. The data designed to be exchanged using the new USB 3.0 connectors can't flow.

In other words, the parties are unable to exchange information that would help them to discover that a renegotiation from an unrelated party (a MITM) was requested.

RFC 5746 requires a communication channel where both parties can speak the protocol.


Any renegotiation attempt to the client will be ignored and no data is
leaked.

Even if the client rejects all incoming requests for renegotiation, the client has already sent out its credentials as part of a HTTP/SSL request. Yes, the credentials are not being directly leaked to the attacker, but that's not necessary.

The credentials will be combined with an arbitrary request chosen by the attacker, as illustrated above.

Effectively, the attacker can execute a request on behalf of the user, without needing to know the user's credentials.

Kai
--
dev-tech-crypto mailing list
dev-tech-crypto@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-crypto

Reply via email to