HexBrain

curl · Report #3153497

CVE-2025-5025: No QUIC certificate pinning with wolfSSL

Validstatus
mediumseverity
54upvotes
28 May 2025disclosed

How it was found

Summary:

When using wolfSSL as the TLS backend, certificate pinning does not work when using HTTP/3. The code should invoke wssl_verify_pinned(), but it has not been implemented.

Affected version

# curl -V
WARNING: this libcurl is Debug-enabled, do not use in production

curl 8.13.0 (x86_64-pc-linux-gnu) libcurl/8.13.0 wolfSSL/5.8.0 zlib/1.3.1 libidn2/2.3.8 libpsl/0.21.2 ngtcp2/1.13.0-DEV nghttp3/1.1
Release-Date: 2025-04-02
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns mqtt pop3 pop3s rtsp smtp smtps telnet tftp ws wss
Features: alt-svc AsynchDNS Debug HSTS HTTP3 HTTPS-proxy IDN IPv6 Largefile libz PSL SSL threadsafe TrackMemory UnixSockets

Steps To Reproduce:

I will explain using a connection to google.com as an example.

  1. Prepare curl with WolfSSL backend.
  2. curl --http3 https://google.com --pinnedpubkey sha256//ffff

It should result in an error because the specified public key and the certificate's public key are different, but no error occurs.

An error occurs when using HTTP/1.1. An error occurs when the TLS backend is OpenSSL or GnuTLS.

Impact

Bypassing Certificate Pinning.

This report was disclosed publicly on HackerOne and belongs to its author and the program. See the original