CVE-2022-43551
High · 7.5CVSS
7.5
EPSS
16.6%
Published
Dec 23, 2022
CISA due date
—
Cloudanix analysis
A common tool used to move data between computers could be tricked into sending information over an insecure connection instead of a protected one, raising the chance that someone could read data they should not.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Data Exposure
- Component
- Library
- Class
- Information Disclosure
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The HSTS mechanism in curl can be bypassed when a hostname in a URL uses IDN characters (such as UTF-8 U+3002) that normalize to ASCII equivalents during conversion; the HSTS state is stored under the IDN form but subsequent lookups use the decoded ASCII form, causing curl to fall back to clear-text HTTP instead of enforcing HTTPS.
Why it matters to the business
Organizations relying on curl for secure data transfers face an elevated risk of sensitive information exposure over unencrypted channels, potentially leading to compliance violations and loss of confidentiality, especially given the widespread use of the library and availability of public exploits despite the issue being over three years old.
How an attack unfolds
An attacker crafts a URL containing an IDN-encoded hostname with a non-ASCII full stop character and supplies it to an application using a vulnerable curl version; curl performs IDN conversion, stores any HSTS entry under the encoded form, fails to match the decoded hostname on the next request, and transmits data in plaintext over HTTP, which can be intercepted.
How to fix it
Upgrade curl to a version containing commit c12fb3ddaf48e709a7a4deaa55ec485e4df163ee (corresponding to curl 7.87.0 or later) across all affected installations and rebuild any dependent applications or packages that statically link curl.
How to confirm the fix worked
Confirm the installed curl binary or library reports version 7.87.0 or newer, or verify the presence of commit c12fb3ddaf48e709a7a4deaa55ec485e4df163ee in the source tree; test with crafted IDN URLs to ensure HSTS enforcement now occurs.
Typical attack path
- Craft a URL using an IDN hostname with a UTF-8 IDEOGRAPHIC FULL STOP (U+3002) instead of ASCII dot
- Supply the URL to a client or script that invokes vulnerable curl for the transfer
- Trigger an initial request so curl stores HSTS state under the IDN-encoded hostname
- Issue a follow-up request with the equivalent ASCII hostname to bypass HSTS lookup
- Observe or intercept the resulting clear-text HTTP transfer
How to detect it
Review application logs for curl transfers involving hostnames that contain non-ASCII characters or that unexpectedly use HTTP when HTTPS was expected; examine network traffic for plaintext HTTP requests to domains that should have been protected by HSTS entries.
What your security team should do
- Prioritize patching curl in all environments within standard maintenance windows given the public exploit availability
- Inventory internal and third-party software that embeds or calls curl and schedule upgrades using the exact fixed commit reference
- Update build pipelines and dependency manifests to enforce minimum curl version 7.87.0
- Monitor upstream curl release notes for any related follow-on fixes
The record
A vulnerability exists in curl <7.87.0 HSTS check that could be bypassed to trick it to keep using HTTP. Using its HSTS support, curl can be instructed to use HTTPS instead of using an insecure clear-text HTTP step even when HTTP is provided in the URL. However, the HSTS mechanism could be bypassed if the host name in the given URL first uses IDN characters that get replaced to ASCII counterparts as part of the IDN conversion. Like using the character UTF-8 U+3002 (IDEOGRAPHIC FULL STOP) instead of the common ASCII full stop (U+002E) `.`. Then in a subsequent request, it does not detect the HSTS state and makes a clear text transfer. Because it would store the info IDN encoded but look for it IDN decoded.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Alpine:v3.14 | curl | 0 | 7.79.1-r4 |
| Alpine:v3.15 | curl | 0 | 7.80.0-r5 |
| Alpine:v3.16 | curl | 0 | 7.83.1-r5 |
| Alpine:v3.17 | curl | 0 | 7.87.0-r0 |
| Alpine:v3.18 | curl | 0 | 7.87.0-r0 |
| Alpine:v3.19 | curl | 0 | 7.87.0-r0 |
| Alpine:v3.20 | curl | 0 | 7.87.0-r0 |
| Alpine:v3.21 | curl | 0 | 7.87.0-r0 |
| Alpine:v3.22 | curl | 0 | 7.87.0-r0 |
| Chainguard | curl | 0 | 7.87.0-r0 |
| Chainguard | curl-dev | 0 | 7.87.0-r0 |
| Chainguard | curl-doc | 0 | 7.87.0-r0 |
| Chainguard | curl-oci-entrypoint | 0 | 7.87.0-r0 |
| Chainguard | curl-static | 0 | 7.87.0-r0 |
| Chainguard | libcurl-openssl4 | 0 | 7.87.0-r0 |
| Chainguard | libcurl4 | 0 | 7.87.0-r0 |
| Debian:11 | curl | 0 | No fix |
| Debian:12 | curl | 0 | 7.86.0-3 |
| Debian:13 | curl | 0 | 7.86.0-3 |
| Mageia:8 | curl | 0 | 7.74.0-1.10.mga8 |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-apr-util | 0 | 0:1.6.1-101.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-apr-util-debuginfo | 0 | 0:1.6.1-101.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-apr-util-devel | 0 | 0:1.6.1-101.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-apr-util-ldap | 0 | 0:1.6.1-101.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-apr-util-mysql | 0 | 0:1.6.1-101.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-apr-util-nss | 0 | 0:1.6.1-101.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-apr-util-odbc | 0 | 0:1.6.1-101.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-apr-util-openssl | 0 | 0:1.6.1-101.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-apr-util-pgsql | 0 | 0:1.6.1-101.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-apr-util-sqlite | 0 | 0:1.6.1-101.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-curl | 0 | 0:8.0.1-1.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-curl-debuginfo | 0 | 0:8.0.1-1.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-httpd | 0 | 0:2.4.51-39.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-httpd-debuginfo | 0 | 0:2.4.51-39.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-httpd-devel | 0 | 0:2.4.51-39.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-httpd-manual | 0 | 0:2.4.51-39.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-httpd-selinux | 0 | 0:2.4.51-39.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-httpd-tools | 0 | 0:2.4.51-39.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-libcurl | 0 | 0:8.0.1-1.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-libcurl-devel | 0 | 0:8.0.1-1.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-mod_ldap | 0 | 0:2.4.51-39.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-mod_proxy_html | 0 | 1:2.4.51-39.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-mod_session | 0 | 0:2.4.51-39.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-mod_ssl | 0 | 1:2.4.51-39.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-openssl | 0 | 1:1.1.1k-14.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-openssl-debuginfo | 0 | 1:1.1.1k-14.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-openssl-devel | 0 | 1:1.1.1k-14.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-openssl-libs | 0 | 1:1.1.1k-14.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-openssl-perl | 0 | 1:1.1.1k-14.el7jbcs |
| Red Hat:jboss_core_services:1::el7 | jbcs-httpd24-openssl-static | 0 | 1:1.1.1k-14.el7jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-debuginfo | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-devel | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-ldap | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-ldap-debuginfo | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-mysql | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-mysql-debuginfo | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-nss | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-nss-debuginfo | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-odbc | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-odbc-debuginfo | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-openssl | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-openssl-debuginfo | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-pgsql | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-pgsql-debuginfo | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-sqlite | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-apr-util-sqlite-debuginfo | 0 | 0:1.6.1-101.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-curl | 0 | 0:8.0.1-1.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-curl-debuginfo | 0 | 0:8.0.1-1.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-httpd | 0 | 0:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-httpd-debuginfo | 0 | 0:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-httpd-devel | 0 | 0:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-httpd-manual | 0 | 0:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-httpd-selinux | 0 | 0:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-httpd-tools | 0 | 0:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-httpd-tools-debuginfo | 0 | 0:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-libcurl | 0 | 0:8.0.1-1.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-libcurl-debuginfo | 0 | 0:8.0.1-1.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-libcurl-devel | 0 | 0:8.0.1-1.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-mod_ldap | 0 | 0:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-mod_ldap-debuginfo | 0 | 0:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-mod_proxy_html | 0 | 1:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-mod_proxy_html-debuginfo | 0 | 1:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-mod_session | 0 | 0:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-mod_session-debuginfo | 0 | 0:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-mod_ssl | 0 | 1:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-mod_ssl-debuginfo | 0 | 1:2.4.51-39.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-openssl | 0 | 1:1.1.1k-14.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-openssl-debuginfo | 0 | 1:1.1.1k-14.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-openssl-devel | 0 | 1:1.1.1k-14.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-openssl-libs | 0 | 1:1.1.1k-14.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-openssl-libs-debuginfo | 0 | 1:1.1.1k-14.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-openssl-perl | 0 | 1:1.1.1k-14.el8jbcs |
| Red Hat:jboss_core_services:1::el8 | jbcs-httpd24-openssl-static | 0 | 1:1.1.1k-14.el8jbcs |
| SUSE:Linux Enterprise Micro 5.3 | curl | 0 | 7.79.1-150400.5.12.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP4 | curl | 0 | 7.79.1-150400.5.12.1 |
| Ubuntu:18.04:LTS | curl | 0 | 7.58.0-2ubuntu3.21 |
| Ubuntu:18.04:LTS | curl | 0 | 7.58.0-2ubuntu3.22 |
| Ubuntu:20.04:LTS | curl | 0 | 7.68.0-1ubuntu2.14 |
| Ubuntu:20.04:LTS | curl | 0 | 7.68.0-1ubuntu2.15 |
| Ubuntu:22.04:LTS | curl | 0 | 7.81.0-1ubuntu1.7 |
| Wolfi | curl | 0 | 7.87.0-r0 |
| Wolfi | curl-dev | 0 | 7.87.0-r0 |
| Wolfi | curl-doc | 0 | 7.87.0-r0 |
| Wolfi | curl-oci-entrypoint | 0 | 7.87.0-r0 |
| Wolfi | curl-static | 0 | 7.87.0-r0 |
| Wolfi | libcurl-openssl4 | 0 | 7.87.0-r0 |
| Wolfi | libcurl4 | 0 | 7.87.0-r0 |
| openSUSE:Leap 15.4 | curl | 0 | 7.79.1-150400.5.12.1 |
| openSUSE:Leap Micro 5.3 | curl | 0 | 7.79.1-150400.5.12.1 |
| openSUSE:Tumbleweed | curl | 0 | 7.87.0-1.1 |
Related vulnerabilities
- CVE-2023-27534 A path traversal vulnerability exists in curl <8.0.0 SFTP implementation causes the tilde… Also affects curl
- CVE-2023-27537 A double free vulnerability exists in libcurl <8.0.0 when sharing HSTS data between… Also affects curl
- CVE-2023-27536 An authentication bypass vulnerability exists libcurl <8.0.0 in the connection reuse… Also affects curl
- CVE-2023-27535 An authentication bypass vulnerability exists in libcurl <8.0.0 in the FTP connection… Also affects curl
- CVE-2023-27533 A vulnerability in input validation exists in curl <8.0 during communication using the… Also affects curl
- CVE-2023-23915 A cleartext transmission of sensitive information vulnerability exists in curl <v7.88.0… Also affects curl
- CVE-2023-23916 An allocation of resources without limits or throttling vulnerability exists in curl… Also affects curl
- CVE-2022-43552 A use after free vulnerability exists in curl <7.87.0. Also affects curl