LWN.net Logo

Security

TLS renegotiation vulnerability

By Jake Edge
November 18, 2009

Transport Layer Security (TLS), and its predecessor Secure Sockets Layer (SSL), are commonly used protocols for encrypting internet traffic, so TLS vulnerabilities can potentially affect a wide range of internet services. A recently disclosed flaw in the TLS protocol—though there is some dispute whether TLS is at fault—allows an "injected plaintext" attack against an encrypted session. This allows a "man in the middle" (MITM) attacker to prefix a victim's request with their own data, which gets interpreted by the server as if it came from the victim.

The flaw was disclosed on the Internet Engineering Task Force (IETF) TLS mailing list by Martin Rex of SAP on November 4, but it had actually been discovered two months earlier. Marsh Ray of PhoneFactor, Inc. discovered the problem in early August, but kept it quiet while alerting the IETF and various TLS developers and vendors. Those organizations came together as "Project Mogul" to find a solution to the problem. But once Rex had posted publicly about a possible MITM attack—independently discovered—against TLS (specifically Microsoft's IIS), Ray and his colleague Steve Dispensa released additional information showing that it was a pervasive problem for TLS (including Apache web servers, OpenSSL, GNUTLS, and others).

TLS allows clients and servers to renegotiate various session parameters within the TLS connection. When the renegotiation is done, however, TLS applications still accept data that came in before the renegotiation as if it were in the new security context. That hole allows a MITM attack. By arranging that the last data received is from the attacker, then causing a renegotiation with the victim, the attack effectively prepends the attacker's payload to the victim's request.

While it may sound rather theoretical, there is already a proof of concept (PoC) program available, and that has been adapted into a way to steal Twitter credentials. Other kinds of attacks are possible as well, some of which may exploit other internet protocols that use TLS, for example: SMTP (email), FTP, XMPP (Jabber), and some VPN implementations. Exploiting the vulnerability requires the attacker to control some node in between the client and server, which is not that difficult to do these days because of pervasive WiFi. Users are accustomed to using any available access point—especially if they use encrypted connections for their web/email/etc. connections—and that access point could be compromised.

Injecting the attacker's text into an existing TLS session may not seem like a particularly potent attack, but there are several examples of how it could work. Rex's original disclosure was related to web servers configured to require client certificates for some resources, and not for others, which will often lead to renegotiation. That led some to believe that this relatively rare configuration was required, but subsequent examples and explanations make it clear that there are other ways to cause, and exploit, renegotiation.

To attack a web-based application, the attacker typically would send their prefix to the server, then cause the renegotiation to occur. That renegotiation would actually be done between the victim's client and the server (with the MITM attacker just proxying the traffic). Due to the bug, the server would process the prefix in the new security context that gets established via the renegotiation. So, neither the client nor the server have any idea that this has occurred, and the attacker gets to insert his payload into the the client's secure session.

Eric Rescorla is one of those working on a long-term fix, but he also has a fairly straightforward example of the plaintext injection:

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.

The Twitter attack uses a similar scheme, but exploits the REST-based API for Twitter. In that case, the attacker's Twitter feed shows the victim's server request, which includes the base64-encoded username and password of the victim. In Thierry Zoller's "TLS/SSLv3 renegotiation vulnerability explained" [PDF]—a comprehensive guide to the problem—there is an example of hijacking email traffic using a similar technique: the attacker prepends SMTP commands to send an email to himself, then leaves the DATA command unterminated, effectively capturing the victim's outgoing email message.

Shortly after the initial disclosure, OpenSSL released a workaround that disabled renegotiation. According to Rescorla, almost all servers could disable renegotiation without impacting any needed functionality, but that doesn't fix the problem on the client side. Clients cannot detect whether the server allows renegotiation because the attacker could always fake a rejection of the renegotiation request.

A more long-term fix has been proposed—that site, ironically, has an invalid SSL certificate—by Rescorla, Ray, Dispensa, and Nasko Oskov of Microsoft. Their proposal would extend TLS to add information to each renegotiation about the previous renegotiation. In that way, clients could detect that their connection is not being negotiated for the first time, which would mean that a MITM had done a TLS negotiation already.

While TLS is the right place to make the fix, Adam Langley is unhappy that TLS is being blamed for the problem. His contention is that the applications are making unwarranted assumptions about what TLS provides. While that may be true, "every single protocol that is layered on top of TLS got this wrong", as Ben Laurie points out.

Zoller's paper also has a good summary of other protocols and programs that use TLS, along with their vulnerability status. It may be a hard vulnerability to exploit, because it requires a MITM position along with an ability to predict the client's traffic, but it is rather serious. As Rescorla and others note, though, MITM attacks simply using an attacker's certificate are generally fairly successful because users are willing to accept any certificate presented to them. It really isn't necessary to go to the lengths that are required to exploit this vulnerability until that changes.

[ Thanks to Tzvetan Mikov who suggested this as a topic shortly after it was made public. ]

Comments (23 posted)

New vulnerabilities

apache-conf: cross-site scripting

Package(s):apache-conf CVE #(s):CVE-2009-2823
Created:November 16, 2009 Updated:January 7, 2010
Description:

From the Mandriva advisory:

The Apache HTTP Server enables the HTTP TRACE method per default which allows remote attackers to conduct cross-site scripting (XSS) attacks via unspecified web client software (CVE-2009-2823).

Alerts:
Mandriva MDVSA-2009:300-1 2010-01-07
Mandriva MDVSA-2009:300-2 2010-01-07
Mandriva MDVSA-2009:300 2009-11-15

Comments (none posted)

asterisk: access control violation

Package(s):asterisk CVE #(s):
Created:November 16, 2009 Updated:November 18, 2009
Description: From the Asterisk advisory:

A missing ACL check for handling SIP INVITEs allows a device to make calls on networks intended to be prohibited as defined by the "deny" and "permit" lines in sip.conf. The ACL check for handling SIP registrations was not affected.

Alerts:
Fedora FEDORA-2009-10861 2009-10-29

Comments (none posted)

cups: denial of service

Package(s):cups CVE #(s):CVE-2009-3553
Created:November 18, 2009 Updated:March 2, 2011
Description:

From the Red Hat advisory:

A use-after-free flaw was found in the way CUPS handled references in its file descriptors-handling interface. A remote attacker could, in a specially-crafted way, query for the list of current print jobs for a specific printer, leading to a denial of service (cupsd crash). (CVE-2009-3553)

Alerts:
Debian DSA-2176-1 2011-03-02
Mandriva MDVSA-2010:073-1 2010-04-14
Mandriva MDVSA-2010:073 2010-04-14
SuSE SUSE-SR:2010:007 2010-03-30
CentOS CESA-2010:0129 2010-03-12
Fedora FEDORA-2010-3761 2010-03-06
Ubuntu USN-906-1 2010-03-03
Red Hat RHSA-2010:0129-01 2010-03-03
SuSE SUSE-SR:2009:020 2010-01-12
Fedora FEDORA-2009-12652 2009-12-04
Fedora FEDORA-2009-11314 2009-11-11
CentOS CESA-2009:1595 2009-11-24
Red Hat RHSA-2009:1595-01 2009-11-18
Fedora FEDORA-2009-10891 2009-10-29
Gentoo 201207-10 2012-07-09

Comments (none posted)

ffmpeg: denial of service

Package(s):ffmpeg CVE #(s):CVE-2008-3230
Created:November 16, 2009 Updated:December 7, 2009
Description:

From the Mandriva advisory:

The ffmpeg lavf demuxer allows user-assisted attackers to cause a denial of service (application crash) via a crafted GIF file (CVE-2008-3230)

Alerts:
Mandriva MDVSA-2009:297-1 2009-12-05
Mandriva MDVSA-2009:297 2009-11-13

Comments (none posted)

gimp: integer overflow

Package(s):gimp CVE #(s):CVE-2009-1570
Created:November 13, 2009 Updated:September 28, 2012
Description: From the Mandriva advisory: Integer overflow in the ReadImage function in plug-ins/file-bmp/bmp-read.c in GIMP 2.6.7 might allow remote attackers to execute arbitrary code via a BMP file with crafted width and height values that trigger a heap-based buffer overflow.
Alerts:
CentOS CESA-2011:0837 2011-06-01
CentOS CESA-2011:0838 2011-05-31
Red Hat RHSA-2011:0838-01 2011-05-31
Red Hat RHSA-2011:0837-01 2011-05-31
Mandriva MDVSA-2009:332-1 2010-04-28
SuSE SUSE-SR:2010:009 2010-04-14
Ubuntu USN-880-1 2010-01-07
Slackware SSA:2009-345-01 2009-12-14
Mandriva MDVSA-2009:296-1 2009-12-11
Mandriva MDVSA-2009:332 2009-12-11
Mandriva MDVSA-2009:296 2009-11-13
Gentoo 201209-23 2012-09-28

Comments (none posted)

java: remote file creation and modification

Package(s):java CVE #(s):CVE-2009-2676
Created:November 12, 2009 Updated:November 18, 2009
Description: From the National Vulnerability Database entry:

Unspecified vulnerability in JNLPAppletlauncher in Sun Java SE, and SE for Business, in JDK and JRE 6 Update 14 and earlier and JDK and JRE 5.0 Update 19 and earlier; and Java SE for Business in SDK and JRE 1.4.2_21 and earlier; allows remote attackers to create or modify arbitrary files via vectors involving an untrusted Java applet that accesses an old version of JNLPAppletLauncher.

Alerts:
Red Hat RHSA-2009:1582-01 2009-11-12
Gentoo 200911-02 2009-11-17

Comments (none posted)

java: multiple vulnerabilities

Package(s):java CVE #(s):CVE-2009-2716 CVE-2009-2718 CVE-2009-2719 CVE-2009-2720 CVE-2009-2721 CVE-2009-2722 CVE-2009-2723 CVE-2009-2724
Created:November 18, 2009 Updated:November 18, 2009
Description:

From the CVE entries:

CVE-2009-2716: The plugin functionality in Sun Java SE 6 before Update 15 does not properly implement version selection, which allows context-dependent attackers to leverage vulnerabilities in "old zip and certificate handling" and have unspecified other impact via unknown vectors.

CVE-2009-2718: The Abstract Window Toolkit (AWT) implementation in Sun Java SE 6 before Update 15 on X11 does not impose the intended constraint on distance from the window border to the Security Warning Icon, which makes it easier for context-dependent attackers to trick a user into interacting unsafely with an untrusted applet.

CVE-2009-2719: The Java Web Start implementation in Sun Java SE 6 before Update 15 allows context-dependent attackers to cause a denial of service (NullPointerException) via a crafted .jnlp file, as demonstrated by the jnlp_file/appletDesc/index.html#misc test in the Technology Compatibility Kit (TCK) for the Java Network Launching Protocol (JNLP).

CVE-2009-2720: Unspecified vulnerability in the javax.swing.plaf.synth.SynthContext.isSubregion method in the Swing implementation in Sun Java SE 6 before Update 15 allows context-dependent attackers to cause a denial of service (NullPointerException in the Jemmy library) via unknown vectors.

CVE-2009-2721: Multiple unspecified vulnerabilities in the Provider class in Sun Java SE 5.0 before Update 20 have unknown impact and attack vectors, aka BugId 6406003.

CVE-2009-2722: Multiple unspecified vulnerabilities in the Provider class in Sun Java SE 5.0 before Update 20 have unknown impact and attack vectors, aka BugId 6429594. NOTE: this issue exists because of an incorrect fix for BugId 6406003.

CVE-2009-2723: Unspecified vulnerability in deserialization in the Provider class in Sun Java SE 5.0 before Update 20 has unknown impact and attack vectors, aka BugId 6444262.

CVE-2009-2724: Race condition in the java.lang package in Sun Java SE 5.0 before Update 20 has unknown impact and attack vectors, related to a "3Y Race condition in reflection checks."

Alerts:
Gentoo 200911-02 2009-11-17

Comments (none posted)

kernel: denial of service

Package(s):kernel CVE #(s):CVE-2009-3726
Created:November 16, 2009 Updated:March 21, 2011
Description:

From the SUSE advisory:

CVE-2009-3726: The nfs4_proc_lock function in fs/nfs/nfs4proc.c in the NFSv4 client in the allows remote NFS servers to cause a denial of service (NULL pointer dereference and panic) by sending a certain response containing incorrect file attributes, which trigger attempted use of an open file that lacks NFSv4 state.

Alerts:
Mandriva MDVSA-2011:051 2011-03-18
CentOS CESA-2010:0474 2010-08-27
CentOS CESA-2010:0474 2010-08-23
Red Hat RHSA-2010:0474-01 2010-06-15
Debian DSA-2004-1 2010-02-27
Debian DSA-2003-1 2010-02-22
SuSE SUSE-SA:2010:012 2010-02-15
SuSE SUSE-SA:2009:064 2009-12-22
CentOS CESA-2009:1670 2009-12-17
Red Hat RHSA-2009:1670-01 2009-12-15
SuSE SUSE-SA:2009:061 2009-12-14
Mandriva MDVSA-2009:329 2009-12-09
Ubuntu USN-864-1 2009-12-05
Red Hat RHSA-2009:1635-01 2009-12-03
SuSE SUSE-SA:2009:060 2009-12-02
Mandriva MDVSA-2009:301 2009-11-20
SuSE SUSE-SA:2009:056 2009-11-16

Comments (none posted)

openjdk: arbitrary code execution

Package(s):openjdk-6 CVE #(s):CVE-2009-3885
Created:November 16, 2009 Updated:April 28, 2010
Description:

From the Ubuntu advisory:

Multiple flaws were discovered in JPEG and BMP image handling. If a user were tricked into loading a specially crafted image, a remote attacker could crash the application or run arbitrary code with user privileges. (CVE-2009-3873, CVE-2009-3874, CVE-2009-3885)

Alerts:
Mandriva MDVSA-2010:084 2010-04-28
Ubuntu USN-859-1 2009-11-13

Comments (none posted)

openldap: man in the middle attack

Package(s):openldap CVE #(s):CVE-2009-3767
Created:November 12, 2009 Updated:July 22, 2010
Description: From the Ubuntu alert:

It was discovered that OpenLDAP did not correctly handle SSL certificates with zero bytes in the Common Name. A remote attacker could exploit this to perform a man in the middle attack to view sensitive information or alter encrypted communications.

Alerts:
CentOS CESA-2010:0543 2010-07-21
Red Hat RHSA-2010:0543-01 2010-07-20
Red Hat RHSA-2010:0198-04 2010-03-30
Mandriva MDVSA-2010:026 2010-01-26
Debian DSA-1943 2009-12-02
Fedora FEDORA-2010-0752 2010-01-19
Ubuntu USN-858-1 2009-11-12

Comments (none posted)

qt: multiple vulnerabilities

Package(s):qt CVE #(s):CVE-2009-3384 CVE-2009-2816
Created:November 16, 2009 Updated:January 25, 2011
Description:

From the Red Hat bugzilla [1, 2]:

CVE-2009-3384: Multiple security flaws (integer underflow, invalid pointer dereference, buffer underflow and a denial of service) were found in the way WebKit's FTP parser used to process remote FTP directory listings. If a remote FTP server issued a specially-crafted FTP command, it could lead to disclosure of sensitive information, denial of service (application crash) or, potentially to execution of arbitrary code, once the command was parsed.

CVE-2009-2816: A security flaw was found in the WebKit's Cross-Origin Resource Sharing (CORS) implementation. Quoting exact details from the WebKit advisory: Before allowing a page from one origin to access a resource in another origin, WebKit sends a preflight request, to determine if the origin server for the resource being accessed will allow the resource to be shared. WebKit includes custom HTTP headers specified by the requesting page in the preflight request. This can result in unexpected actions being initiated on the cross-origin site without user consent. This issue is addressed by dropping custom HTTP headers from preflight requests.

Alerts:
SUSE SUSE-SR:2011:002 2011-01-25
openSUSE openSUSE-SU-2011:0024-1 2011-01-12
Fedora FEDORA-2009-11487 2009-11-14
Fedora FEDORA-2009-11491 2009-11-14
Fedora FEDORA-2009-11488 2009-11-14

Comments (none posted)

texlive: buffer overflow

Package(s):texlive CVE #(s):CVE-2009-1284
Created:November 13, 2009 Updated:June 26, 2012
Description: From the CVE entry: Buffer overflow in BibTeX 0.99 allows context-dependent attackers to cause a denial of service (memory corruption and crash) via a long .bib bibliography file.
Alerts:
Fedora FEDORA-2010-8273 2010-05-10
Mandriva MDVSA-2010:096 2010-05-17
Mandriva MDVSA-2010:094 2010-05-12
Ubuntu USN-937-1 2010-05-06
Fedora FEDORA-2009-10857 2009-10-27
Fedora FEDORA-2009-10730 2009-10-27
Gentoo 201206-28 2012-06-25

Comments (none posted)

wordpress: multiple vulnerabilities

Package(s):wordpress CVE #(s):
Created:November 18, 2009 Updated:November 18, 2009
Description:

From the Wordpress release notes:

2.8.6 fixes two security problems that can be exploited by registered, logged in users who have posting privileges. If you have untrusted authors on your blog, upgrading to 2.8.6 is recommended.

The first problem is an XSS vulnerability in Press This discovered by Benjamin Flesch. The second problem, discovered by Dawid Golunski, is an issue with sanitizing uploaded file names that can be exploited in certain Apache configurations. Thanks to Benjamin and Dawid for finding and reporting these.

Alerts:
Fedora FEDORA-2009-11710 2009-11-18
Fedora FEDORA-2009-11693 2009-11-18
Fedora FEDORA-2009-11687 2009-11-18

Comments (none posted)

Page editor: Jake Edge
Next page: Kernel development>>

Copyright © 2009, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds