CVE-2024-9681
NoneCVSS
—
EPSS
2.0%
Published
Nov 6, 2024
CISA due date
—
Cloudanix analysis
A bug in curl can cause secure connection settings meant for one website to be wrongly applied to its parent site, leading to failed connections or less secure access.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Other
- Component
- Library
- Class
- Other
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The vulnerability allows a subdomain's HSTS expiry time to overwrite the parent domain's cache entry in curl's HSTS cache, resulting in incorrect expiration times for HTTPS enforcement on the parent domain.
Why it matters to the business
Organizations relying on curl for secure HTTP transfers may face connection failures or unintended use of insecure HTTP when HSTS is enabled, potentially disrupting operations or exposing traffic.
How an attack unfolds
An attacker controlling a subdomain responds with a Strict-Transport-Security header that causes its expiry to bleed into the parent domain's cache entry, altering the intended HSTS behavior for the parent domain on subsequent accesses.
How to fix it
Upgrade curl to the version containing commit b1ef0e1a01c0bb6ee5367bd9c186a603bde3615a or later.
How to confirm the fix worked
Verify the installed curl version includes the fix commit or test HSTS cache behavior with subdomains and parent domains to confirm correct expiry isolation.
Typical attack path
- Control a subdomain of a target domain
- Serve HSTS header with crafted max-age from subdomain
- Trigger cache overwrite for parent domain entry
- Cause parent domain to enforce incorrect HTTPS timeout leading to failures or downgrade
How to detect it
Review curl debug logs or HSTS cache files for unexpected expiry timestamps on parent domains after subdomain accesses; no widespread exploitation indicators exist given the low EPSS and non-KEV status.
What your security team should do
- Update curl to the fixed version as soon as possible
- Audit all applications and scripts using curl with HSTS enabled
- Test HSTS cache behavior in staging environments before deployment
The record
When curl is asked to use HSTS, the expiry time for a subdomain might overwrite a parent domain's cache entry, making it end sooner or later than otherwise intended. This affects curl using applications that enable HSTS and use URLs with the insecure `HTTP://` scheme and perform transfers with hosts like `x.example.com` as well as `example.com` where the first host is a subdomain of the second host. (The HSTS cache either needs to have been populated manually or there needs to have been previous HTTPS accesses done as the cache needs to have entries for the domains involved to trigger this problem.) When `x.example.com` responds with `Strict-Transport-Security:` headers, this bug can make the subdomain's expiry timeout *bleed over* and get set for the parent domain `example.com` in curl's HSTS cache. The result of a triggered bug is that HTTP accesses to `example.com` get converted to HTTPS for a different period of time than what was asked for by the origin server. If `example.com` for example stops supporting HTTPS at its expiry time, curl might then fail to access `http://example.com` until the (wrongly set) timeout expires. This bug can also expire the parent's entry *earlier*, thus making curl inadvertently switch back to insecure HTTP earlier than otherwise intended.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Alpine:v3.18 | curl | 0 | 8.11.0-r0 |
| Alpine:v3.19 | curl | 0 | 8.11.0-r0 |
| Alpine:v3.20 | curl | 0 | 8.11.0-r0 |
| Alpine:v3.21 | curl | 0 | 8.11.0-r0 |
| Alpine:v3.22 | curl | 0 | 8.11.0-r0 |
| Chainguard | curl | 0 | 8.11.0-r0 |
| Chainguard | curl-dev | 0 | 8.11.0-r0 |
| Chainguard | curl-doc | 0 | 8.11.0-r0 |
| Chainguard | curl-oci-entrypoint | 0 | 8.11.0-r0 |
| Chainguard | curl-static | 0 | 8.11.0-r0 |
| Chainguard | libcurl-openssl4 | 0 | 8.11.0-r0 |
| Chainguard | libcurl4 | 0 | 8.11.0-r0 |
| Debian:11 | curl | 0 | No fix |
| Debian:12 | curl | 0 | No fix |
| Debian:13 | curl | 0 | No fix |
| Mageia:9 | curl | 0 | 7.88.1-4.4.mga9 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS | curl | 0 | 8.0.1-150400.5.56.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS | curl | 0 | 8.0.1-150400.5.56.1 |
| SUSE:Linux Enterprise Installer Updates 15 SP4 | curl | 0 | 8.0.1-150400.5.56.1 |
| SUSE:Linux Enterprise Installer Updates 15 SP5 | curl | 0 | 8.0.1-150400.5.56.1 |
| SUSE:Linux Enterprise Micro 5.3 | curl | 0 | 8.0.1-150400.5.56.1 |
| SUSE:Linux Enterprise Micro 5.4 | curl | 0 | 8.0.1-150400.5.56.1 |
| SUSE:Linux Enterprise Micro 5.5 | curl | 0 | 8.0.1-150400.5.56.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP5 | curl | 0 | 8.0.1-150400.5.56.1 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP6 | curl | 0 | 8.6.0-150600.4.12.1 |
| SUSE:Linux Enterprise Server 12 SP5-LTSS | curl | 0 | 8.0.1-11.98.1 |
| SUSE:Linux Enterprise Server 15 SP4-LTSS | curl | 0 | 8.0.1-150400.5.56.1 |
| SUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 | curl | 0 | 8.0.1-11.98.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP4 | curl | 0 | 8.0.1-150400.5.56.1 |
| SUSE:Manager Proxy 4.3 | curl | 0 | 8.0.1-150400.5.56.1 |
| SUSE:Manager Server 4.3 | curl | 0 | 8.0.1-150400.5.56.1 |
| Ubuntu:20.04:LTS | curl | 0 | 7.68.0-1ubuntu2.24 |
| Ubuntu:22.04:LTS | curl | 0 | 7.81.0-1ubuntu1.19 |
| Ubuntu:24.04:LTS | curl | 0 | 8.5.0-2ubuntu10.5 |
| Ubuntu:24.10 | curl | 0 | 8.9.1-2ubuntu2.1 |
| Wolfi | curl | 0 | 8.11.0-r0 |
| Wolfi | curl-dev | 0 | 8.11.0-r0 |
| Wolfi | curl-doc | 0 | 8.11.0-r0 |
| Wolfi | curl-oci-entrypoint | 0 | 8.11.0-r0 |
| Wolfi | curl-static | 0 | 8.11.0-r0 |
| Wolfi | libcurl-openssl4 | 0 | 8.11.0-r0 |
| Wolfi | libcurl4 | 0 | 8.11.0-r0 |
| openSUSE:Leap 15.5 | curl | 0 | 8.0.1-150400.5.56.1 |
| openSUSE:Leap 15.6 | curl | 0 | 8.6.0-150600.4.12.1 |
| openSUSE:Leap Micro 5.5 | curl | 0 | 8.0.1-150400.5.56.1 |
| openSUSE:Tumbleweed | curl | 0 | 8.11.0-1.1 |
Related vulnerabilities
- CVE-2024-11053 When asked to both use a `.netrc` file for credentials and to follow HTTP redirects, curl… Also affects curl
- CVE-2024-8096 When curl is told to use the Certificate Status Request TLS extension, often referred to… Also affects curl
- CVE-2023-46219 When saving HSTS data to an excessively long file name, curl could end up removing all… Also affects curl
- CVE-2023-46218 This flaw allows a malicious HTTP server to set "super cookies" in curl that are then… Also affects curl
- CVE-2023-38545 This flaw makes curl overflow a heap based buffer in the SOCKS5 proxy handshake. Also affects curl
- CVE-2023-38546 This flaw allows an attacker to insert cookies at will into a running program using… Also affects curl
- CVE-2023-28322 An information disclosure vulnerability exists in curl <v8.1.0 when doing HTTP(S)… Also affects curl
- CVE-2023-27533 A vulnerability in input validation exists in curl <8.0 during communication using the… Also affects curl