✓ProveIt
Examples / Report #1234760 Saved analysis

CVE-2021-22926: CURLOPT_SSLCERT mixup with Secure Transport

curl · 2021-06-156.8s analysis · $0.006 in model calls

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

Needs human review

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.

1 · Grounding
partially grounded
no model · 1 references checked out, 1 did not
2 · Claims
NVIDIA-Nemotron-3-Nano-30B-A3B
5 claims · 1393 tokens · $0.0002
3 · Evidence
0 code snippets
real curl source at 55a13f500e38
4 · Judgment
Nemotron-3-Ultra-550b-a55b
3223 tokens · 4.7s · $0.0060
5 · Receipts
0 of 0 citations verified
every citation must point at code the judge was shown
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

C1flaw not verifiable

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.

C2location not verifiable

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.

C3trigger not verifiable

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.

C4impact not verifiable

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.

C5reproduction not verifiable

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

Full report on HackerOne ↗

## Summary: libcurl Secure Transport SSL backend fails to secure the `CURLOPT_SSLCERT` against current directory file overriding the keychain nickname specified. This leads to the possibility of locally created file overriding the `CURLOPT_SSLCERT` specified certificate and thus causing denial of service. ## Steps To Reproduce: 1. Configure and build curl against Secure Transport: `configure --with-secure-transport && make` 2. Have keychain with client certificate called "testcert" 3. Use testcert from keychain to authenticate: `./src/curl -E testcert https://testsite` 4. In current directory execute `touch testcert` 5. Try authenticating again `./src/curl -E testcert https://testsite` `curl: (58) SSL: Can't load the certificate "testcert" and its private key: OSStatus -50` The issue stems from the fact that Secure Transport backend code doesn't seem to prefer the keychain over the local file. The documentation says that local file should be prefixed with "./" when used, but the code doesn't have any such checks. Interestingly NSS SSL backend does have the check: https://github.com/curl/curl/blob/master/lib/vtls/nss.c#L432 The impact of this vulnerability is rather limited: In practice it seems to be only usable in causing denial of service against applications using keychain client certificates. It could happen in practice for example if executing command in /tmp directory structure or home directory of another user. The user would be able to prevent the app from creating an authenticated connection by creating a file with matching name used for the keychain nickname used by the app. ## Impact Denial of service

Source code

No source code was retrieved for this analysis. The evidence may be incomplete.