CVE-2026-8458: wrong reuse for different services
What the report claims
curl 8.20.0 incorrectly reuses HTTP Negotiate connections across different service principals when using CURLOPT_SERVICE_NAME, allowing a connection authenticated for one service to be reused for another without a new handshake.
Compare with curl's recorded outcome
Known vulnerability
A real vulnerability: CVE-2026-8458 wrong reuse for different services
Shown for comparison after analysis. The pipeline did not see this label.
ProveIt's finding
The available evidence does not settle the report. A maintainer should investigate.
Why this finding?
- No curl source code was provided for lib/http_negotiate.c or lib/url.c where the HTTP Negotiate connection reuse logic resides
- Deterministic checks confirm the relevant files and symbols exist at the target revision, but their content is needed to verify the claims
- The report is detailed and plausible with specific reproduction steps, but the code that would decide the claims is missing
- External source E1 (RFC 5545) is about iCalendar, not curl or HTTP Negotiate authentication, and does not address CVE-2026-5545
What still needs checking
- Content of lib/http_negotiate.c at revision 1698a3f85799, specifically the connection reuse logic and how it handles STRING_SERVICE_NAME / STRING_PROXY_SERVICE_NAME
- Content of lib/url.c at revision 1698a3f85799, specifically the authenticated connection reuse matching logic
How this analysis ran 5 claims · 0 citations verified
Checked against curl master on 2026-05-08 (1698a3f85799). Test evaluation split. Citation verification checks that a referenced line was in the evidence; it does not prove the model interpreted it correctly.
Review a draft reply to the reporter
Edit and verify before sending.
Thank you for the detailed report. To evaluate this claim, we need to see the connection reuse logic in lib/http_negotiate.c and lib/url.c from the curl-8.20.0 release. The provided deterministic checks confirm these files exist, but their content was not included. Could you provide the relevant sections of these files, particularly where authenticated HTTP connections are matched for reuse and where STRING_SERVICE_NAME / STRING_PROXY_SERVICE_NAME are used in that matching?
Inspect all claims and source code 5 claims · 0 code excerpts
Report claims
curl reuses an HTTP Negotiate-authenticated connection for a later request to the same host even when the requested service principal changes via CURLOPT_SERVICE_NAME
Read the reasoning
The report claims curl reuses an HTTP Negotiate-authenticated connection when the service principal changes via CURLOPT_SERVICE_NAME. However, no curl source code was provided for lib/http_negotiate.c or lib/url.c where the connection reuse logic resides. The deterministic checks confirm these files and symbols exist at the revision, but without the actual code I cannot verify whether the service name is checked during connection reuse.
in lib/http_negotiate.c the connection reuse logic does not treat the service name as part of the authenticated connection identity
Read the reasoning
The report identifies lib/http_negotiate.c as the location where connection reuse logic fails to treat the service name as part of the authenticated connection identity. The file exists per deterministic checks, but its content was not provided, so I cannot confirm or contradict this claim.
using CURLOPT_SERVICE_NAME to request a different service principal on the same host after an initial Negotiate authentication
Read the reasoning
The trigger (using CURLOPT_SERVICE_NAME to request a different service principal on the same host after initial Negotiate authentication) is plausible and CURLOPT_SERVICE_NAME exists per deterministic checks, but without the code showing how this option interacts with connection reuse, I cannot verify the code path.
the reused connection sends no new Authorization header and performs no new Negotiate handshake, causing the second request to be served under the first service's auth context
Read the reasoning
The impact claim (reused connection sends no new Authorization header, no new Negotiate handshake, second request served under first service's auth context) depends on the connection reuse logic which I cannot inspect without the source code.
run curl with two sequential requests using --negotiate --service-name svcA then --negotiate --service-name svcB on the same host; observe reuse message and lack of new Authorization header
Read the reasoning
The reproduction steps are detailed and specific, but I cannot verify they would trigger the described behavior without seeing the connection reuse implementation in lib/http_negotiate.c and lib/url.c.
What the report says about other projects
not addressed CVE-2026-5545 addressed wrong reuse of HTTP Negotiate-authenticated connections but did not cover service-principal changes
Read the original report (excerpt)
Source code
No source code was retrieved for this analysis. The evidence may be incomplete.