Skip to main content

Russh CVE-2026-73430

| EUVDEUVD-2026-57625 MEDIUM
Improper Check for Unusual or Exceptional Conditions (CWE-754)
2026-08-12 GitHub_M GHSA-5xvq-cp9x-6p6r
5.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Connect to target SSH port
  2. Delivery
    Send SSH version exchange
  3. Exploit
    Send SSH_MSG_KEX_ECDH_INIT with 32-byte all-zero Q_C
  4. Execution
    Trigger encode_mpint index-out-of-bounds panic
  5. Impact
    Server KEX task terminates

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Unusual condition handling
Exploitation Conditions

Exploitation requires only network access to the SSH port of a server built on Russh using its default configuration (Config::default(), which includes curve25519-sha256 via Preferred::DEFAULT). No authentication, no user interaction, and no non-default configuration setting is required - the vulnerable code path is exercised on the very first key-exchange message from any connecting client. Limiting factors: the Rust panic terminates only the per-connection KEX task; the broader server process and all other active sessions continue unaffected, so this is a per-connection DoS rather than full server shutdown. The vulnerability affects only server-mode Russh instances; a zero-check was also added to the client path in 0.62.4, but the pre-auth DoS is only directly triggerable by a malicious client connecting to a Russh server.

Impact

The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L, score 5.3) accurately reflects the attack surface: fully unauthenticated, network-reachable on any default Russh server, with low attack complexity since a single malformed packet triggers the panic. The availability impact is rated Low rather than High because Rust's panic mechanism terminates only the affected per-connection KEX task, not the entire server process, meaning concurrent legitimate sessions remain unaffected - though high-rate abuse could exhaust server worker resources. No EPSS score was provided in the input data, and the vulnerability is not listed in CISA KEV, indicating no confirmed widespread exploitation; the public proof-of-concept documented in GHSA-5xvq-cp9x-6p6r lowers the bar for opportunistic abuse and means that even a mid-sized municipal IT team in mielec running Russh-based SSH infrastructure would face ready-made exploit code against a default-configuration target. Given the absence of memory corruption, privilege escalation, or data exposure, this vulnerability falls into the routine-but-prompt patching tier for most operators - the primary concern is availability continuity under adversarial conditions, not systemic compromise.

Exploit ScenarioDerived

An attacker opens a TCP connection to any exposed Russh-based SSH server, completes the SSH version string exchange, and sends a single SSH_MSG_KEX_ECDH_INIT packet with the 32-byte Q_C field set to all zeros. The server's key-exchange task panics immediately upon attempting to encode the resulting all-zero shared secret, terminating the connection before authentication. A working end-to-end proof-of-concept demonstrating this against unmodified Russh 0.62.2 is documented in GHSA-5xvq-cp9x-6p6r.

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

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

Alert me

AnalysisAIv1 – Aug 12, 2026

Unauthenticated remote denial of service in the Russh SSH library (versions ≤ 0.62.3) allows any network attacker to crash individual server key-exchange sessions by sending a single SSH_MSG_KEX_ECDH_INIT packet containing a 32-byte all-zero Curve25519 public key. The defect triggers under the default server configuration - no special deployment required - causing a Rust bounds-check panic in encode_mpint before host-key signature verification ever occurs. A public proof-of-concept is documented in GHSA-5xvq-cp9x-6p6r; no active exploitation is confirmed in CISA KEV.

RemediationAI

Upgrade Russh to version 0.62.4 or later, confirmed as the vendor-released patch at https://github.com/Eugeny/russh/releases/tag/v0.62.4 and applied via commit a7fc1eb5717264e31c3c5f7dd849b73989a08f3d (https://github.com/Eugeny/russh/commit/a7fc1eb5717264e31c3c5f7dd849b73989a08f3d); the fix adds explicit zero-point rejection in curve25519.rs and corrects the all-zero mpint encoding in mod.rs. If an immediate upgrade is not possible, restrict network access to the SSH port to trusted source IP ranges via firewall rules or a VPN gateway, preventing unauthenticated attackers from reaching the key-exchange handler - the trade-off is reduced accessibility for legitimate remote users. Alternatively, if the Russh application code exposes KEX algorithm configuration, removing curve25519-sha256 from the negotiated algorithm list blocks this specific code path but may break compatibility with clients that exclusively offer Curve25519 key exchange.

Affected VersionsENISA

russh < 0.62.4

Affected Packages

cargo russh fix: 0.62.4

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 pure-Rust SSH client and server library (cpe:2.3:a:eugeny:russh:*:*:*:*:*:*:*:*) that implements the SSH transport protocol, including curve25519-sha256 key exchange as part of its default Preferred::DEFAULT algorithm list. CWE-754 (Improper Check for Unusual or Exceptional Conditions) is the root cause: server_dh() in russh/src/kex/curve25519.rs validates that the client-supplied Q_C value is exactly 32 bytes but does not reject the all-zero low-order point, which is a known invalid Curve25519 input per the protocol. Multiplying the server's ephemeral scalar by the all-zero MontgomeryPoint yields an all-zero shared secret. encode_mpint() in russh/src/kex/mod.rs then attempts to strip leading zero bytes from this 32-byte all-zero value; the leading-zero skip loop advances the index i to s.len() (32) and then indexes s[i], triggering a Rust bounds-check panic ('index out of bounds: the len is 32 but the index is 32'). Because this entire sequence occurs before authentication - on the very first key-exchange message - the server's per-connection KEX task is terminated by every such malformed packet.

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 5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
vuln.today AI 5.3 MEDIUM

Pre-auth network attack on default config requires no privileges; only the per-connection KEX task crashes, so A:L not A:H.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

2
Patch available
Aug 12, 2026 - 22:03 EUVD
CVE Published
Aug 12, 2026 - 20:55 cve.org
MEDIUM 5.3

DescriptionCVE.org

Russh is a Rust SSH client & server library. Prior to 0.62.4, an unauthenticated SSH client can cause a denial of service by sending SSH_MSG_KEX_ECDH_INIT with a 32-byte all-zero Q_C value. Curve25519Kex::server_dh in russh/src/kex/curve25519.rs accepts the all-zero peer public value and computes an all-zero shared secret, after which compute_exchange_hash calls encode_mpint in russh/src/kex/mod.rs and indexes beyond the end of the input while skipping leading zero bytes. The resulting panic occurs before authentication and terminates the server key-exchange task. This issue is fixed in version 0.62.4.

Threat Intelligence Overview

EPSS Score
0.3%
Top 74% exploitable
Prevalence
Low
Rust-specific SSH library; niche footprint versus OpenSSH or libssh2
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA CIRCL GitHub VulDB

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 Yes
EPSS 0.3%
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
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

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-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

CVE-2026-102824 MEDIUM
4.3 Sep 29

Cryptographic weakness in the Russh SSH library before 0.63.0 lets a malicious remote SSH peer send an all-zero 32-byte

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