✓ProveIt
Examples / Report #2298922 Saved analysis

CVE-2024-0853: OCSP verification bypass with TLS session reuse

curl · 2023-12-2915.3s analysis · $0.009 in model calls

What the report claims

OCSP verification is bypassed during TLS session reuse, allowing acceptance of revoked certificates.

Compare with curl's recorded outcome

Known vulnerability

A real vulnerability: CVE-2024-0853 OCSP verification bypass with TLS session reuse

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 report describes a plausible security issue: OCSP verification bypass during TLS session reuse after a failed check.
  • The provided source code only contains curl_easy_perform and curl_easy_setopt stubs, not the TLS backend implementation where session reuse and OCSP stapling verification occur.
  • The deciding code (session cache logic, OCSP verification, interaction between them) is not present in the provided snippets, so all claims are not_verifiable against the given code.
  • The report includes a concrete reproduction case (ocsptest.ddns.net) and version (8.5.0), making it specific enough to investigate if the relevant code were available.
What still needs checking
  • TLS backend source files (e.g., lib/vtls.c, lib/openssl.c, lib/schannel.c) containing session reuse logic and OCSP stapling verification
  • The specific commit 7cf0391bbc3b5b2e4402ce675124cd73dbe0187e from PR #12418 that the report references
How this analysis ran 5 claims · 0 citations verified

Checked against curl master on 2023-12-29 (69b6953681d3). 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
grounded
no model · 2 references checked out, 0 did not
2 · Claims
NVIDIA-Nemotron-3-Nano-30B-A3B
5 claims · 1394 tokens · $0.0001
3 · Evidence
2 code snippets
real curl source at 69b6953681d3
4 · Judgment
Nemotron-3-Ultra-550b-a55b
5033 tokens · 6.7s · $0.0088
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 detailed report with reproduction steps. The provided code snippets do not include the TLS session reuse and OCSP verification logic needed to evaluate this claim. Could you point to the specific files/functions where session reuse is implemented (e.g., the session cache, SSL_VERIFYPEER handling, and OCSP stapling check)? This will allow us to verify whether OCSP verification is incorrectly skipped on reused sessions.

Inspect all claims and source code 5 claims · 2 code excerpts

Report claims

C1flaw not verifiable

OCSP stapling verification is skipped during TLS session reuse

Read the reasoning

The claim that OCSP stapling verification is skipped during TLS session reuse requires examining the TLS session reuse logic and OCSP verification code. The provided source snippets only show curl_easy_perform and curl_easy_setopt stubs in lib/easy.c and lib/setopt.c. The actual TLS backend implementation (e.g., lib/vtls.c, lib/openssl.c) where session reuse and OCSP verification occur is not provided.

C2location not verifiable

TLS session reuse path in libcurl

Read the reasoning

The TLS session reuse path in libcurl is not present in the provided code snippets. The code that handles session caching and reuse would be in the TLS backend files, which are not included.

C3trigger not verifiable

Reuse an existing TLS session after a failed OCSP check

Read the reasoning

The trigger condition (reusing a TLS session after a failed OCSP check) depends on session reuse logic and OCSP verification flow, neither of which is in the provided source files.

C4impact not verifiable

Revoked certificates are accepted without proper revocation checking

Read the reasoning

The impact claim about revoked certificates being accepted requires verifying the certificate verification path (ssl_verify_cert or equivalent) and how it interacts with session reuse. This code is not provided.

C5reproduction not verifiable

Use curl with --cert-status on a site that has a revoked certificate and reuse the session

Read the reasoning

The reproduction steps are described clearly in the report, but the code path that would be exercised (curl_easy_perform called twice with --cert-status leading to session reuse) cannot be traced because the TLS session handling and OCSP verification code is not in the provided snippets.

Read the original report

Full report on HackerOne ↗

## Summary: In version 8.5.0, cURL has inadvertently established a pathway for accepting revoked certificates. As a result of [this correction](https://github.com/curl/curl/pull/12418/commits/7cf0391bbc3b5b2e4402ce675124cd73dbe0187e), during TLS session reuse, OCSP stapling verification will be skipped. However, the TLS session will be preserved regardless of OCSP verification results. As a result, even for revoked certificates, verification is skipped during TLS session reuse. ## Steps To Reproduce: 1.Identify sites with revoked certificates. 2. `curl (1.URL) (1.URL)--cert-status` I have prepared an environment for testing. Please use as necessary. https://ocsptest.ddns.net/ `curl https://ocsptest.ddns.net/ https://ocsptest.ddns.net/ --cert-status` This website returns only the string "test." * I have used [this](https://curl.se/windows/dl-8.5.0_3/curl-8.5.0_3-win64-mingw.zip) for testing. * To avoid complications with timing dependencies in verification, I have configured the web server to use TLS 1.2. In the case of TLS 1.3, the timing of session preservation is delayed, which appeared to prevent session reuse with the above command line. Here are the execution results. ``` C:\curl-8.5.0_3-win64-mingw\bin>curl https://ocsptest.ddns.net/ https://ocsptest.ddns.net/ --cert-status curl: (91) SSL certificate revocation reason: (UNKNOWN) (-1) test ``` The first request becomes error, but the second one unjustly passes through the normal case. ## Impact Bypassing OCSP verification.

Source code

lib/easy.clines 782–785 · definition of curl_easy_perform
782CURLcode curl_easy_perform(struct Curl_easy *data)
783{
784 return easy_perform(data, FALSE);
785}
lib/setopt.clines 3164–3178 · definition of curl_easy_setopt
3164CURLcode curl_easy_setopt(struct Curl_easy *data, CURLoption tag, ...)
3165{
3166 va_list arg;
3167 CURLcode result;
3168
3169 if(!data)
3170 return CURLE_BAD_FUNCTION_ARGUMENT;
3171
3172 va_start(arg, tag);
3173
3174 result = Curl_vsetopt(data, tag, arg);
3175
3176 va_end(arg);
3177 return result;
3178}