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.
{ "CWE": { "id": "CWE-305", "desc": "Authentication Bypass by Primary Weakness" }, "package": "curl", "URL": "https://curl.se/docs/CVE-2016-5420.json", "severity": "Medium", "www": "https://curl.se/docs/CVE-2016-5420.html", "last_affected": "7.50.0" }