CVE-2016-5420
Re-using connections with wrong client cert
Project curl Security Advisory, August 3rd 2016 - Permalink
VULNERABILITY
libcurl did not consider client certificates when reusing TLS connections.
libcurl supports reuse of established connections for subsequent requests. It does this by keeping a few previous connections "alive" in a connection pool so that a subsequent request that can use one of them instead of creating a new connection.
When using a client certificate for a connection that was then put into the connection pool, that connection could then wrongly get reused in a subsequent request to that same server that either did not use a client certificate at all or that asked to use a different client certificate thus trying to tell the user that it is a different entity.
This mistakenly using the wrong connection could of course lead to applications sending requests to the wrong realms of the server using authentication that it was not supposed to have for those operations.
INFO
This flaw also affects the curl command line tool.
The Common Vulnerabilities and Exposures (CVE) project has assigned the name CVE-2016-5420 to this issue.
CWE-305: Authentication Bypass by Primary Weakness
Severity: Medium
AFFECTED VERSIONS
This flaw is relevant for all versions of curl and libcurl that support SSL/TLS and client certificates.
- Affected versions: curl 7.7 to and including 7.50.0
- Not affected versions: curl < 7.7 and curl >= 7.50.1
libcurl is used by many applications, but not always advertised as such!
SOLUTION
In version 7.50.1, curl checks that re-used connections have the correct client certificate (filename) before used.
RECOMMENDATIONS
We suggest you take one of the following actions immediately, in order of preference:
A - Upgrade curl and libcurl to version 7.50.1
B - Apply the patch to your version and rebuild
C - Do not use client certificates
TIMELINE
This was figured out by curl security team members during our work with the 20160803A flaw during June 2016. We contacted distros@openwall on July 31.
libcurl 7.50.1 was released on August 3 2016, coordinated with the publication of this advisory.
CREDITS
- Reported-by: the curl security team
- Patched-by: Daniel Stenberg
Thanks a lot!