CVE-2021-22890 Overview
CVE-2021-22890 is a Man-in-the-Middle (MITM) vulnerability affecting curl versions 7.63.0 through 7.75.0. The vulnerability exists in how libcurl handles TLS 1.3 session tickets when connecting through an HTTPS proxy. A malicious HTTPS proxy can exploit this flaw to intercept and potentially modify communications between the client and the intended server without detection.
When using a HTTPS proxy with TLS 1.3, libcurl can confuse session tickets arriving from the HTTPS proxy, treating them as if they arrived from the remote server. This confusion allows the proxy to trick libcurl into using the wrong session ticket for host resumption, thereby circumventing the server TLS certificate check and enabling an unnoticed MITM attack.
Critical Impact
A malicious HTTPS proxy can perform undetected MITM attacks by exploiting TLS 1.3 session ticket confusion, potentially compromising data integrity in transit.
Affected Products
- Haxx libcurl (versions 7.63.0 to 7.75.0)
- Fedora 32, 33, and 34
- NetApp HCI Management Node
- NetApp SolidFire
- NetApp HCI Storage Node
- Broadcom Fabric Operating System
- Debian Linux 9.0
- Siemens SINEC Infrastructure Network Services
- Oracle Communications Billing and Revenue Management 12.0.0.3.0
- Oracle Essbase 21.2
- Splunk Universal Forwarder
Discovery Timeline
- 2021-04-01 - CVE-2021-22890 published to NVD
- 2025-06-09 - Last updated in NVD database
Technical Details for CVE-2021-22890
Vulnerability Analysis
This vulnerability is classified under CWE-300 (Channel Accessible by Non-Endpoint) and CWE-290 (Authentication Bypass by Spoofing). The core issue lies in the improper handling of TLS 1.3 session tickets within libcurl when connections traverse an HTTPS proxy.
TLS 1.3 introduced session tickets as a mechanism for faster session resumption, allowing clients to skip the full handshake process on subsequent connections. However, libcurl's implementation failed to properly differentiate between session tickets originating from the HTTPS proxy and those from the target server.
The attack requires specific conditions: the victim must connect through a malicious HTTPS proxy while using TLS 1.3. The proxy must also possess a certificate that curl will accept for the target server (or curl must be configured to ignore certificate validation). Under these conditions, the proxy can inject its own session tickets and have libcurl incorrectly resume sessions with the proxy instead of the legitimate server.
Root Cause
The root cause is improper session ticket validation in libcurl's TLS 1.3 implementation. The library failed to maintain proper session ticket origin tracking when operating through an HTTPS proxy, allowing tickets from the proxy to be misattributed to the destination server. This design flaw permits session ticket confusion, where libcurl uses proxy-provided tickets for host handshakes.
Attack Vector
The attack requires a network position as a malicious HTTPS proxy between the victim client and the target server. The attack flow proceeds as follows:
- The victim client connects to an HTTPS proxy controlled by the attacker
- The malicious proxy establishes a TLS 1.3 connection with the client
- The proxy sends TLS 1.3 session tickets to the client
- Due to the vulnerability, libcurl confuses these proxy tickets as belonging to the target server
- On subsequent connections, libcurl attempts to resume the session using the wrong tickets
- This bypasses the server's TLS certificate validation, allowing the proxy to intercept traffic
The attack complexity is considered high as it requires the attacker to control an HTTPS proxy in the communication path and possess an acceptable certificate for the target server.
Detection Methods for CVE-2021-22890
Indicators of Compromise
- Unexpected TLS session resumption failures followed by successful connections through HTTPS proxies
- Certificate chain anomalies where the proxy certificate is used instead of the expected server certificate
- TLS handshake patterns showing session ticket reuse across different target servers
Detection Strategies
- Monitor for curl/libcurl version usage across systems and flag versions between 7.63.0 and 7.75.0
- Implement TLS inspection to identify mismatched session ticket origins and destinations
- Deploy network monitoring to detect unusual proxy behavior or certificate substitutions
Monitoring Recommendations
- Audit all systems for vulnerable curl/libcurl versions using software composition analysis tools
- Monitor TLS connection logs for abnormal session resumption patterns through HTTPS proxies
- Implement certificate pinning where possible to detect certificate substitution attacks
How to Mitigate CVE-2021-22890
Immediate Actions Required
- Upgrade curl to version 7.76.0 or later, which contains the fix for this vulnerability
- Audit systems for applications embedding vulnerable libcurl versions and update accordingly
- Avoid using untrusted HTTPS proxies until systems are patched
- Consider disabling TLS 1.3 session tickets as a temporary workaround if upgrading is not immediately possible
Patch Information
The vulnerability has been addressed in curl version 7.76.0 and later. Multiple vendors have released security advisories and patches for their affected products:
- cURL Official CVE-2021-22890 Advisory - Official curl project documentation
- Siemens Security Advisory SSA-389290 - Siemens product updates
- NetApp Security Advisory NTAP-20210521-0007 - NetApp product patches
- Oracle CPU July 2021 Alert - Oracle product updates
- Gentoo GLSA 2021-05-36 - Gentoo Linux security update
Workarounds
- Disable TLS 1.3 and fall back to TLS 1.2 when connecting through HTTPS proxies
- Avoid using HTTPS proxies from untrusted sources until systems are patched
- Enable strict certificate validation and consider certificate pinning for critical connections
- Monitor and restrict proxy usage in enterprise environments to trusted, vetted proxies only
# Example: Force TLS 1.2 maximum version as a workaround
curl --tlsv1.2 --tls-max 1.2 --proxy https://proxy:port https://target-server.com
# Example: Check curl version to verify if vulnerable
curl --version | grep -E "^curl [0-9]"
# Versions 7.63.0 through 7.75.0 are vulnerable
# Example: Update curl on Debian/Ubuntu systems
sudo apt update && sudo apt install --only-upgrade curl libcurl4
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


