Skip to main content

Russh CVE-2026-102824

| EUVDEUVD-2026-89207 MEDIUM
Use of a Broken or Risky Cryptographic Algorithm (CWE-327)
2026-09-29 GitHub_M GHSA-w3jg-pjxf-73p4
4.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Initiate SSH connection to russh peer
  2. Delivery
    Negotiate hybrid ML-KEM-768/X25519 kex
  3. Exploit
    Send all-zero X25519 public key
  4. Execution
    russh zeroes classical contribution
  5. Persist
    Session secret depends only on ML-KEM
  6. Impact
    Latent loss of hybrid fallback protection

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Approved algorithm selection
Exploitation Conditions

Requires the russh peer to negotiate the hybrid ML-KEM-768 + X25519 key exchange (the mlkem768x25519 method in kex/hybrid_mlkem.rs) with a version prior to 0.63.0; the attacker must be the remote SSH peer (server or client) able to send the KEX_ECDH_INIT/reply with an all-zero X25519 public key. No authentication or user interaction is needed since the flaw triggers during key exchange. The critical LIMITING factor is that there is NO actual confidentiality impact unless and until ML-KEM-768 is independently weakened - today this only removes the classical safety net, making it a latent/theoretical exposure rather than a practical decryption vector.

Impact

This is a genuine cryptographic weakness but a low real-world priority. The CVSS 3.1 base score of 4.3 (AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N) reflects only a partial confidentiality impact, and even that is contingent on a future event that has not occurred. The core flaw (CWE-327) is that russh's hybrid ML-KEM-768 + X25519 key exchange accepts an all-zero (low-order) X25519 public key, zeroing out the classical contribution so the combined secret depends solely on ML-KEM. This defeats the entire point of a hybrid exchange - the classical curve is supposed to remain a safety net if the post-quantum primitive is broken - but it produces NO immediate compromise while ML-KEM-768 remains sound. There is no EPSS score, no CISA KEV listing, and no public exploit identified at time of analysis, so this is best characterized as a defense-in-depth / future-proofing fix rather than an actively exploitable bug. Signal conflict to note: the vendor vector uses PR:L, but SSH key exchange occurs pre-authentication, so a malicious peer needs no credentials - PR:N is arguably more accurate, which would raise the base score to ~5.3; I flag this as a metric disagreement, not a factual claim. Overall, real priority is LOW: patch on the normal maintenance cycle.

Exploit ScenarioDerived

A malicious SSH server (or client) that russh connects to during the hybrid ML-KEM-768/X25519 key exchange sends an all-zero 32-byte X25519 public key. russh accepts it, so the X25519 contribution to the combined shared secret collapses to zero and the session's security rests entirely on ML-KEM-768. No confidentiality loss occurs today; the harm only materializes if ML-KEM-768 is later cryptanalytically weakened, at which point such a session would have no classical fallback. No public exploit code exists.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.1% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Sep 29, 2026

Cryptographic weakness in the Russh SSH library before 0.63.0 lets a malicious remote SSH peer send an all-zero 32-byte X25519 public key during the hybrid ML-KEM-768 + X25519 key exchange, zeroing the classical half of the combined shared secret so the handshake is protected by ML-KEM-768 alone. Any deployment negotiating the mlkem768x25519 kex method is affected, and the flaw is reachable without authentication or user interaction because it triggers inside the key exchange itself (assessed CVSS:3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N). The practical confidentiality impact is latent rather than immediate: no public exploit has been identified at time of analysis, and the exchange is only recoverable if ML-KEM-768 is independently weakened, so the real consequence today is the loss of the hybrid's classical fallback safety net.

RemediationAI

Upgrade Russh to 0.63.0, which is the vendor-released fix (release tag v0.63.0, fix commit 8da8967f196472576b1565d518a0ed60fce60f0c); details are in the advisory at https://github.com/Eugeny/russh/security/advisories/GHSA-w3jg-pjxf-73p4. If an immediate upgrade is not possible, remove mlkem768x25519 from the KEX algorithm proposal in both client and server configurations so the hybrid exchange is never negotiated, but recognize the trade-off: falling back to the classical key exchange forfeits post-quantum protection, and pre-0.63.0 versions of the standalone Curve25519 kex share the same unvalidated-low-order-point weakness, so isolation should be reinforced by restricting SSH peers to trusted hosts/networks or by placing the service behind a bastion until the library can be rebuilt against 0.63.0. No vendor workaround short of the upgrade removes the flaw, since the defect is in the library's key-derivation code itself.

Affected VersionsENISA

russh < 0.63.0

Affected Packages

cargo russh fix: 0.63.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in cargo

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

Technical ContextAI · show details

Russh is a Rust implementation of the SSH protocol used as both client and server library (CPE cpe:2.3:a:eugeny:russh). The affected code lives in russh/src/kex/hybrid_mlkem.rs, which implements the mlkem768x25519 hybrid key exchange: an ML-KEM-768 (FIPS 203/Kyber) encapsulation secret is combined with an X25519 (Curve25519 Montgomery ECDH) secret so that the session survives even if one of the two primitives is later broken. The root cause is CWE-327, use of a broken or risky cryptographic algorithm pattern: the implementation computed the X25519 contribution as scalar multiplication over the peer's raw public key without first verifying that the peer point is valid and non-contributory-resistant. An all-zero (or other low-order) X25519 point drives the resulting shared secret to all zeros, so the hybrid output degenerates to an ML-KEM-only secret. The fix commit (8da8967f196472576b1565d518a0ed60fce60f0c) changes local secrets from arbitrary Scalars to clamped 32-byte arrays, performs multiplication with mul_clamped, and rejects the handshake whenever the derived shared secret is all zeros; the same commit hardens the standalone curve25519.rs kex by replacing its trivial zero-key check with a shared-secret-zero check that also catches order-2, order-4 and order-8 low-order points, with unit tests added for both the server and client paths.

Know when Russh gets its next vulnerability

  • 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

Vendor (GitHub_M) PRIMARY 4.3 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
vuln.today AI 5.3 MEDIUM

SSH kex is pre-authentication so PR:N; a malicious peer trivially sends a zero key (AC:L); only a conditional, low confidentiality loss of the hybrid fallback, no integrity or availability impact.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
None
Availability
None

Lifecycle Timeline

2
Patch available
Sep 29, 2026 - 19:34 EUVD
CVE Published
Sep 29, 2026 - 18:27 cve.org
MEDIUM 4.3

DescriptionCVE.org

Russh is a Rust SSH client and server library. Prior to 0.63.0, the hybrid ML-KEM 768 and X25519 implementation in russh/src/kex/hybrid_mlkem.rs accepts an all-zero 32-byte peer X25519 public key in both server_dh and compute_shared_secret, forcing the X25519 contribution to the combined shared secret to zero. A malicious SSH peer can therefore make the combined secret depend only on ML-KEM, defeating the hybrid exchange's intended fallback protection if ML-KEM is later weakened. This issue is fixed in version 0.63.0.

Threat Intelligence Overview

EPSS Score
0.1%
Top 97% exploitable
Prevalence
Low
niche Rust SSH library, small footprint versus OpenSSH/libssh
Threat Intel
1
1 sources
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub

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 0.1%
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.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

22
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +22
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Russh

View all
CVE-2023-48795 MEDIUM POC
5.9 Dec 18

The SSH transport protocol with certain OpenSSH extensions, found in OpenSSH before 9.6 and other products, allows remot

CVE-2024-43410 HIGH POC
7.5 Aug 21

Russh is a Rust SSH client & server library. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable,

CVE-2023-28113 MEDIUM POC
5.9 Mar 16

russh is a Rust SSH client and server library. Rated medium severity (CVSS 5.9), this vulnerability is remotely exploita

CVE-2026-73430 MEDIUM POC
5.3 Aug 12

Unauthenticated remote denial of service in the Russh SSH library (versions ≤ 0.62.3) allows any network attacker to cra

CVE-2026-73429 MEDIUM POC
5.3 Aug 12

Denial-of-service in russh's Curve25519 key exchange client path allows any malicious SSH server to crash a connecting r

CVE-2026-102823 HIGH
7.5 Sep 29

Improper validation in the Russh Rust SSH library (versions prior to 0.63.1) lets a malicious or compromised SSH server

CVE-2026-42189 HIGH
7.5 May 08

Pre-authentication denial-of-service in russh SSH server library allows remote attackers to crash servers implementing k

CVE-2026-48110 HIGH
7.5 Jun 10

Denial of service in Russh (Rust SSH client/server library) versions 0.34.0 through 0.60.x allows remote SSH peers to tr

CVE-2026-48107 MEDIUM
6.5 Jun 10

Denial of service in Russh (versions 0.37.0-0.60.x), a Rust SSH client and server library, allows a malicious SSH server

CVE-2026-102821 MEDIUM POC
6.5 Sep 29

Memory exhaustion in the Russh Rust SSH client/server library prior to 0.63.2 allows an authenticated remote peer to sta

CVE-2026-102820 MEDIUM POC
6.2 Sep 29

The Windows Pageant client inside the pageant Rust crate (pageant/src/wmmessage.rs) trusts a peer-controlled u32 respons

CVE-2026-48108 MEDIUM
5.3 Jun 10

Resource exhaustion in Russh's SSH server identification-string reader allows unauthenticated remote attackers to hold c

Vendor StatusVendor

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