CVE-2015-3236
lingering HTTP credentials in connection re-use
Project curl Security Advisory, June 17th 2015 - Permalink
VULNERABILITY
libcurl can wrongly send HTTP credentials when re-using connections.
libcurl allows applications to set credentials for the upcoming
transfer with HTTP Basic authentication, like with
CURLOPT_USERPWD
for example. Name and password. Just like
all other libcurl options the credentials are sticky and are kept
associated with the "handle" until something is made to change the
situation.
Further, libcurl offers a curl_easy_reset()
function
that resets a handle back to its pristine state in terms of all settable
options. A reset is of course also supposed to clear the credentials. A
reset is typically used to clear up the handle and prepare it for a new,
possibly unrelated, transfer.
Within such a handle, libcurl can also store a set of previous connections in case a second transfer is requested to a hostname for which an existing connection is already kept alive.
With this flaw present, using the handle even after a reset would make libcurl accidentally use those credentials in a subsequent request if done to the same hostname and connection as was previously accessed.
An example case would be first requesting a password protected resource from one section of a website, and then do a second request of a public resource from a completely different part of the site without authentication. This flaw would then inadvertently leak the credentials in the second request.
INFO
This flaw can also affect the curl command line tool if a similar operation series is made with that.
The Common Vulnerabilities and Exposures (CVE) project has assigned the name CVE-2015-3236 to this issue.
CWE-305: Authentication Bypass by Primary Weakness
Severity: High
AFFECTED VERSIONS
This flaw is relevant for
- Affected versions: libcurl 7.40.0 to and including 7.42.1
- Not affected versions: libcurl < 7.40.0 and libcurl >= 7.43.0
libcurl is used by many applications, but not always advertised as such!
SOLUTION
In version 7.43.0, libcurl properly clears the credentials and prevents them from lingering around.
RECOMMENDATIONS
We suggest you take one of the following actions immediately, in order of preference:
A - Upgrade curl and libcurl to version 7.43.0
B - Apply the patch to your version and rebuild
C - If you use curl_easy_reset()
, explicitly set the
credentials afterwards
TIMELINE
It was first reported to the curl project on May 19 2015. We contacted distros@openwall on June 11.
libcurl 7.43.0 was released on June 17 2015, coordinated with the publication of this advisory.
CREDITS
- Reported-by: Tomas Tomecek, Kamil Dudka
- Patched-by: Kamil Dudka
Thanks a lot!