Skip to main content

curl libcurl CVE-2026-87865

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 SSH path
  2. Delivery
    Present substituted host key to libcurl client
  3. Exploit
    knownhost callback receives MISSING instead of MISMATCH
  4. Execution
    Application accepts forged key
  5. Impact
    Intercept SFTP/SCP session traffic

Vulnerability Assessment

Exploitation Conditions

Exploitable only when an application uses libcurl for SCP/SFTP transfers, configures a known-hosts store (CURLOPT_SSH_KNOWNHOSTS), and registers a host-key verification callback (CURLOPT_SSH_KEYFUNCTION) whose decision depends on distinguishing a MISSING key from a MISMATCHED key. An active man-in-the-middle must substitute the server's host key, and exploitation further requires that the callback treats an unknown/missing key more permissively than a mismatched one. Limiting factors: applications that reject both missing and mismatched keys, or that do not use SSH-based protocols at all, are unaffected; the attacker needs network interception capability; and the flaw grants no direct code execution, only weakened host authentication. Command-line curl without a custom accept-new-but-not-changed policy is largely unaffected.

Impact

No CVSS vector, EPSS score, KEV listing, or public POC is present in the supplied data, so quantitative exploitation signals are entirely absent and the only authoritative severity signal is the curl project's own rating of LOW. This is a SSH host-key verification weakness: when a known-hosts key mismatch occurs, libcurl's knownhost callback is reportedly handed a 'missing' status instead of a 'mismatch' status, which can cause an application's key-verification logic to treat a changed/attacker-substituted key as merely unknown rather than as a dangerous mismatch. Real-world risk is conditional and narrow: it only matters to applications that (a) use libcurl for SCP/SFTP and (b) implement a custom CURLOPT_SSH_KEYFUNCTION callback that distinguishes MISSING from MISMATCH, and it additionally requires an active man-in-the-middle to substitute a host key - so despite curl's near-universal deployment, the exploitable surface is small. This is a genuine but low-priority defense-in-depth/verification-bypass issue, not an urgent remote-code-execution threat; the LOW rating aligns with the high preconditions. Note explicitly: no independent CVSS or exploitation telemetry was provided, so the risk framing relies solely on the vendor advisory text - verify affected version range against the curl security page before scoping.

Exploit ScenarioDerived

An attacker in a man-in-the-middle position on the network path to an SCP/SFTP server presents a substituted SSH host key during connection setup. An application using libcurl with a known-hosts callback receives a 'key missing' indication instead of 'key mismatch', and if its callback logic auto-accepts or prompts leniently for unknown (but not mismatched) keys, the forged host is accepted, enabling interception of the SSH session. No public exploit code is identified at time of analysis.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available

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

Alert me

AnalysisAIv1 – Oct 14, 2026

In curl and libcurl through 8.22.0, libcurl's SSH host-key verification callback (CURLOPT_SSH_KEYFUNCTION) can misreport a server host key that does not match the expected key as merely 'missing' from the known-hosts store, so applications that treat unknown keys more leniently than changed keys may accept an attacker-substituted key. The practical impact is weakened host authentication (limited confidentiality and integrity loss, CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N), and exploitation requires an active man-in-the-middle on the SCP/SFTP path, a configured known-hosts file, and a callback whose policy distinguishes MISSING from MISMATCH. No CVSS vector, EPSS score, or KEV entry accompanies the public data and no public exploit code has been identified at time of analysis; the curl project itself rates this issue LOW, and it is one of twenty-four advisories fixed in the curl 8.23.0 release (only CVE-2026-92392, an HTTP/2 upload use-after-free, is rated HIGH).

RemediationAI

The primary fix is to upgrade to curl 8.23.0, the release in which the curl project states all twenty-four advisories of this batch are remediated, with patch commits linked from https://curl.se/docs/security.html; support-contract customers on the Rock-solid curl LTS branch should obtain the backported security patch through that channel rather than a full upstream jump. If immediate upgrade is not possible, apply compensating controls on the application side: audit and harden the CURLOPT_SSH_KEYFUNCTION callback so it returns a rejection for both the missing-key and mismatch-key outcomes, since the flaw's only leverage is a callback that is more permissive for missing keys - the trade-off is that legitimate first-time host connections will fail until the key is provisioned out of band. Where practical, pre-populate the known-hosts store via a trusted provisioning path (CURLOPT_SSH_KNOWNHOSTS) so that the missing-key branch is never exercised, or pin the expected host key and compare it directly in the callback rather than relying on libcurl's match status; both approaches add operational overhead when server keys legitimately rotate. Restricting high-value transfers to TLS-based protocols that are not affected by this SSH callback path removes exposure entirely but may require changing application behavior or server configuration. Finally, since the flaw requires a network man-in-the-middle, tightening the network path (mutual TLS on the transport, strict egress controls, or SSH tunneling over an authenticated channel) reduces practical exploitability without patching, though it does not address the underlying validation defect.

Affected ProductsAI

Affected software is curl and the embedded libcurl library, in versions up to and including 8.22.0, with the fix shipping in curl 8.23.0 according to the curl project's advisory page (https://curl.se/docs/security.html) and the oss-security release announcement (https://seclists.org/oss-sec/2026/q4/154); the curl vulnerability table lists this entry as number 235-adjacent LOW-severity item in the 2026-10-14 publication batch, and the introducing version for this specific issue is not enumerated in the truncated table extract provided. Reachability requires the SSH backend: applications that use libcurl for SCP or SFTP transfers, that configure a known-hosts store with CURLOPT_SSH_KNOWNHOSTS, and that install a CURLOPT_SSH_KEYFUNCTION callback whose accept/reject logic depends on telling a MISSING key apart from a MISMATCHED one. Command-line curl used without a bespoke accept-new-but-not-changed policy is largely unaffected, and applications that avoid SSH-protocol transfers entirely, or that reject missing and mismatched keys alike, fall outside the exploitable set. No CPE permutations were supplied with the input, so asset inventory should key on curl/libcurl version strings reported by the binary or by the embedding application. The commercial Rock-solid curl LTS offering (https://rock-solid.curl.dev), which applies only security and selected stability patches to supported release branches, is the vendor channel through which customers on maintained branches would receive the corresponding fix.

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

curl's SSH-based protocols (SCP and SFTP, implemented over libssh2) support a host-key verification model in which the application supplies a known-hosts file via CURLOPT_SSH_KNOWNHOSTS and a decision callback via CURLOPT_SSH_KEYFUNCTION. That callback receives a match status describing whether the presented key matched an entry, was absent from the store, or conflicted with a stored entry; the correct security posture is to reject both the mismatch and, unless the user explicitly opts in, the missing case. CVE-2026-87865 concerns libcurl collapsing the distinction so that a conflicting key is surfaced as missing, which lets a policy such as 'trust new hosts but reject changes' accept a forged key. No CWE identifier is supplied in the available data, but the behavior belongs to the improper host/identity validation class: trust is anchored to an out-of-band known-hosts record that the library fails to compare faithfully. The CPE strings needed to enumerate exact platform builds were not provided, so product scope should be derived from the version range in the curl security table. The sibling advisory CVE-2026-87866 (wolfSSL public-key pinning bypass) and the connection-reuse advisories in the same batch show that identity binding and credential scoping around SSH/TLS transports was a broad theme of this release cycle, which is useful context when triaging hosts that mix curl versions.

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

AC:H because a man-in-the-middle position and a mismatch-sensitive callback are required; AV:N over the network; no privileges needed; limited confidentiality/integrity impact from host-key verification bypass, no availability impact.

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:P/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
Ubiquitous
libcurl ships in ~20 billion installations; affected SSH-callback path is a subset
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 Yes
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