Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessOpen SSH connection to russh server
-
DeliverySend repeated USERAUTH_REQUEST password attempts
-
ExploitCap never enforced, connection stays open
-
ExecutionContinue online credential guessing past limit
-
ImpactCompromise weak account / add auth load
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Brute-force prevention, rate limiting
|
| Exploitation Conditions | Exploitable only when the deployment sets server::Config.max_auth_attempts to a nonzero cap and relies on it to throttle guessing; the bug is that russh <0.62.6 increments auth_attempts on the USERAUTH_REQUEST path in russh/src/server/encrypted.rs but never compares it to that cap, so the limit is silently unenforced. No authentication or user interaction is required (PR:N/UI:N) and it works against network-reachable russh servers, but practical impact is LIMITED because the attacker still must guess valid credentials - the vulnerability only removes the lockout/disconnect that would otherwise cut off guessing, and it has no effect if operators use external throttling (e.g. fail2ban, firewall rate limits) or leave max_auth_attempts at 0. |
| Impact | All signals point to a genuine but low-priority issue. The vendor CVSS of 3.7 (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N) is internally consistent with the described flaw: network-reachable and unauthenticated (AV:N/PR:N), but high complexity (AC:H) because the bug only removes a throttle - it does not itself grant access, so real-world impact still depends on the attacker eventually guessing valid credentials. Impact is correctly scoped to C:L with no integrity or availability effect. There is no EPSS score, no CISA KEV listing, and no public exploit in the provided data, so this is 'no public exploit identified at time of analysis.' The GitHub commit and regression tests confirm the root cause and fix, so the technical claim is solid, but this is squarely a low-real-risk hardening issue rather than a critical priority - it weakens a defense-in-depth control (attempt capping) rather than creating a direct compromise. No conflicting signals were found; the main caveat is that exploitability is entirely gated on the presence of guessable credentials and a configured max_auth_attempts policy that operators actually rely on. |
| Exploit ScenarioDerived | An unauthenticated remote attacker opens a single SSH connection to a service built on russh <0.62.6 and repeatedly submits USERAUTH_REQUEST password attempts. Because auth_attempts is incremented but never compared to Config.max_auth_attempts, the server keeps answering with USERAUTH_FAILURE instead of disconnecting, letting the attacker run an uninterrupted online password-guessing campaign on one connection and generating extra backend authentication load. No public PoC exists, though the fix commit ships a regression test that demonstrates the pre-fix behavior. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 29, 2026
Russh SSH servers running versions prior to 0.62.6 that set server::Config.max_auth_attempts to a nonzero value silently fail to enforce that limit, letting an unauthenticated remote client keep sending USERAUTH_REQUEST messages on a single connection past the configured cap. The auth_attempts counter is incremented on the server::run_stream path in russh/src/server/encrypted.rs but is never compared against the configured maximum, so the intended 'too many authentication attempts' disconnect never fires, preserving unlimited online password guessing and adding backend authentication load. Practical impact is limited: the attacker must still guess valid credentials, the bug has no effect when max_auth_attempts is 0 or when external throttling (fail2ban, firewall rate limits) is used, and no public exploit code has been identified at time of analysis.
RemediationAI
Upgrade russh to 0.62.6 or later, which contains the upstream fix: the vendor advisory GHSA-g6xm-f9xp-qq35 and the patch commit f8fd0b11a393364dc7f01a182482d86adafdd653 add a check that disconnects with NoMoreAuthMethodsAvailable when rejection_count reaches server::Config.max_auth_attempts, so after upgrading operators must set max_auth_attempts to a nonzero value for the limit to be enforced. Vendor-released patch: 0.62.6. If the dependency cannot be bumped immediately, compensating controls are effective here because the defect only removes russh's own throttle: place external attempt limiting in front of the SSH listener (fail2ban or an equivalent log-driven blocker on USERAUTH_FAILURE patterns, or firewall/connection rate limiting such as nftables or iptables hashlimit), since the bug does not interfere with those mechanisms at all. A trade-off of log-driven blocking is a small delay between the offending attempt and the ban, and it requires the daemon to emit authentication failure logging; connection-level rate limiting is immediate but can throttle legitimate reconnecting clients and offers coarser granularity. Running the server behind a bastion or VPN that restricts who can reach port 22 is a further option at the cost of broader access changes. None of these workarounds repairs the underlying counter logic, so upgrade remains the primary fix.
Affected VersionsENISA
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 Rust implementation of the SSH client and server protocol. During the SSH user authentication phase, the server reads USERAUTH_REQUEST (and USERAUTH_INFO_RESPONSE for multi-factor exchanges) packets and, on failure, replies with USERAUTH_FAILURE while tracking state in EncryptedState::WaitingAuthRequest, which carries a rejection_count. The library exposes server::Config.max_auth_attempts so operators can bound failed authentication attempts per connection. In versions before 0.62.6 the code path reached from server::run_stream in russh/src/server/encrypted.rs incremented self.common.auth_attempts but never compared it with max_auth_attempts, so the rejection counter was effectively advisory and the connection was never torn down - a CWE-307 (Improper Restriction of Excessive Authentication Attempts) weakness. The fix in commit f8fd0b11a393364dc7f01a182482d86adafdd653 checks the first byte of the incoming packet against USERAUTH_REQUEST or USERAUTH_INFO_RESPONSE and, when rejection_count is greater than or equal to max_auth_attempts, disconnects with Disconnect::NoMoreAuthMethodsAvailable and the reason 'Too many authentication attempts'. The same commit adds regression tests confirming that authentication attempts are capped at the configured maximum and that publickey probes (which are answered with PK_OK rather than USERAUTH_FAILURE) do not consume the attempt budget. Under the assessed vector CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N the issue is network-reachable without authentication or user interaction, but its confidentiality-only, low-severity impact reflects that it merely removes a defensive throttle rather than granting access directly.
Know when Rust 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
AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
Network-reachable and unauthenticated (AV:N/PR:N), but AC:H and only C:L because bypassing the attempt cap merely raises guessing odds rather than directly granting access.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
1DescriptionCVE.org
Russh is a Rust SSH client and server library. Prior to 0.62.6, the USERAUTH_REQUEST path reached from server::run_stream in russh/src/server/encrypted.rs increments self.common.auth_attempts but never compares it with server::Config.max_auth_attempts. An unauthenticated remote client can continue submitting authentication requests on one connection beyond the configured cap, bypassing the deployment's attempt-limiting policy and increasing online guessing opportunity and backend authentication workload. This issue is fixed in version 0.62.6.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Command injection via Windows CreateProcess argument parsing affects multiple language runtimes and tooling (Node.js, PH
In the standard library in Rust before 1.52.0, a double free can occur in the Vec::from_iter function if freeing the ele
In the standard library in Rust before 1.52.0, the Zip implementation can report an incorrect size due to an integer ove
Stored cross-site scripting and open redirect in Warpgate's SSO endpoints (versions prior to 0.25.5) allow an unauthenti
library/std/src/net/parser.rs in Rust before 1.53.0 does not properly consider extraneous zero characters at the beginni
Denial of service in the Vector observability pipeline's `logstash` source (versions 0.15.0 through 0.56.x) allows a rem
The Rust Programming Language Standard Library 1.34.x before 1.34.2 contains a stabilized method which, if overridden, c
In the standard library in Rust before 1.52.0, the Zip implementation calls __iterator_get_unchecked() more than once fo
In the standard library in Rust before 1.50.0, read_to_end() does not validate the return value from Read in an unsafe c
Cargo prior to Rust 1.26.0 may download the wrong dependency if your package.toml file uses the `package` configuration
Rust is a programming language. Rated critical severity (CVSS 10.0), this vulnerability is remotely exploitable, no auth
The Rust Programming Language Standard Library version 1.29.0, 1.28.0, 1.27.2, 1.27.1, 127.0, 126.2, 126.1, 126.0 contai
EUVD-2026-89365
GHSA-g6xm-f9xp-qq35
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB