CVE-2019-5443: Windows Privilege Escalation: Malicious OpenSSL Engine
What the report claims
The curl Windows binaries load an insecure OpenSSL configuration path (c:\usr\local\ssl) that low-privileged users can control, allowing arbitrary code execution via a malicious OpenSSL engine.
Compare with curl's recorded outcome
Known vulnerability
A real vulnerability: CVE-2019-5443 Windows OpenSSL engine code injection
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 the relevant revision (29177f422a55), making it impossible to verify whether curl uses a hardcoded c:\usr\local\ssl path for OpenSSL configuration loading.
- The deterministic checks only confirm generic symbols exist, not the OpenSSL engine loading mechanism or configuration path handling.
- External source E2 confirms OpenSSL's default is /usr/local/ssl, which on Windows could map to c:\usr\local\ssl, but this does not prove curl uses that default.
- Privilege escalation claim is unsubstantiated: the report does not show curl runs with elevated privileges (e.g., as SYSTEM or via a service). Step 6 merely says 'Execute curl.exe as a different user' without establishing that user has higher privileges.
- A human reviewer needs to examine curl's Windows build configuration and OpenSSL integration code (likely in lib/vtls/openssl.c or similar) to determine if the vulnerability exists.
What still needs checking
- curl source code for OpenSSL configuration loading on Windows (likely lib/vtls/openssl.c or similar)
- curl build scripts showing OPENSSLDIR handling for Windows builds
- Evidence that curl runs with elevated privileges in the reported scenario
How this analysis ran 6 claims · 0 citations verified
Checked against curl master on 2019-06-12 (29177f422a55). Dev 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. We cannot verify the claims because the curl source code for OpenSSL configuration loading on Windows was not available in our analysis. To proceed, we need to see the relevant code (likely in lib/vtls/openssl.c) that handles OPENSSLDIR and openssl.cnf loading. Also, the privilege escalation requires curl to run with higher privileges than the attacker — could you clarify the scenario where curl executes with elevated rights (e.g., as a service, scheduled task, or via runas)?
Inspect all claims and source code 6 claims · 0 code excerpts
Report claims
curl loads openssl.cnf from a hardcoded insecure path (c:\usr\local\ssl) on Windows
Read the reasoning
No curl source code was provided to verify whether curl loads openssl.cnf from c:\usr\local\ssl on Windows. The deterministic checks only confirm generic symbols exist, not the OpenSSL configuration loading logic.
The insecure path is set during the build via the OPENSSLDIR parameter
Read the reasoning
No build scripts or curl source code showing OPENSSLDIR handling was provided. External source E2 confirms OpenSSL's default is /usr/local/ssl, but does not show curl's build uses this.
A low-privileged user can create a folder at c:\usr\local\ssl and place a malicious openssl.cnf file there
Read the reasoning
While external sources E3-E5 discuss Windows directory permissions generally, they do not specifically confirm low-privileged users can create c:\usr\local\ssl. More importantly, without curl code showing it reads from this path, the trigger cannot be verified.
When curl executes, it loads the malicious OpenSSL engine library (e.g., calc.dll) and executes arbitrary code with the user's privileges
Read the reasoning
No curl source code showing OpenSSL engine loading via openssl.cnf or dynamic_path was provided. The claim depends on curl's OpenSSL integration code which is absent.
Steps to reproduce involve creating c:\usr\local\ssl, placing a crafted openssl.cnf with a dynamic_path pointing to a malicious DLL, and running curl
Read the reasoning
Reproduction steps depend on curl behavior that cannot be verified without the relevant curl source code.
The loaded engine library runs with the full authority of the account executing curl, enabling privilege escalation
Read the reasoning
Privilege escalation requires curl to run with higher privileges than the attacker (e.g., as SYSTEM or another user). The report's step 6 says 'Execute curl.exe as a different user' but does not establish that this different user has higher privileges. Without curl code or a demonstrated escalation path, this claim is unverifiable.
What the report says about other projects
not addressed The path c:\usr\local\ssl is the default insecure OpenSSL configuration directory on Windows
confirmed OpenSSL default configuration directory is /usr/local/ssl (Unix path), overridable with --openssldir
“If --openssldir is not specified, the the default /usr/local/ssl is used.” source
not addressed Low-privileged Windows users can create directories under c:\
Read the original report (excerpt)
Source code
No source code was retrieved for this analysis. The evidence may be incomplete.