Skip to main content

curl CVE-2026-87866

MEDIUM
2026-10-14
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Gain man-in-the-middle position on client traffic
  2. Delivery
    Present substitute server certificate
  3. Exploit
    Trigger faulty wolfSSL pin comparison
  4. Execution
    Pinning check wrongly passes
  5. Impact
    Intercept or alter transferred data

Vulnerability Assessment

Exploitation Conditions

Exploitation requires three conjunctive conditions: (1) libcurl must be built with the wolfSSL TLS backend - builds using OpenSSL, GnuTLS, Schannel, or other backends are unaffected; (2) the calling application must have explicitly enabled public-key pinning via CURLOPT_PINNEDPUBLICKEY (or the --pinnedpubkey tool option), which is a non-default, opt-in hardening feature; and (3) the attacker must already hold a man-in-the-middle position capable of presenting an alternate server certificate. The flaw does not create interception capability on its own - it only nullifies the pinning layer meant to detect such interception. Limiting factors that reduce real-world risk: the wolfSSL-specific build requirement, the explicit pinning configuration requirement, and the prerequisite MITM network position. Affected versions run up to 8.22.0 and are fixed in curl 8.23.0.

Impact

No CVSS vector, EPSS score, KEV listing, or POC is provided for CVE-2026-87866, so quantitative exploitation signals are entirely absent and cannot be cross-referenced. The authoritative source - the curl security team - rates this vulnerability LOW severity, which is the strongest available signal and aligns with the nature of the flaw: a bypass of the optional CURLOPT_PINNEDPUBLICKEY public-key pinning defense in libcurl builds using the wolfSSL TLS backend. Pinning is a defense-in-depth control, so bypassing it does not by itself grant access - an attacker must independently be positioned to present a substitute server certificate (a man-in-the-middle capability), meaning this lowers a hardening layer rather than opening a direct exploit path. This is NOT a high-priority, mass-exploitable issue: it is low severity, requires a non-default feature (pinning) to be configured, requires a specific TLS backend (wolfSSL), and requires an attacker already in a privileged network position. It warrants routine patching to curl 8.23.0, especially in embedded/IoT fleets that both use wolfSSL and rely on pinning, but it is not an emergency. Note that curl and libcurl are described by the vendor as being in over twenty billion installations, so even a low-severity flaw has an unusually large installed base - however, the wolfSSL-backed-plus-pinning configuration is a minority of that base.

Exploit ScenarioDerived

An attacker able to intercept TLS traffic (e.g., on a shared or hostile network) presents a server certificate with a public key different from the one the client application pinned via CURLOPT_PINNEDPUBLICKEY. Because the wolfSSL-backed libcurl build mishandles the pin comparison, the connection that should have been rejected is instead accepted, defeating the pinning protection and allowing interception or tampering of the transfer. No public exploit identified at time of analysis.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 14, 2026

Public-key pinning enforcement in curl/libcurl built against the wolfSSL TLS backend can be bypassed, affecting versions up to and including 8.22.0, so a man-in-the-middle attacker can present an alternate server certificate that the opt-in CURLOPT_PINNEDPUBLICKEY (--pinnedpubkey) check should have rejected. The weakness is heavily constrained: the library must be compiled with wolfSSL, the calling application must have explicitly enabled pinning (a non-default hardening feature), and the attacker must already hold a network man-in-the-middle position - the flaw nullifies an existing detection layer rather than creating interception capability. No public exploit code or CISA KEV entry was identified at time of analysis and no EPSS score was supplied, so risk is concentrated in the specific wolfSSL-plus-pinning deployment profile; the issue is fixed in curl 8.23.0.

RemediationAI

Vendor-released patch: curl 8.23.0 - upgrade libcurl/curl to 8.23.0 or later, or apply the corresponding upstream fix commit referenced from the curl 8.23.0 security advisory at https://curl.se/docs/security.html (mirrored at https://seclists.org/oss-sec/2026/q4/154), and rebuild against the wolfSSL backend so the pin-comparison path is corrected. Where upgrading immediately is not possible, the most direct compensating control is to rebuild libcurl against a non-wolfSSL TLS backend such as OpenSSL, GnuTLS or Schannel, which implement pinning correctly - the trade-off is a build and dependency change plus revalidation of any wolfSSL-specific behavior or embedded footprint constraints. Applications that depend on pinning for MITM detection under wolfSSL should not rely on CURLOPT_PINNEDPUBLICKEY alone while unpatched; instead perform an independent post-handshake check of the peer certificate's public key (for example via CURLOPT_CERTINFO, CURLOPT_SSLCERT-type inspection hooks, or a CURLOPT_SSL_CTX_FUNCTION callback that inspects the presented certificate) and abort the transfer on mismatch, accepting the cost of custom verification code and per-connection overhead. Disabling pinning entirely is not advisable because it removes the only detection layer for certificate substitution in these deployments. Network-level controls that restrict outbound egress to known endpoints reduce the window in which a man-in-the-middle could exploit the bypass, but they do not restore the pinning guarantee and should be treated as defense in depth only. Note that twenty-three additional curl issues were fixed in the same 8.23.0 release, so the upgrade should be treated as a consolidated security update rather than a single-CVE patch.

Affected ProductsAI

The affected component is curl and libcurl when built with the wolfSSL TLS backend, across released versions up to and including 8.22.0, with the fix shipping in curl 8.23.0; builds linked against OpenSSL, GnuTLS, Schannel, Secure Transport, mbedTLS or other TLS backends are not affected by this specific defect. Only deployments that additionally enable public-key pinning through CURLOPT_PINNEDPUBLICKEY in libcurl or the --pinnedpubkey option in the curl tool are exposed, since the feature is off by default. No CPE strings were supplied with the advisory data, and the authoritative reference list points to the curl project's consolidated vulnerability page at https://curl.se/docs/security.html (also mirrored in the oss-security advisory at https://seclists.org/oss-sec/2026/q4/154 and the Rock-solid curl LTS support page at https://rock-solid.curl.dev), where this CVE appears alongside the twenty-three other issues resolved in the same release. Downstream distributors and embedded vendors that rebase curl should treat any 8.x build configured with --with-wolfssl as in scope until verified at 8.23.0 or later.

Affects your stack

Find out whether the stacks and servers you run are on an affected version.

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Public-key pinning in curl is an HPKP-style control: when an application sets CURLOPT_PINNEDPUBLICKEY (or uses the command-line --pinnedpubkey), libcurl compares the public key of the server certificate against a caller-supplied hash and aborts the transfer on mismatch, independent of chain-of-trust validation. Because pinning is implemented per TLS backend, each backend must correctly perform the comparison; in the wolfSSL backend the pin check fails to reject a non-matching key, so the hardening guarantee silently disappears for builds using wolfSSL while OpenSSL, GnuTLS, Schannel and other backends behave correctly. No CWE identifier was assigned in the provided data, but the root-cause class is consistent with improper certificate validation (CWE-295) - the verification routine returns success where a mismatch should have terminated the connection. The weakness was published as part of the curl 8.23.0 security release, which bundled twenty-four advisories; only CVE-2026-92392 (HTTP/2 upload use-after-free) was rated HIGH, and this pinning bypass was rated LOW, consistent with the assessed CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N vector - network-reachable and unauthenticated, but with high attack complexity and limited confidentiality/integrity impact because the MITM position is a precondition rather than a result of the flaw.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

vuln.today AI 4.8 MEDIUM

AV:N as the attacker operates over the network, but AC:H because a MITM position and substitute certificate are required; PR:N/UI:N as no client credentials or user action are needed, and only a defense-in-depth layer is defeated so C/I are Low.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N
4.0 AV:N/AC:H/AT:N/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Estimated by vuln.today — no official severity rating has been published for this CVE yet.

Description PRE-NVD

Disclosed via oss-security. NVD scoring and full description are pending.

Threat Intelligence Overview

Prevalence
Medium
curl is ubiquitous but the affected wolfSSL TLS backend is a minority build
Data Quality
1 sources
Confidence: Low

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS N/A
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

Attack Technique

OS command injection occurs when an application passes unsanitized user input directly into system shell commands.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy