Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-48108

CVE-2026-48108: Russh SSH Library DoS Vulnerability

CVE-2026-48108 is a denial of service flaw in Russh SSH library that allows attackers to hold connection resources during pre-authentication. This post covers technical details, affected versions, impact, and mitigation.

Published:

CVE-2026-48108 Overview

CVE-2026-48108 affects russh, a Rust SSH client and server library maintained by Eugeny. The vulnerability exists in versions from 0.34.0-beta.1 to versions before 0.61.0. The library does not enforce SSH identification-string rules as strictly as OpenSSH. The server-side identification reader reuses the permissive client-side path, accepting pre-banner lines and failing to bound their count. A remote attacker can submit malformed identification input that the server should reject early, holding connection resources in the cleartext pre-authentication phase. The issue is tracked under [CWE-20] Improper Input Validation and resolved in russh 0.61.0.

Critical Impact

Remote unauthenticated attackers can exhaust server resources during the SSH pre-authentication phase, causing partial denial of service against applications built on russh.

Affected Products

  • russh versions 0.34.0-beta.1 through 0.60.x
  • Rust SSH server applications built using the russh library
  • Any service exposing russh-based SSH endpoints to untrusted networks

Discovery Timeline

  • 2026-06-10 - CVE-2026-48108 published to NVD
  • 2026-06-10 - Last updated in NVD database

Technical Details for CVE-2026-48108

Vulnerability Analysis

The SSH protocol (RFC 4253) requires servers and clients to exchange identification strings prior to key exchange. OpenSSH enforces strict rules on this exchange, including a bounded number of pre-banner lines and validation of line content. russh deviated from these rules on the server side.

The server-side identification reader in russh shared its implementation with the client-side reader. The client path is intentionally permissive because clients may receive banner text or pre-banner lines from servers. Applying that same permissive logic to incoming client connections allowed attackers to send unbounded pre-banner data. Because this exchange occurs before authentication and before key exchange, no credentials or cryptographic state are required to trigger the condition.

Root Cause

The root cause is improper input validation [CWE-20] in the server identification reader. Two specific deficiencies contributed to the issue. First, the reader accepted pre-banner lines from clients, which the SSH specification does not permit. Second, the reader did not enforce a maximum count on these lines, allowing an attacker to send an arbitrary volume of data before the server terminated the connection.

Attack Vector

An attacker connects to a russh-based SSH server over the network and begins sending malformed pre-banner content instead of a valid SSH identification string. The server keeps the connection alive while processing this input, consuming socket descriptors, memory buffers, and task scheduling resources. By opening many such connections in parallel, an attacker can degrade availability of the SSH service without authenticating. The attack requires no privileges and no user interaction. Refer to the GitHub Security Advisory GHSA-76r6-x97p-67vr for additional technical context.

Detection Methods for CVE-2026-48108

Indicators of Compromise

  • Elevated counts of half-open or long-lived TCP connections to SSH listener ports backed by russh
  • Connections that remain open for extended periods without completing SSH key exchange (SSH_MSG_KEXINIT)
  • Repeated inbound traffic to SSH ports containing non-SSH banner content or oversized pre-banner data

Detection Strategies

  • Inspect SSH server logs for connections that never progress past the identification exchange phase
  • Correlate source IP addresses generating high volumes of incomplete SSH handshakes with known scanning infrastructure
  • Deploy network monitoring rules that flag SSH sessions exceeding a reasonable pre-banner byte threshold

Monitoring Recommendations

  • Track per-source connection rates against russh-based SSH services and alert on anomalous spikes
  • Monitor process-level metrics on hosts running russh servers, including open file descriptor counts and async task queue depth
  • Capture packet samples from SSH listeners to validate compliance with the expected identification-string format

How to Mitigate CVE-2026-48108

Immediate Actions Required

  • Upgrade russh to version 0.61.0 or later in all dependent Rust applications
  • Rebuild and redeploy any binaries that statically link affected russh versions
  • Audit Cargo.lock files across repositories to identify transitive dependencies pinned to vulnerable releases

Patch Information

The maintainers fixed the issue in russh 0.61.0 by enforcing stricter SSH identification-string rules on the server side. The server reader now rejects pre-banner lines from clients and applies a bounded limit on identification exchange data. Details are documented in the GitHub Security Advisory GHSA-76r6-x97p-67vr.

Workarounds

  • Place russh-based SSH endpoints behind a network gateway or reverse proxy that enforces SSH protocol compliance
  • Apply per-source connection rate limits and idle-connection timeouts at the firewall or load balancer
  • Restrict SSH listener exposure to trusted networks until the upgrade to 0.61.0 is deployed
bash
# Configuration example: update Cargo.toml dependency
[dependencies]
russh = ">=0.61.0"

# Then refresh the lockfile and rebuild
cargo update -p russh
cargo build --release

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.