russh CVE-2026-73489
MEDIUMAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconObtain valid SSH credentials
-
DeliveryAuthenticate to russh server
-
ExploitOpen SSH session channel
-
InstallSend pty-req with 131+ terminal-mode records
-
C2Parser increments index past 130-entry array bound
-
ExecuteOOB slice triggers Rust bounds-check panic
-
ImpactServer session task crashes (DoS)
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Array index validation
|
| Exploitation Conditions | Exploitation requires a valid authenticated SSH session - the attacker must possess credentials accepted by the target russh server (PR:L per CVSS). The pty-req code path is reachable with the default server configuration and default crypto suite (curve25519-sha256 + chacha20-poly1305); no non-default feature flag, special channel type, or privileged role is required beyond basic session authentication. Limiting factors: (1) the attacker must first authenticate, which requires valid credentials or an authorized key; (2) each attack crashes only the individual session task in the Rust async runtime, not the entire server process - repeated attacks are needed to sustain disruption; (3) Rust's memory safety guarantees ensure the panic cannot be escalated to memory corruption or code execution. |
| Impact | The provided CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L, 4.3 Medium) accurately characterizes the vulnerability: network-reachable, low complexity, requiring only authenticated (low-privilege) access, with availability impact scoped to the individual session task rather than the entire server process. Scope:Unchanged (S:U) is well-chosen - Rust's task isolation ensures only the crashing session is affected. No EPSS score was provided in the input, but given this is a niche Rust library with a post-auth precondition, automated mass exploitation is unlikely. There is no CISA KEV entry, and no public exploit beyond the GHSA-documented proof-of-concept. The GHSA advisory confirms the PoC reproduces end-to-end against real russh 0.62.2, so exploitability is practical for any authenticated user. The risk is moderate for applications that expose russh-based SSH servers to potentially hostile authenticated users (e.g., multi-tenant SSH gateways); for tightly controlled environments where all authenticated clients are trusted, real-world risk is low. |
| Exploit ScenarioDerived | An attacker with valid SSH credentials connects to a russh-based server and opens a session channel using standard SSH tooling. They then issue a pty-req channel request (via the public Channel::request_pty() API or a crafted SSH message) carrying 131 or more terminal-mode records - 651+ bytes of well-formed but oversized payload - causing the server's parser to panic and terminate the session task. The GHSA advisory confirms this is reproducible end-to-end against unmodified russh 0.62.2 using a real TCP connection. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 13, 2026
Post-authentication denial of service in the russh Rust SSH server library crashes individual session tasks when an authenticated client sends a pty-req channel request with more than 130 terminal-mode records. Russh versions up to and including 0.62.3 are affected; the code path is reachable with default server and crypto configurations, requiring only a valid authenticated SSH session - no special server-side setup. No public exploit identified at time of analysis, though the GHSA advisory documents a working end-to-end proof-of-concept using the public Channel::request_pty() API.
RemediationAI
Upgrade russh to version 0.62.4 or later. The fix introduces an explicit bounds check at the top of the loop body - if the mode index i equals or exceeds the array length, the parser immediately returns an error rather than logging and continuing. The patched release is available at https://github.com/Eugeny/russh/releases/tag/v0.62.4 and the specific fixing commit is https://github.com/Eugeny/russh/commit/8912512371820167a12a0a638bd666856ce458ad. As a compensating control prior to patching, restrict SSH server access to trusted clients through firewall rules or by limiting valid credentials to known-good principals; note this reduces but does not eliminate risk because the vulnerability is post-authentication and any valid credential holder can trigger it. There is no known configuration flag to disable pty-req handling in russh without modifying application code.
Affected Packages
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 implementing the SSH protocol. The defect resides in the pty-req channel request handler in russh/src/server/encrypted.rs. SSH PTY requests carry terminal modes as a sequence of 5-byte records (1-byte opcode plus 4-byte value), terminated by TTY_OP_END (0x00). The parser pre-allocates a fixed 130-entry stack array [(Pty::TTY_OP_END, 0); 130] and increments a counter i for every valid record. When i reaches 130 the code logs 'pty-req: too many pty codes' but does NOT return - allowing i to grow beyond the array bound. The subsequent slice construction &modes[0..i] with i > 130 triggers Rust's built-in bounds-check panic ('range end index 131 out of range for slice of length 130'), crashing the session task before the application pty_request handler is ever invoked. CWE-129 (Improper Validation of Array Index) accurately describes the root cause: the index is not validated before being used in the slice expression. Rust's memory safety guarantees prevent any heap corruption or RCE - the impact is strictly a controlled panic and session termination.
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
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L
Network-accessible post-auth crash requires low-privilege credentials (PR:L/AV:N); impact is session-task panic only, no corruption or scope change (A:L/S:U/C:N/I:N).
Primary rating from Vendor (github).
CVSS VectorVendor: github
DescriptionCVE.org
Russh is a Rust SSH client & server library. Prior to 0.62.4, an authenticated SSH client can cause a denial of service by sending a pty-req channel request with more than 130 terminal-mode records. The parser in russh/src/server/encrypted.rs stores terminal modes in a fixed 130-entry [(Pty::TTY_OP_END, 0); 130] array but continues increasing the mode count, then constructs an out-of-bounds slice and panics before the application pty_request handler runs. The panic terminates the server session task without causing memory corruption. This issue is fixed in version 0.62.4.
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
SSVC AssessmentENISA
Priority Score
Attack Technique
A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
GHSA-cqjc-rmpq-xprq
NVD
CVE.org
EPSS
VulDB
Exploit-DB