Source: rust-russh Version: 0.64.1-2 X-Debbugs-CC: [email protected] Severity: grave Tags: security upstream
Hi, The following vulnerabilities were published for rust-russh. CVE-2026-116696[0]: | russh is a Rust SSH client and server library that includes an SSH | agent protocol implementation. Prior to 0.65.0, | russh::keys::agent::server::serve in russh/src/keys/agent/server.rs | accepts repeated SSH_AGENT_CONSTRAIN_CONFIRM records while adding a | key and appends every Constraint::Confirm record to the key's | retained constraint vector without a count or memory limit. A | process that can connect to the agent socket, including the remote | side of a forwarded agent session, can repeatedly add constrained | keys and cause renewable memory growth that persists for the process | lifetime because keys without a lifetime constraint do not expire. | This issue is fixed in version 0.65.0. CVE-2026-116773[1]: | russh is a Rust SSH client and server library that includes an SSH | agent protocol implementation. Prior to 0.65.0, the client | Session::process_packet path in russh/src/client/encrypted.rs | accepts repeated packets encoded with russh's private msg::EXT_INFO | = 7 before authentication, while the standards-compliant EXT_INFO | message number 82 does not reach the affected handler. The | handle_ext_info function appends every parsed extension name to | received_extensions without clearing, deduplicating, or bounding the | vector. A malicious SSH server that deliberately sends private | message number 7 can therefore retain an unbounded number of | attacker-controlled extension names for the session lifetime, | causing progressive client memory exhaustion. This issue is fixed in | version 0.65.0. CVE-2026-116774[2]: | russh is a Rust SSH client and server library that includes an SSH | agent protocol implementation. From 0.60.0 until 0.65.0, channel- | open parsing accepts a peer-declared maximum_packet_size of zero and | passes it into ChannelTx::poll_writable in | russh/src/channels/io/tx.rs. The Channel::data, | Channel::make_writer, and Channel::into_stream asynchronous write | paths then calculate a writable size of zero and remain pending | forever because window adjustments cannot satisfy a static zero | packet maximum. An authenticated client can strand server writes, | and a malicious server can strand client writes, allowing affected | tasks, channels, and connections to accumulate without surfacing an | error. This issue is fixed in version 0.65.0. CVE-2026-116794[3]: | russh is a Rust SSH client and server library that includes an SSH | agent protocol implementation. From 0.50.0-beta.12 until 0.65.0, the | agent server's Connection::try_sign path in | russh/src/keys/agent/server.rs recognizes | SSH_AGENT_CONSTRAIN_CONFIRM but returns a hard-coded successful | result instead of calling Agent::confirm. In applications that | override Agent::confirm to require user approval or another policy | check, a process that can reach the agent socket, including the | remote side of a forwarded agent, can use a key added through ssh- | add -c without that check and can authenticate or sign data as the | user while the key remains loaded. The separate | Agent::confirm_request hook still runs for every signing request, so | checks implemented there remain effective, and implementations that | retain the default always-successful Agent::confirm do not lose an | approval check through this regression. This issue is fixed in | version 0.65.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-116696 https://www.cve.org/CVERecord?id=CVE-2026-116696 [1] https://security-tracker.debian.org/tracker/CVE-2026-116773 https://www.cve.org/CVERecord?id=CVE-2026-116773 [2] https://security-tracker.debian.org/tracker/CVE-2026-116774 https://www.cve.org/CVERecord?id=CVE-2026-116774 [3] https://security-tracker.debian.org/tracker/CVE-2026-116794 https://www.cve.org/CVERecord?id=CVE-2026-116794 Regards, Salvatore

