Home
Blog
Crypto bug reminder – “The devil’s in the details”

Crypto bug reminder – “The devil’s in the details”

Paul Ducklin
01/09/2026
Share this article:

Powerful and prevalent

You may never have heard of the popular open-source tool curl, but even if you know about it, you may not be aware just how widely your digital life depends on it.

The name is shorthand for client for URLs, because that’s what it is, and was originally styled cURL to reflect this fact.

These days it’s now known simply as curl, all in lower case, because that’s the name of the command-line tool that lets you use it directly.

The curl project’s leader and primary contributor is Daniel Stenberg, who started it way back in 1998, and it consists of two main parts:

  • libcurl. A programming library you can build into your own applications so that you can call curl’s download functions directly. Although most people probably use curl for web downloads (HTTP and HTTPS), the project optionally supports a huge range of protocols, including FTP, IMAP, LDAP, MQTT, POP3, RTMP, SMTP, and their secure cousins (using TLS or SSH for secure transport). In fact, curl even supports the venerable GOPHER protocol, the early-1990s internet document retrieval system that was superseded by the World Wide Web.
  • curl. A command-line program that itself uses libcurl, so you can take advantage of the product’s features in Bash or PowerShell scripts, or simply to do one-off downloads directly, for example, to fetch the latest version of a software package without using your browser.

As an example, consider this simple command, which uses the current version of curl to find and download the latest Windows release:


curl --follow "https://curl.se/windows/latest.cgi?
   p=win64-mingw.zip"

Beware. Don’t try to replace curl.exe in the %SystemRoot%\System32 directory, even if it looks outdated (at the time of writing, this file identified itself as 8.16.0, while the newest release was 8.18.0). That file comes from Microsoft and is managed by Windows Update. For a self-managed curl on Windows, you’ll need to create a directory of your own in which to keep its files.

But curl is much more widespread than just being part of Windows, macOS, and most Linux/BSD distros.

Many Internet of Things (IoT) devices, such as SoHo routers (including those that are secretively locked down and managed by your service provider), include and use curl, because of its power and usefulness.

As the project’s own site points out:

[C]url is used in command lines or scripts to transfer data. [C]url is also libcurl, used in cars, television sets, routers, printers, audio equipment, mobile phones, tablets, medical devices, settop boxes, computer games, media players and is the internet transfer engine for countless software applications in over twenty billion installations.

[C]url is used daily by virtually every Internet-using human on the globe.

Tackling the supply chain

Like most modern software packages, curl is vulnerable to what are known in the jargon as supply-chain risks, because it doesn’t implement all the functionality it needs by itself.

Instead, it relies on hooking up with a range of other software projects to provide some of its low-level features.

Some of the dependencies of curl, which can be selected when you build the software from its own source code, include backend libraries for:

  • Cryptography. This covers both TLS, which puts the S in HTTPS, SMTPS and friends, and SSH, the world’s primary protocol for remote logins and secure server-to-server file transfer. You can choose from OpenSSL, wolfSSL, gnutls, libssh, libssh2, and more. (Confusingly, perhaps, libssh2 isn’t an updated version of libssh, but a completely separate project providing an independent implementation of the SSH protocol.)
  • DNS-related libraries. These convert server names such as example.com to network numbers like 198.51.100.42, and handle Internationized Domain Names (IDNs) such as .δοκιμή, the Greek equivalent of .test.
  • HTTP/2 and HTTP/3. These are modern web connection flavors that speed up HTTP and HTTPS transfers. Numerous third-party libraries can be used, including nghttp2, ngtcp2/nghttp3, and quiche.
  • Data compression. Web servers commonly use a range of standardized compression schemes (with names such as zlib, brotli, and zstd) to save storage space and download time.

Crypto is hard

As a reminder that [a] cryptography is hard, and [b] keeping track of software dependencies is vital, curl‘s latest update patches six security holes, all of which are cryptographic in nature.

And although none of the bugs were down to vulnerabilities in third-party code itself, five of then were tied to specific build-time library combinations.

In other words, how to find out which dependencies were selected when your version of curl was built is a handy thing to know.

The patches were issued to fix the following bugs:

CVE-2025-15079: Libssh global known_hosts override.
If you had OpenSSH installed on your computer (it’s part of most Linux/BSD distros, macOS, and Windows), and had told the system version to trust specific servers automatically, curl would silently trust those known_hosts, even if you specifically told it not to. Most curl builds use libssh2, where this bug doesn’t apply.

CVE-2025-15224: Libssh key passphrase bypass without agent set.
If you had OpenSSH running in the background already, and set it up to sidestep authentication for some logins (for example, to support specific automation purposes), curl would also sidestep authentication, even if you specifically told it not to. Most curl builds use libssh2, where this bug doesn’t apply.

CVE-2025-14819: OpenSSL partial chain store policy bypass.
This bug meant that curl would sometimes trust cryptographic certificates that had been cached in memory for performance reasons, even when asked to verify them fresh every time. (The cache lasts 24 hours, so the unchecked certificates would nevertheless have been fully verified at some point in the past day.) Many if not most Linux builds of curl use OpenSSL, but Windows builds tend to use Schannel, Microsoft’s own cryptographic toolkit.

CVE-2025-14524: Bearer token leak on cross-protocol redirect.
This esoteric bug caused a cryptographic authentication cookie supplied by one server (essentially a get-straight-in password) to be leaked to another, if a web download using HTTPS was redirected to IMAP, LDAP, POP3, or SMTP. Web cookies of any sort, not just security-critical authentication tokens, are only ever supposed to be submitted to the server that sent them out in the first place. This bug applied to any build that could handle both HTTPS and one or more of the four abovementioned protocols to redirect to, no matter which backend libraries were used.

CVE-2025-14017: Broken TLS options for threaded LDAPS.
Secure LDAP queries triggered in parallel would all follow the security settings of the most recent lookup started, even if earlier queries had started off by choosing stricter options. LDAP is usually used to look up users and services on a network; indeed, Windows Active Directory is based on it. However, this bug doesn’t apply to curl builds that use Microsoft’s own WinLDAP library, or the popular OpenLDAP alternative. Only builds that stick to the legacy built-in LDAP code in curl are affected.

CVE-2025-13034: No QUIC certificate pinning with GnuTLS.
When using HTTP/3, downloads that were supposed to be locked to a specific server security certificate (this helps to prevent unexpected “cryptographic snooping” by corporate firewalls or proxies) would accept any valid certificate instead, although invalid certificates would still be rejected. Only curl builds based on ngtcp2/nghttp3 and gnutls were affected.

What to do?

Update curl as soon as you can.

Windows users who rely on the system version of curl will have to wait for Microsoft to catch up, although the current Windows verion (8.16.0 at the time of writing) appears mostly invulnerable, because it doesn’t use libssh, OpenSSL, legacy LDAP, or gnutls.

As mentioned above, it’s useful to know how to check quickly for the details of which backends any curl build uses, which you can do with the --version option, for example like this:


On Windows:

C:\Users\duck> curl --version

curl 8.16.0 (Windows) libcurl/8.16.0 Schannel
   zlib/1.3.1 WinIDN
Release-Date: 2025-09-10
Protocols: dict file ftp ftps gopher gophers http
   https imap imaps ipfs ipns ldap ldaps mqtt pop3
   pop3s smb smbs smtp smtps telnet tftp ws wss
Features: alt-svc AsynchDNS HSTS HTTPS-proxy IDN
   IPv6 Kerberos Largefile libz NTLM SPNEGO SSL 
   SSPI threadsafe  Unicode UnixSockets

In theory, this version might be at risk of CVE-
2025-14524, which is a bug that depends on curl 
code only. But it doesn't seem to use any of the 
necessary library combinations for the other
bugs listed above.


On Linux:

duck:~$ curl --version

curl 8.18.0 (x86_64-pc-linux-gnu) libcurl/8.18.0
   OpenSSL/3.5.4 zlib/1.3.1 brotli/1.2.0
   zstd/1.5.7  c-ares/1.34.6 libidn2/2.3.8
   libpsl/0.21.5 libssh2/1.11.1  nghttp2/1.68.0
   nghttp3/1.14.0 mit-krb5/1.22.1 OpenLDAP/2.6.10
Release-Date: 2026-01-07
Protocols: dict file ftp ftps gopher gophers http 
   https imap  imaps ipfs ipns ldap ldaps mqtt 
   pop3 pop3s rtsp scp sftp  smb smbs smtp smtps 
   telnet tftp ws wss
Features: alt-svc AsynchDNS brotli GSS-API HSTS 
   HTTP2 HTTP3 HTTPS-proxy IDN IPv6 Kerberos 
   Largefile libz NTLM PSL  SPNEGO SSL threadsafe 
   TLS-SRP UnixSockets zstd

This quickly confirms that none of libssh, legacy 
LDAP or gnutls are in use. However, all bugs 
listed above are patched anyway because this is 
8.18.0, released this week.

Paul Ducklin
Paul Ducklin
01/09/2026
Share this article:

Table of contents:

The world doesn’t need another traditional MSSP 
or MDR or XDR.

What it requires is practicality and reason.

Related articles

Choose identity-first managed security.

We start with identity and end with transparency — protecting where attacks begin and keeping you informed, with as much visibility as you want. No black boxes, just clear, expert-driven security.
No more paying for useless bells and whistles.
No more time wasted on endless security alerts.
No more juggling multiple technologies and contracts.

Follow us!

Subscribe

Join our newsletter to stay up to date on features and releases.

By subscribing you agree to our Privacy Policy and provide consent to receive updates from our company.

©
2026
SolCyber. All rights reserved
|
Made with
by
Jason Pittock

I am interested in
SolCyber XDR++™

I am interested in
SolCyber MDR++™

I am interested in
SolCyber Extended Coverage™

I am interested in
SolCyber Foundational Coverage™

I am interested in a
Free Demo

13122