Skip to content

update: upgrade to russh 0.65 and adopt its agent and signer APIs - #350

Merged
inureyes merged 1 commit into
mainfrom
update/upgrade-deps-20261101
Nov 1, 2026
Merged

inureyes merged 1 commit into
mainfrom
update/upgrade-deps-20261101

Conversation

@inureyes

@inureyes inureyes commented Nov 1, 2026

Copy link
Copy Markdown
Member

Updates every Rust dependency to its latest compatible release and adopts russh 0.65, which includes our merged russh#794 and makes an existing workaround unnecessary.

Scope

The root workspace is the only tracked Rust project. The repository tracks no package.json, lockfile, or pnpm configuration, so there are no web packages or pnpm version to update. references/ holds gitignored upstream clones and was left alone.

Migration

  • russh 0.64.1 to 0.65.0 picks up six security fixes. Handler::auth_publickey now takes VerifiedPublicKey, which only russh can construct, so the server policy moved to SshHandler::authenticate_publickey.
  • russh#794: bssh sends session-bind@openssh.com on direct-authentication agent connections and, with the forwarding flag set, on relayed forwarded-agent connections.
  • russh#788: a failed signer leaves the session usable. authenticate_declinable is removed, and agent and local signer failures now move on to the next identity (behavior change, matching OpenSSH).

Held back

  • rsa 0.10.0-rc.18, pkcs1 0.8.0-rc.4, ssh-key 0.7.0-rc.11: exact pins in russh; bssh's ssh-key pin matches.
  • psm 0.1.24: pest_stack_guard pins =0.1.24 (via ratatui, termwiz, pest).
  • generic-array 0.14.7: crypto-common 0.1.7 pins it (via ratatui, termwiz, sha2 0.10).

Existing and not gated by CI: cargo deny reports RUSTSEC-2023-0071 (rsa) and RUSTSEC-2024-0449 (unsafe-libyaml via serde_yaml).

Validation

fmt, clippy with all targets and features, and all 2654 tests pass on macOS; cargo check --locked passes on MSRV 1.97. Linux and Windows cross-checks could not run locally (no C cross toolchain), so CI covers them.

OpenSSH V_10_3_P1 agent-restrict still fails on macOS, as in the baseline, but its four direct constrained phases now pass. The four multihop phases fail because ssh-agent requires publickey-hostbound-v00@openssh.com, which russh cannot send. agent, agent-getpeereid, agent-timeout, forward-control, and proxy-connect pass. The local OpenSSH tree was built with --with-sandbox=no because its sandbox code does not compile on this SDK.

Refs #327

Refresh Cargo.lock and raise manifest floors to the latest releases. russh 0.65 carries six security fixes (EXT_INFO allocation, zero maximum packet size, nested certificate stack exhaustion, agent server issues).

Handler::auth_publickey now takes VerifiedPublicKey, which only russh can construct, so the server policy moves to SshHandler::authenticate_publickey for direct testing.

Use russh #794: bssh sends session-bind@openssh.com on direct-authentication agent connections and, with the forwarding flag set, on relayed forwarded-agent connections. Refusal is non-fatal as in OpenSSH; a timeout closes that connection. In agent-restrict, the four direct constrained phases now pass. The four multihop phases still fail because ssh-agent requires publickey-hostbound-v00@openssh.com, which russh cannot send.

Use russh #788: a failed signer now leaves the session usable, so the authenticate_declinable workaround is removed and agent and local signer failures move on to the next identity.

Refs #327
@inureyes inureyes added type:dependency Dependency updates status:review Under review priority:medium Medium priority issue labels Nov 1, 2026
@inureyes
inureyes merged commit 6e5a7dd into main Nov 1, 2026
5 checks passed
@inureyes
inureyes deleted the update/upgrade-deps-20261101 branch November 1, 2026 14:23
@inureyes inureyes added status:done Completed and removed status:review Under review labels Nov 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority:medium Medium priority issue status:done Completed type:dependency Dependency updates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant