Eugeny/russh
 Watch   
 Star   
 Fork   
4 days ago
russh

v0.65.0

Breaking changes

  • d507707: feat(server): expose the publickey algorithms to Handler (#785) (@Eric-D) #785
    • Handler::auth_publickey_offered now takes a server::PublicKeyOffer and Handler::auth_publickey takes a server::VerifiedPublicKey instead of &PublicKey. Read the key from the public_key field. The new algorithm field makes accessible the signature algorithm used by the client, allowing the server to react to it
  • 62efa5a: Remove the no-op async-trait dependency and crate feature (#786) (@FalkWoldmann) #786

Security fixes

GHSA-9wfm-jcj8-jfv9 - russh's SSH agent server is susceptible to unbound allocations via repeated SSH_AGENT_CONSTRAIN_CONFIRM messages

  • 23aa5d2 - A malicious SSH agent client can trigger unbounded allocations in russh based agents

GHSA-4p9f-7p9m-5vfg - russh's SSH client is susceptible to unbounded allocations via EXT_INFO packets

  • b33e93b - russh did not limit the number of EXT_INFO messages that a malicious server can send, leading to unbounded memory growth over time

GHSA-fw5c-8223-6h42 - russh: peer-declared zero maximum packet size permanently stalls channel writes

  • 39cb9db - malicious peers can hang up the channel by setting max packet size to zero

GHSA-662x-8wvj-2276 - pageant: unbounded frame buffering on peer-controlled 4-byte length prefix

  • 69e4b55 - a malicious SSH agent client can trigger unbounded allocations in russh based agents

GHSA-vp5q-ff62-jwqv - Agent server never calls Agent::confirm

  • 62db6e7 - Agent::confirm was defunct and never got called by the agent server

GHSA-3hm4-p7h4-rvwp - russh: pre-authentication stack exhaustion via nested OpenSSH certificates

  • 730d663 - a malicious client could trigger a stack overflow via a crafted OpenSSH certificate

Features

  • d65823f: feat(client): support OpenSSH agent session binding (#794) (@inureyes) #794
    • Exposes the verified initial key-exchange data through a typed AgentSessionBinding. You need it to send session-bind@openssh.com for OpenSSH destination-constrained agent keys.

Fixes

  • 13c94f0: Fix channel window accounting on window adjust (#790) (@notsapinho) #790
  • e2bdf85: client: keep the session usable when a Signer fails after PK_OK (#788) (@meanaverage) #788
  • b10506e: Re-arm the client keepalive timer before authentication (#791) (@Bokjan) #791
    • Fixes the client session task spinning on a CPU core when the keepalive timer fired before authentication.
  • c1fada1: fix(agent): honor SSH_AGENT_RSA_SHA2_* flags when signing with RSA keys (#796) (@mdevolde) #796
  • 3beb126: client: don't arm the rekey timer on wasm32 (#797) (@biao29) #797

New Contributors

Full Changelog: https://github.com/Eugeny/russh/compare/v0.64.1...v0.65.0

25 days ago
russh

v0.64.1

Security fixes

GHSA-4wc5-f2rc-q74m - Unbounded memory allocation in agent protocol server via crafted constraint records

A local actor or a connected remote server (that the user forwards an agent connection to) can trigger an unlimited memory allocation in a russh-based SSH agent via a crafted message.

25 days ago
russh

v0.64.0

Breaking changes

  • 5d9d2b8: drop the legacy ed25519 key parser
    • Dropped the legacy-ed25519-pkcs8-parser feature. Legacy keys were written in non-compliant format by russh pre-v0.43. From now on, parsing those keys will return a hard error.

Security fixes

GHSA-j7h2-66j4-ghjf - russh server accepts pubkey authentication with a mismatched signature algorithm

Russh server side did not verify that the client signatures were made using the negotiated algorithm. While no bypass is possible through this bug, this allowed a client to e.g. silently downgrade its own signature from rsa-sha2-512 to rsa-sha1

Features

  • efa9a03: Add support hostkeys-prove-00@openssh.com support (#767) (@inureyes) #767

    • Adds client::Handle::hostkeys_prove to ask the server to prove ownership of the host keys it announced via hostkeys-00@openssh.com.
  • a0ded76: Support sending custom global requests from the client (#759) (@ChrisJr404) #759

    • Adds client::Handle::send_global_request(name, data, want_reply)

Fixes

  • e8b2fd3: Fix enforce rekey read and time limits (#766) (@inureyes) #766
  • bf05d50: honor want_reply = false on server-side global requests
  • dddf72c: bug: Fix partial_success clobber (#773) (@markovejnovic) #773
  • 26487fb: fix: auth-agent-req@openssh.com replies on channel (#774) (#775) (@markovejnovic) #775
  • 36fa1bc: fix(pageant): trim username padding and handle empty principals (#779) (@t8y2) #779

New Contributors

Full Changelog: https://github.com/Eugeny/russh/compare/v0.63.3...v0.64.0

2026-09-10 00:29:52
russh

v0.63.3

Fixes

  • c13b259: enforce inactivity timeout even during stalled writes (Eugene)
2026-09-04 02:35:25
russh

v0.63.2

Security fixes

GHSA-g4mp-vgx3-xrvm - out-of-bounds read in pageant

A malicious Pageant agent could cause an out-of-bounds read / oversized allocation in the pageant library user.

GHSA-35g8-35p8-c8fw - unbounded memory allocation in server

An authenticated client could trigger unbounded memory allocation during rekey phase

Fixes

  • client: encode the negotiated hash algorithm for RSA certificates (#764) #764 (Jeongkyu Shin)
  • 4206815: Fix pty-req terminal modes: deliver them unpadded, encode the right l… (#755) (tluyben) #755
  • b1d3893: fixed #762 - redact sensitive data from debug logging (Eugene)
  • 66789f4: fixed #761 - data write split across a kex breaks (Eugene)
  • a04e1b5: fixed #758 - fail RSA signing explicitly when RSA feature is not enabled (Eugene)
  • 422123c: dedup zlib compress loop into compress_into (Eugene)
2026-08-24 02:13:18
russh

v0.63.1

Security fixes

GHSA-47hw-gvq5-r2gm - client-side Handler callbacks reachable with invalid channel IDs

A mirror of GHSA-m65r-rprj-r5rg for the client side - Handler per-channel callbacks are called even when the server supplies an invalid (never opened) channel ID. Depending on what the handler does this can lead to a vulnerability.

GHSA-p8qx-h547-fjw9 - MAC-requiring block cipher can be negotiated without MAC and panic

Two peers disagreeing on supported MACs can end up negotiating none MAC for a cipher that requires one, which leads to the session task panicking.

2026-08-21 21:24:53
russh

v0.63.0

Features

  • 09f6582: Support host certificates on the client side (#752) (@biao29) #752

    • This changes the signature of Handler::check_server_key to take a new PublicKeyOrCertificate enum instead of &PublicKey
  • d7601ae: Support host certificates on the server side (#641) (Georg von Zengen) #641

    • Adds a Config::certificates that functions similarly to Config::keys

Fixes

  • f2354c7: improve strict kex checks (Eugene)
  • 0363fde: fixed PKCS#8 parsing panicking on incorrect contents (Eugene)
  • 46c927a: use constant-time comparison for agent unlock (Eugene)
  • 8da8967: sanitize Curve25519 params (Eugene)

Full Changelog: https://github.com/Eugeny/russh/compare/v0.62.7...v0.63.0

2026-08-18 06:00:00
russh

v0.63.0-beta.1

Features

  • 09f6582: Support host certificates on the client side (#752) (@biao29) #752
  • d7601ae: Support host certificates on the server side (#641) (Georg von Zengen) #641

Full Changelog: https://github.com/Eugeny/russh/compare/v0.62.7...v0.63.0-beta.1

2026-08-18 02:37:41
russh

v0.62.7

Features

  • client: support gssapi-with-mic auth (#738) #738 (ayamir)

Fixes

  • don't truncate decompressed packets that expand more than 2x (#750) #750 (Luiz Ribeiro)
  • c9da80c: Pageant WM_COPYDATA protocol fix & token tightening (#624) (vzex) #624
  • fall back to GetUserNameA when GetUserNameExA fails (#726) #726 (cwatanab)
2026-08-11 17:21:41
russh

v0.62.6

Security fixes

GHSA-g6xm-f9xp-qq35 - server-side max_auth_attempts was not enforced - f8fd0b1

Config::max_auth_attempts was not being properly enforced by russh server implementation.

Fixes

  • c66837e: Fix deadlock when handling open channel on contended handler (#734) (Eric Rodrigues Pires) #734

Changes

  • c465e3f: accept a single trailing comma in SSH name-lists (#743) (PokAhonTAS911) #743
  • add Motor OS support (#742) #742 (lasiotus)