In this scenario, libcurl first uses a proper HTTP/3 server for the initial transfers, and when it makes a second transfer to the same site it has been replaced by the attacker's impostor machine - without a valid certificate.
When libcurl returns to the hostname the second time with a cached SSL session
(CURLOPT_SSL_SESSIONID_CACHE is not disabled) and early data enabled (the
CURLSSLOPT_EARLYDATA bit is set in CURLOPT_SSL_OPTIONS), libcurl might
send off the second request's bytes on that new connection before enforcing
the certificate verification failure. Potentially leaking sensitive
information.
{
"package": "curl",
"URL": "https://curl.se/docs/CVE-2026-9545.json",
"last_affected": "8.20.0",
"issue": "https://hackerone.com/reports/3752888",
"affects": "both",
"severity": "Low",
"www": "https://curl.se/docs/CVE-2026-9545.html",
"CWE": {
"desc": "Exposure of Sensitive Information to an Unauthorized Actor",
"id": "CWE-200"
}
}"https://curl.se/docs/CURL-CVE-2026-9545.json"
"2026-06-24T08:07:08Z"
[
{
"target": {
"file": "lib/vquic/curl_ngtcp2.c",
"function": "cf_ngtcp2_handshake_completed"
},
"id": "CURL-CVE-2026-9545-0d23da02",
"source": "https://github.com/curl/curl.git/commit/7b9613fa9b1a5e04301a3920eef58e8138dad05e",
"signature_type": "Function",
"deprecated": false,
"digest": {
"length": 1860.0,
"function_hash": "153317582380559109273442960860016262309"
},
"signature_version": "v1"
},
{
"target": {
"file": "lib/vquic/curl_ngtcp2.c"
},
"id": "CURL-CVE-2026-9545-54b362b4",
"source": "https://github.com/curl/curl.git/commit/7b9613fa9b1a5e04301a3920eef58e8138dad05e",
"signature_type": "Line",
"deprecated": false,
"digest": {
"threshold": 0.9,
"line_hashes": [
"57837649208692003109394932325481589562",
"148897155669795626335640653234286619658",
"9221967505252324245084890594736647812",
"229339314465024621466349949698476012120",
"316992347216962730835430776133092520281",
"138701791296620101350765089525540312140",
"296327085920196481168568880711169351555",
"5354081226792327714123399886029077496",
"60630981963415792295832576530337112547",
"123864576250417216190818910419145918435",
"142835053885326796857721237189839522787",
"192948789493812143984840421097894964353",
"280733359488708788015184071526492175907",
"111945068324397344898130947918406342943",
"315163984305334991863463999532320024294",
"61010276926023090237519678734162290207",
"49355929218012117922133473512437199901",
"7905145105583230885624546070173304809",
"57003410938242733606680334162856661189",
"299257298584114877497706458750155152547"
]
},
"signature_version": "v1"
},
{
"target": {
"file": "lib/vquic/curl_ngtcp2.c",
"function": "cf_ngtcp2_recv"
},
"id": "CURL-CVE-2026-9545-837feabc",
"source": "https://github.com/curl/curl.git/commit/7b9613fa9b1a5e04301a3920eef58e8138dad05e",
"signature_type": "Function",
"deprecated": false,
"digest": {
"length": 1412.0,
"function_hash": "225529865282307993815272211670638534898"
},
"signature_version": "v1"
},
{
"target": {
"file": "lib/vquic/curl_ngtcp2.c",
"function": "cf_ngtcp2_send"
},
"id": "CURL-CVE-2026-9545-8e6fa72c",
"source": "https://github.com/curl/curl.git/commit/7b9613fa9b1a5e04301a3920eef58e8138dad05e",
"signature_type": "Function",
"deprecated": false,
"digest": {
"length": 2382.0,
"function_hash": "126594513254768600204067746099346311735"
},
"signature_version": "v1"
},
{
"target": {
"file": "lib/vquic/curl_ngtcp2.c",
"function": "cf_ngtcp2_connect"
},
"id": "CURL-CVE-2026-9545-d0afa7aa",
"source": "https://github.com/curl/curl.git/commit/7b9613fa9b1a5e04301a3920eef58e8138dad05e",
"signature_type": "Function",
"deprecated": false,
"digest": {
"length": 2392.0,
"function_hash": "116844867287374578722968671244621372900"
},
"signature_version": "v1"
}
]