CVE-2023-23915
Medium · 6.5CVSS
6.5
EPSS
0.9%
Published
Feb 23, 2023
CISA due date
—
Cloudanix analysis
A flaw in the curl tool can cause it to send information over ordinary web connections instead of secure ones when several downloads happen at the same time, potentially letting eavesdroppers see data that should have been protected.
- 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
HSTS cache file overwrite during parallel transfers in curl <7.88.0 causes subsequent HTTP requests to a previously HSTS-protected host to remain unupgraded, transmitting data in cleartext.
Why it matters to the business
Organizations using curl for automated or concurrent transfers risk unintended exposure of credentials, tokens, or other sensitive data over unencrypted channels, increasing regulatory and reputational exposure especially in high-volume scripting environments.
How an attack unfolds
An attacker positions themselves to observe traffic and triggers an application to issue multiple parallel curl transfers; the resulting HSTS cache corruption allows a later HTTP request to the same host to proceed without HTTPS upgrade, enabling passive interception.
How to fix it
Upgrade curl to the version containing commit 3027611ca6d4cc5510d2d0fccc3e5a074e09a2fb (curl 7.88.0 or newer). Rebuild any statically linked binaries and retest parallel transfer workloads. Where immediate upgrade is impossible, serialize transfers or disable HSTS temporarily.
How to confirm the fix worked
Confirm curl version reports 7.88.0 or later; execute a test with multiple parallel transfers to an HSTS host followed by an HTTP request and verify the request is upgraded to HTTPS.
Typical attack path
- Identify or influence an application or script that performs concurrent curl transfers to multiple hosts including one that uses HSTS.
- Cause the application to issue parallel requests so that the final HSTS cache write overwrites entries for the target host.
- Observe or force a subsequent HTTP-only request to the same hostname.
- Intercept the resulting cleartext traffic to capture sensitive information.
How to detect it
Review application logs for sequences of parallel curl transfers followed by HTTP requests to previously protected hosts; correlate with network captures showing unexpected HTTP instead of HTTPS to HSTS domains.
What your security team should do
- Prioritize upgrade of all curl instances to 7.88.0+ within 30 days given the 1331 days since disclosure.
- Audit scripts and libraries performing concurrent transfers for HSTS reliance.
- Add curl version checks to build pipelines and container images.
- Monitor EPSS trend (currently low but rising) and re-evaluate if new exploit code appears.
The record
A cleartext transmission of sensitive information vulnerability exists in curl <v7.88.0 that could cause HSTS functionality to behave incorrectly when multiple URLs are requested in parallel. 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. This HSTS mechanism would however surprisingly fail when multiple transfers are done in parallel as the HSTS cache file gets overwritten by the most recentlycompleted transfer. A later HTTP-only transfer to the earlier host name would then *not* get upgraded properly to HSTS.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Alpine:v3.14 | curl | 0 | 7.79.1-r5 |
| Alpine:v3.15 | curl | 0 | 7.80.0-r6 |
| Alpine:v3.16 | curl | 0 | 7.83.1-r6 |
| Alpine:v3.17 | curl | 0 | 7.87.0-r2 |
| Alpine:v3.18 | curl | 0 | 7.88.0-r0 |
| Alpine:v3.19 | curl | 0 | 7.88.0-r0 |
| Alpine:v3.20 | curl | 0 | 7.88.0-r0 |
| Alpine:v3.21 | curl | 0 | 7.88.0-r0 |
| Alpine:v3.22 | curl | 0 | 7.88.0-r0 |
| Debian:11 | curl | 0 | No fix |
| Debian:12 | curl | 0 | 7.88.1-1 |
| Debian:13 | curl | 0 | 7.88.1-1 |
| 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.15.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP4 | curl | 0 | 7.79.1-150400.5.15.1 |
| Ubuntu:18.04:LTS | curl | 0 | 7.58.0-2ubuntu3.23 |
| Ubuntu:20.04:LTS | curl | 0 | 7.68.0-1ubuntu2.16 |
| Ubuntu:22.04:LTS | curl | 0 | 7.81.0-1ubuntu1.8 |
| openSUSE:Leap 15.4 | curl | 0 | 7.79.1-150400.5.15.1 |
| openSUSE:Leap Micro 5.3 | curl | 0 | 7.79.1-150400.5.15.1 |
| openSUSE:Tumbleweed | curl | 0 | 7.88.1-1.1 |
Related vulnerabilities
- CVE-2023-27533 A vulnerability in input validation exists in curl <8.0 during communication using the… Also affects curl
- CVE-2022-43551 A vulnerability exists in curl <7.87.0 HSTS check that could be bypassed to trick it to… Also affects curl
- CVE-2022-27782 libcurl would reuse a previously created connection even when a TLS or SSHrelated option… Also affects curl
- CVE-2022-27781 libcurl provides the `CURLOPT_CERTINFO` option to allow applications torequest details to… Also affects curl
- CVE-2022-27774 An insufficiently protected credentials vulnerability exists in curl 4.9 to and include… Also affects curl
- CVE-2022-27775 An information disclosure vulnerability exists in curl 7.65.0 to 7.82.0 are vulnerable… Also affects curl
- CVE-2022-22576 An improper authentication vulnerability exists in curl 7.33.0 to and including 7.82.0… Also affects curl
- CVE-2021-22946 A user can tell curl >= 7.20.0 and <= 7.78.0 to require a successful upgrade to TLS when… Also affects curl