Reputation: 11
I was using OpenSSL 1.0.0e on both client and server to do the test, but I got an error message when testing secure renegotiation.
$ openssl s_client -connect 192.168.1.99:443 -tls1
...
Secure Renegotiation IS supported
...
R
RENEGOTIATING
140501522626208:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:591:
Upvotes: 1
Views: 12391
Reputation: 41
To understand the issue in a bit more detail here is some relevant information:
The official description:
The TLS protocol, and the SSL protocol 3.0 and possibly earlier, as used in Microsoft Internet Information Services (IIS) 7.0, mod_ssl in the Apache HTTP Server 2.2.14 and earlier, OpenSSL before 0.9.8l, GnuTLS 2.8.5 and earlier, Mozilla Network Security Services (NSS) 3.12.4 and earlier, multiple Cisco products, and other products, does not properly associate renegotiation handshakes with an existing connection, which allows man-in-the-middle attackers to insert data into HTTPS sessions, and possibly other types of sessions protected by TLS or SSL, by sending an unauthenticated request that is processed retroactively by a server in a post-renegotiation context, related to a "plaintext injection" attack, aka the "Project Mogul" issue.
Details about the CVE and affected versions:
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2009-3555
A thorough explanation of the vulnerability, its symptoms and possible solutions:
http://www.g-sec.lu/practicaltls.pdf
So to sum-up the vulnerability requirements, the preconditions for a TLS or SSLv3 connection to be vulnerable are:
1 The server acknowledges and accepts full TLS renegotiations in the middle of a connection and after the initial handshake
and
2 The server assumes that both TLS sessions were negotiated with the same client
and
3 The server treats both sessions as one and merges them at the application layer
That being said, based on the requirements above a test against the server on port 443 shows that renegotiation is not allowed:
Generic Example Of A Vulnerable Server
Openssl s_client –connect yourserver.com:443
GET / HTTP/1.0
Host:yourserver.com
R (Triggers renegotiation – if this works, the server accepts enegotiations
within an existing TLS session Req. #1)
CRLF
<server responds with content> (server merged both sessions Req. #2)
Protected server
Openssl s_client –connect yourserver.com:443
R (Triggers renegotiation)
2860:error:1409444C:SSL routines:SSL3_READ_BYTES:tlsv1 alert no
renegotiation:./ ssl/s3_pkt.c:1053:SSL alert number 100
Cheers!
Upvotes: 4