Re-using authenticated connection when unauthenticated
Project curl Security Advisory, April 22nd 2015 - Permalink
libcurl keeps a pool of its last few connections around after use to fascilitate easy, conventient and completely transparent connection re-use for applications.
When doing HTTP requests NTLM authenticated, the entire connection becomes authenticated and not just the specific HTTP request which is otherwise how HTTP works. This makes NTLM special and a subject for special treatment in the code. With NTLM, once the connection is authenticated, no further authentication is necessary until the connection gets closed.
libcurl's connection re-use logic will select an existing connection for re-use when asked to do a request, and when asked to use NTLM libcurl have to pick a connection with matching credentials only.
If a connection was first setup and used for an NTLM HTTP request with a specific set of credentials, that same connection could later wrongly get re-used in a subsequent HTTP request that was made to the same host - but without having any credentials set! Since an NTLM connection was already authenticated due to how NTLM works, the subsequent request could then get sent over the wrong connection appearing as the initial user.
This problem is very similar to the previous problem known as CVE-2014-0015. The main difference this time is that the subsequent request that wrongly re-use a connection doesn't ask for NTLM authentication.
We are not aware of any exploits of this flaw.
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-3143 to this issue.
CWE-305: Authentication Bypass by Primary Weakness
- Affected versions: from libcurl 7.10.6 to and including 7.41.0
- Not affected versions: libcurl >= 7.42.0
libcurl is used by many applications, but not always advertised as such!
libcurl 7.42.0 makes sure that a connection that is re-used also have to have a matching set of credentials if it would re-use a connection already using NTLM.
A patch for this problem is available at:
We suggest you take one of the following actions immediately, in order of preference:
A - Upgrade to curl and libcurl 7.42.0
B - Apply the patch and rebuild libcurl
C - Avoid using NTLM with libcurl
It was first reported to the curl project on February 24 2015. We contacted distros@openwall on April 16th.
libcurl 7.42.0 was released on April 22nd 2015, coordinated with the publication of this advisory.
- Reported-by: Paras Sethia
- Patched-by: Daniel Stenberg
Thanks a lot!