CVE-2021-22926: CURLOPT_SSLCERT mixup with Secure Transport
What the report claims
libcurl Secure Transport SSL backend fails to secure CURLOPT_SSLCERT against current directory file overriding the keychain nickname specified, leading to denial of service.
Compare with curl's recorded outcome
Known vulnerability
A real vulnerability: CVE-2021-22926 CURLOPT_SSLCERT mix-up with Secure Transport
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?
- The curl_source section contains no code, so the Secure Transport backend implementation cannot be examined.
- The central claim (C1) about missing keychain-vs-local-file preference checks requires reading the Secure Transport backend code (likely lib/vtls/sectransp.c), which is not provided.
- The deterministic checks only confirm CURLOPT_SSLCERT exists, not the backend logic.
- A human needs to inspect the Secure Transport backend at revision 55a13f500e38 to verify whether it lacks the check that NSS backend reportedly has.
What still needs checking
- Secure Transport backend source code (likely lib/vtls/sectransp.c) at revision 55a13f500e38
- The certificate loading function that handles CURLOPT_SSLCERT in the Secure Transport backend
How this analysis ran 5 claims · 0 citations verified
Checked against curl master on 2021-06-15 (55a13f500e38). 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 report. To assess this, we need the Secure Transport backend code (likely lib/vtls/sectransp.c) from the revision you tested. The provided materials do not include that file. Could you confirm the exact file and function where CURLOPT_SSLCERT is handled for Secure Transport, or provide a link to that code at the relevant commit?
Inspect all claims and source code 5 claims · 0 code excerpts
Report claims
Secure Transport backend does not prevent local file override of CURLOPT_SSLCERT keychain nickname
Read the reasoning
The Secure Transport backend code (likely in lib/vtls/sectransp.c or similar) is not provided in the curl_source section. Without the actual implementation, I cannot verify whether it lacks a check to prefer keychain nicknames over local files. The deterministic checks only confirm CURLOPT_SSLCERT exists, not the Secure Transport backend logic.
Secure Transport SSL backend code
Read the reasoning
The location 'Secure Transport SSL backend code' is not specific enough to verify without the actual file. The curl_source section contains no code, so I cannot confirm which file implements the Secure Transport backend or its relevant functions.
Creating a file named 'testcert' in the current directory while using a keychain nickname 'testcert'
Read the reasoning
The trigger describes a plausible attack scenario, but without the Secure Transport backend code, I cannot confirm whether creating a local file named 'testcert' would actually override the keychain nickname 'testcert' in the certificate loading logic.
Denial of service when attempting to load the certificate
Read the reasoning
The impact (denial of service with error 'OSStatus -50') depends on the unverified trigger. Without code showing the certificate loading path and error handling, I cannot confirm this impact occurs as described.
Steps to reproduce involve building curl with Secure Transport, using a keychain certificate, creating a file named testcert, and observing the error
Read the reasoning
The reproduction steps are clear, but they cannot be validated against the code because the Secure Transport backend implementation is not provided. The deterministic checks do not cover the Secure Transport backend files.
Deterministic checks that failed
- file lib/vtls/nss.c existed in curl's history but not at bc677a8f16a5
Read the original report
Source code
No source code was retrieved for this analysis. The evidence may be incomplete.