Source: rust-russh
Version: 0.57.1-2
Severity: grave
Tags: security upstream
Justification: user security hole
X-Debbugs-Cc: [email protected], Debian Security Team <[email protected]>

Hi,

The following vulnerabilities were published for rust-russh.

CVE-2026-42189[0]:
| Russh is a Rust SSH client & server library. Prior to version
| 0.60.1, a pre-authentication denial-of-service vulnerability exists
| in the server's keyboard-interactive authentication handler. A
| malicious client can crash any russh-based server that implements
| keyboard-interactive auth (e.g., for 2FA/TOTP) with a single
| malformed packet, requiring no credentials. This issue has been
| patched in version 0.60.1.


CVE-2026-46673[1]:
| Russh is a Rust SSH client & server library. Prior to version
| 0.60.3, CryptoVec used unchecked capacity growth, unchecked length
| arithmetic, and unsafe allocation/locking paths. In current russh
| releases, local SSH agent peers could still feed attacker-controlled
| frame lengths into buffer growth before validation. In older russh
| releases before 0.58.0, remote SSH traffic also reached CryptoVec
| through transport and compression buffers. This issue has been
| patched in version 0.60.3.


CVE-2026-46702[2]:
| Russh is a Rust SSH client & server library. From version 0.34.0 to
| before version 0.61.1, when SSH compression is enabled, russh
| accepted compressed packets whose on-wire size passed the normal
| transport packet-length checks but whose decompressed size was much
| larger. This allowed a remote peer to send oversized post-
| decompression packets that should have been rejected. In current
| releases, this is a remote denial-of-service / resource-exhaustion
| issue in the post-decompression receive path. In older releases
| before 0.58.0, the same remote decompression path used CryptoVec,
| which appears to make the historical impact worse. This issue has
| been patched in version 0.61.1.


CVE-2026-46705[3]:
| Russh is a Rust SSH client & server library. From version
| 0.34.0-beta.1 to before version 0.61.0, the russh server
| authentication path keeps internal userauth state across
| SSH_MSG_USERAUTH_REQUEST messages without separating that state when
| the request principal changes. RFC 4252 allows the user name and
| service name fields to change between authentication requests. The
| issue is not that such changes are invalid. The issue is that russh-
| owned authentication state, such as remaining methods, partial-
| success state, and in-progress method state, can remain associated
| with the connection and then influence a later request for a
| different (user, service). This is an internal library state
| mismatch. This issue has been patched in version 0.61.0.


CVE-2026-48107[4]:
| Russh is a Rust SSH client & server library. From version 0.37.0 to
| before version 0.61.0, in the russh client keyboard-interactive
| authentication path, a malicious SSH server could send a
| USERAUTH_INFO_REQUEST with an attacker-controlled prompt count, and
| the client would use that raw count directly in
| Vec::with_capacity(...) before validating that enough prompt data
| was actually present in the packet. This issue has been patched in
| version 0.61.0.


CVE-2026-48108[5]:
| Russh is a Rust SSH client & server library. From version
| 0.34.0-beta.1 to before version 0.61.0, russh did not enforce the
| SSH identification-string rules as deliberately as OpenSSH. In
| particular, the server-side identification reader used the same
| permissive path as the client, allowing pre-banner lines from
| clients, and the reader did not enforce a bounded number of pre-
| banner lines. For a library server built on russh, this could allow
| a remote peer to hold connection setup resources in the cleartext
| pre-authentication phase with malformed identification input that
| should have been rejected early. This issue has been patched in
| version 0.61.0.


CVE-2026-48110[6]:
| Russh is a Rust SSH client & server library. From version 0.34.0 to
| before version 0.61.0, several russh client and server message
| handlers decoded attacker-controlled SSH strings, name-lists, and
| byte fields into owned allocations before applying field-specific
| bounds. A remote SSH peer could send oversized, high-fanout, or
| malformed length-prefixed fields and make the library allocate,
| attempt to allocate, or split data before rejecting input that
| should have been rejected earlier. This issue has been patched in
| version 0.61.0.


If you fix the vulnerabilities please also make sure to include the
CVE (Common Vulnerabilities & Exposures) ids in your changelog entry.

For further information see:

[0] https://security-tracker.debian.org/tracker/CVE-2026-42189
    https://www.cve.org/CVERecord?id=CVE-2026-42189
[1] https://security-tracker.debian.org/tracker/CVE-2026-46673
    https://www.cve.org/CVERecord?id=CVE-2026-46673
[2] https://security-tracker.debian.org/tracker/CVE-2026-46702
    https://www.cve.org/CVERecord?id=CVE-2026-46702
[3] https://security-tracker.debian.org/tracker/CVE-2026-46705
    https://www.cve.org/CVERecord?id=CVE-2026-46705
[4] https://security-tracker.debian.org/tracker/CVE-2026-48107
    https://www.cve.org/CVERecord?id=CVE-2026-48107
[5] https://security-tracker.debian.org/tracker/CVE-2026-48108
    https://www.cve.org/CVERecord?id=CVE-2026-48108
[6] https://security-tracker.debian.org/tracker/CVE-2026-48110
    https://www.cve.org/CVERecord?id=CVE-2026-48110

Regards,
Salvatore

Reply via email to