HexBrain

Internet Bug Bounty · Report #1565624

CVE-2022-27782: TLS and SSH connection too eager reuse

Validstatus
mediumseverity
$2,400bounty
11upvotes
12 May 2022disclosed

Summary

TLS and SSH connection too eager reuse

Project curl Security Advisory, May 11 2022 - Permalink

VULNERABILITY

libcurl would reuse a previously created connection even when a TLS or SSH related option had been changed that should have prohibited reuse.

libcurl keeps previously used connections in a connection pool for subsequent transfers to reuse if one of them matches the setup. However, several TLS and SSH settings were left out from the configuration match checks, making them match too easily.

We are not aware of any exploit of this flaw.

INFO

Here are the list of options that were not considered in the check, so curl would reuse a connection even if the subsequent transfer would have changed one or more of these options.

TLS options

  • CURLOPT_SSL_OPTIONS(since 7.25.0)
  • CURLOPT_CRLFILE (since 7.19.0)
  • CURLOPT_TLSAUTH_USERNAME (since 7.21.4)
  • CURLOPT_TLSAUTH_PASSWORD (since 7.21.4)
  • CURLOPT_PROXY_SSL_OPTIONS (since 7.52.0)
  • CURLOPT_PROXY_CRLFILE (since 7.52.0)
  • CURLOPT_PROXY_TLSAUTH_USERNAME (since 7.52.0)
  • CURLOPT_PROXY_TLSAUTH_PASSWORD (since 7.52.0)

SSH options

  • CURLOPT_SSH_PUBLIC_KEYFILE (since 7.16.1)
  • CURLOPT_SSH_PRIVATE_KEYFILE (since 7.16.1)

This flaw was initially introduced in curl 7.16.1 and has been widened several times since then. See table above for details

The Common Vulnerabilities and Exposures (CVE) project has assigned the name CVE-2022-TLSSSHREUSE to this issue.

CWE-305: Authentication Bypass by Primary Weakness

Severity: Medium

AFFECTED VERSIONS

libcurl is used by many applications, but not always advertised as such!

THE SOLUTION

The two patches for CVE-2022-27782: TLS-fix and SSH-fix

RECOMMENDATIONS

A - Upgrade curl to version 7.83.1

B - Apply the patch to your local version

TIMELINE

This issue was reported to the curl project on May 1, 2022. We contacted distros@openwall on May 5.

libcurl 7.83.1 was released on May 11 2022, coordinated with the publication of this advisory.

LINK TO ADVISORY

https://curl.se/docs/CVE-2022-27782.html

How it was found

Summary:

Curl fails to consider some security related options when reusing TLS connections. For example:

TLS

CURLOPT_SSL_OPTIONS CURLOPT_PROXY_SSL_OPTIONS CURLOPT_CRLFILE CURLOPT_PROXY_CRLFILE CURLOPT_TLSAUTH_TYPE CURLOPT_TLSAUTH_USERNAME CURLOPT_TLSAUTH_PASSWORD CURLOPT_PROXY_TLSAUTH_TYPE CURLOPT_PROXY_TLSAUTH_USERNAME CURLOPT_PROXY_TLSAUTH_PASSWORD

As a result for example TLS connection with lower security (CURLSSLOPT_ALLOW_BEAST, CURLSSLOPT_NO_REVOKE) connection reused when it should no longer be. Also connection that has been authenticated perviously with CURLSSLOPT_AUTO_CLIENT_CERT might be reused for connections that should not be.

SSH

CURLOPT_SSH_PUBLIC_KEYFILE CURLOPT_SSH_PRIVATE_KEYFILE

If the attacker knows the vulnerable application used SSH key authentication towards specific host with certain username and protocol they can then perform actions to the same host afterwards and abuse the connection reuse.

Impact

  • Wrong identity (client certificate) or TLS security options being used for subsequent connections to the same hosts.
  • Previously authenticated SSH sessions (SCP/SFTP) reuse.

This report was disclosed publicly on HackerOne and belongs to its author and the program. See the original