✓ProveIt
Examples / Report #2199174 Saved analysis

[Critical] Curl CVE-2023-38545 vulnerability code changes are disclosed on the internet

curl · 2023-10-1015.0s analysis · $0.009 in model calls

What the report claims

The report claims that an integer overflow in curl_easy_setopt() can be exploited to execute arbitrary code, and that this flaw was fixed in curl 8.4.0 by checking the timeout argument before passing it to the internal curl function.

Compare with curl's recorded outcome

Labeled AI slop

curl's maintainer lists this report as AI slop

Shown for comparison after analysis. The pipeline did not see this label.

ProveIt's finding

References do not check out

Key code references could not be verified in the targeted curl version.

Why this finding?
  • The reported vulnerable function curl_easy_setopt() with CURLOPT_TIMEOUT overflow handling does not exist in curl. The actual implementation at lib/setopt.c:3191-3205 only validates the data pointer and calls Curl_vsetopt.
  • The fix functions curl_easy_setopt_timeout and curl_easy_setopt_custom cited in the report do not exist in any curl release since 7.50 per deterministic checks.
  • The report's code snippet appears fabricated; no integer overflow vulnerability exists in the real curl_easy_setopt.
  • The claimed CVE-2023-38545 fix commit 9414975 and version 8.4.0 are not reflected in the provided source code at the checked revision.
How this analysis ran 5 claims · 5 citations verified

Checked against curl master on 2023-10-10 (f64ecb2bc0db). Dev evaluation split. Citation verification checks that a referenced line was in the evidence; it does not prove the model interpreted it correctly.

1 · Grounding
not grounded
no model · 8 references checked out, 2 did not
2 · Claims
NVIDIA-Nemotron-3-Nano-30B-A3B
5 claims · 1786 tokens · $0.0002
3 · Evidence
1 code snippets
real curl source at f64ecb2bc0db
4 · Judgment
Nemotron-3-Ultra-550b-a55b
5393 tokens · 7.1s · $0.0091
5 · Receipts
5 of 5 citations verified
every citation must point at code the judge was shown
Review a draft reply to the reporter

Edit and verify before sending.

The code you describe for curl_easy_setopt() and its fix does not exist in curl. The actual function at lib/setopt.c:3191-3205 only checks for a null handle and delegates to Curl_vsetopt — there is no CURLOPT_TIMEOUT case, no timeout extraction, and no overflow check. The helper functions curl_easy_setopt_timeout and curl_easy_setopt_custom are not present in any curl release. Please provide a concrete reproduction against a real curl version, or clarify which function and version you are referring to.

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

Report claims

C1flaw contradicted

integer overflow in curl_easy_setopt()

Read the reasoning

The report claims an integer overflow in curl_easy_setopt() when handling CURLOPT_TIMEOUT with a crafted timeout value. The actual source code at lib/setopt.c:3191-3205 shows a completely different function that takes (struct Curl_easy *data, CURLoption tag, ...), checks only for null data pointer, and delegates to Curl_vsetopt. There is no switch statement, no CURLOPT_TIMEOUT case, no timeout variable extraction, and no overflow check. The deterministic checks confirm curl_easy_setopt_timeout and curl_easy_setopt_custom do not exist in any curl release since 7.50, contradicting the reported fix code.

C2location contradicted

curl_easy_setopt() function

Read the reasoning

While curl_easy_setopt exists, its implementation (lib/setopt.c:3191-3205) does not match the report's description. The report describes a function with a switch on option handling CURLOPT_TIMEOUT by extracting a long timeout and checking for overflow. The real function has none of that.

C3trigger contradicted

passing a crafted timeout value that causes overflow

Read the reasoning

The trigger claims an attacker can pass a crafted timeout value causing overflow. The actual code path shows curl_easy_setopt does not extract or validate any timeout value; it passes the va_list directly to Curl_vsetopt. No such attack surface exists in the provided code.

C4impact contradicted

arbitrary code execution or denial of service

Read the reasoning

Since the claimed integer overflow vulnerability does not exist in the actual curl_easy_setopt implementation, the claimed impact of arbitrary code execution or denial of service has no basis in the provided code.

C5reproduction not verifiable

searching Bard for the vulnerability and using disclosed commit details to craft an exploit

Read the reasoning

The reproduction claim describes searching an AI (Bard) for undisclosed vulnerability information and using commit details to craft an exploit. This is not a verifiable code path in curl; it describes the reporter's research method. The commit 9414975 and the described fix code are not present in the provided repository state.

Deterministic checks that failed

  • symbol curl_easy_setopt_timeout does not exist in any curl release since 7.50
  • symbol curl_easy_setopt_custom does not exist in any curl release since 7.50
Read the original report (excerpt)

Full report on HackerOne ↗

## Summary: Curl CVE-2023-38545 vulnerability code changes are disclosed on the internet ## Steps To Reproduce: To replicate the issue, I have searched in the Bard about this vulnerability. It disclosed what this vulnerability is about, code changes made for this fix, who made these changes, commit details etc even though this information is not released yet on the internet. In addition to it, I was able to easily craft the exploit based on the information available. Remove this information from the internet ASAP!!!! Vulnerability information: The vulnerability is caused by an integer overflow in the curl_easy_setopt() function. The vulnerability can be exploited by an attacker to execute arbitrary code on a vulnerable system. The vulnerability is fixed in curl 8.4.0 and higher. Code fixes: The following code changes fixed CVE-2023-38545 in curl: C /* * CVE-2023-38545: Integer overflow in curl_easy_setopt() * * This vulnerability could be exploited to cause a denial-of-service attack or * to execute arbitrary code on the victim's system. * * The following code changes fix this vulnerability by checking the value of the * timeout argument before passing it to the internal curl function. */ #include "curl.h" /* * curl_easy_setopt() * * Sets an option value for a curl handle. * * @param handle The curl handle. * @param option The option to set. * @param param The value to set the option to. * * @return CURLE_OK on success, or a curl error code on failure. */ CURLcode curl_easy_setopt(CURL *handle, CURLoption option, ...) { va_list param; CURLcode ret; va_start(param, option); switch (option) { case CURLOPT_TIMEOUT: { long timeout = va_arg(param, long); /* Check for integer overflow. */ if (timeout < 0 || timeout > LONG_MAX) { va_end(param); return CURLE_BAD_FUNCTION_ARGUMENT; } ret = curl_easy_setopt_timeout(handle, timeout); break; } default: ret = curl_easy_setopt_custom(handle, option, param); break; } va_end(param); return ret; } Use code with caution. Learn more These code changes were made in commit 9414975, which was released in curl version 8.4.0. Who made these changes and commit details: The code changes to fix CVE-2023-38545 were made by Dxxxxl Sxxxxg, the maintainer of curl. The changes were made in commit 9414975, which was r …

Source code

lib/setopt.clines 3191–3205 · definition of curl_easy_setopt
3191CURLcode curl_easy_setopt(struct Curl_easy *data, CURLoption tag, ...)
C1: Actual curl_easy_setopt implementation shows no integer overflow handling for CURLOPT_TIMEOUT; it only validates data pointer and calls Curl_vsetopt
C2: Function exists but signature and body differ entirely from report's description
C3: No timeout parameter extraction or validation occurs in curl_easy_setopt
C4: No vulnerability exists in the actual function to enable code execution or DoS
3192{
3193 va_list arg;
3194 CURLcode result;
3195
3196 if(!data)
C1: Only check is if(!data) return CURLE_BAD_FUNCTION_ARGUMENT; no timeout variable or overflow check exists
3197 return CURLE_BAD_FUNCTION_ARGUMENT;
3198
3199 va_start(arg, tag);
3200
3201 result = Curl_vsetopt(data, tag, arg);
3202
3203 va_end(arg);
3204 return result;
3205}