Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain man-in-the-middle position on SSH path
-
DeliveryPresent substituted host key to libcurl client
-
Exploitknownhost callback receives MISSING instead of MISMATCH
-
ExecutionApplication accepts forged key
-
ImpactIntercept 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
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.
Estimated by vuln.today — no official severity rating has been published for this CVE yet.
Description PRE-NVD
Threat Intelligence Overview
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.
What every action level means
Attack Technique
OS command injection occurs when an application passes unsanitized user input directly into system shell commands.
CVE.org
GitHub PoC
Exploit-DB