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.
- Prepare curl with WolfSSL backend.
- 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.