Skip to main content

russh CVE-2026-73489

MEDIUM
Improper Validation of Array Index (CWE-129)
2026-08-13 security-advisories@github.com GHSA-cqjc-rmpq-xprq
4.3
CVSS 3.1 · Vendor: github
View

Attack ChainAIDerived

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

  1. Recon
    Obtain valid SSH credentials
  2. Delivery
    Authenticate to russh server
  3. Exploit
    Open SSH session channel
  4. Install
    Send pty-req with 131+ terminal-mode records
  5. C2
    Parser increments index past 130-entry array bound
  6. Execute
    OOB slice triggers Rust bounds-check panic
  7. Impact
    Server 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.

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

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

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

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

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

Primary rating from Vendor (github).

CVSS VectorVendor: github

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

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

EPSS Score
0.3%
Top 82% exploitable
Prevalence
Low
niche Rust SSH library, primarily developer and embedded use
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
4 sources
Confidence: Medium

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.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· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

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

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.

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