fix(deps): bump rust-dependencies group, taking russh 0.63.1 security fixes - #2365
Merged
Conversation
… fixes Supersedes the Dependabot group bump in #2360, which could not compile: russh 0.63 changed Handler::check_server_key to take PublicKeyOrCertificate instead of &PublicKey, and cargo-vet had six unvetted new versions. russh 0.63.1 is a security release for the client path we use: - GHSA-47hw-gvq5-r2gm: client-side Handler callbacks reachable with invalid (never-opened) channel IDs - GHSA-p8qx-h547-fjw9: MAC-requiring cipher negotiable without a MAC, panicking the session task Neither advisory is in the RustSec database yet, so cargo-audit reports clean on main despite russh 0.62.7 being affected. Host certificates are a new surface russh 0.62 could never deliver. With no CA trust store there is nothing to validate a certificate against, so strict mode rejects them - including when the key a certificate wraps is itself trusted, since matching that would extend trust on the strength of an unvalidated signature chain and ignore the certificate's validity window, principals and critical options. Recorded as L-SSH-001. Also bumps flate2 1.1.9 -> 1.1.10, napi 3.12.1 -> 3.12.2, syn 3.0.3 -> 3.0.4. supply-chain/ regenerated via `cargo vet regenerate exemptions`, which additionally pruned nine exemptions now covered by a refreshed Mozilla import.
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
bashkit | 921dde7 | Commit Preview URL Branch Preview URL |
Aug 31 2026, 09:25 PM |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
Takes the
rust-dependenciesgroup bump that Dependabot opened as #2360 (flate21.1.9→1.1.10,
napi3.12.1→3.12.2,syn3.0.3→3.0.4,russh0.62.7→0.63.1) and adds thecode change
russh0.63 requires, which #2360 could not make on its own.russh0.63.1 is a security release for code we actually run as an SSH client:Handlercallbacks were reachable with invalid(never-opened) channel IDs. This is the client-side mirror of GHSA-m65r-rprj-r5rg.
noneMAC for a cipher that requires one, panicking the session task.
It also carries stricter kex checks, a PKCS#8 parsing panic fix, constant-time agent
unlock, and Curve25519 parameter sanitization.
Neither GHSA is in the RustSec advisory database yet, so
cargo auditis green onmaintoday despite
russh0.62.7 being affected. The bump is what fixes it; our audit toolingwould not have told us.
Behavior change — SSH host certificates.
russh0.63 widenedHandler::check_server_keyto receive aPublicKeyOrCertificate, so a server can nowpresent a CA-signed host certificate instead of a raw key. Bashkit has no CA trust store,
so under
strict_host_key_checking(the default) a certificate is rejected — includingwhen the public key it wraps is itself a configured trusted key. Matching the embedded key
would extend trust on the strength of a signature chain we never validated, and would
ignore the certificate's validity window, principals and critical options. Configuring the
host's public key directly stays the supported path. Non-strict mode is unchanged: it still
accepts anything after warning.
Recorded as L-SSH-001 in
knowledge/operations/limitations.md, with TM-SSH-006 updatedin both the knowledge threat model and the user-facing rustdoc one.
Why
Dependabot #2360 was red on five checks. It bumped
russhacross a breaking 0.x boundarywithout the adaptation, so the crate did not compile:
and
cargo vethad six unvetted new versions.Before / After
Before — on #2360's head (
ac9cb47):After — locally on this branch:
Five new host-key tests cover the decision, the important one being that a certificate is
refused even when the key it certifies is trusted:
The certificate fixture is a real OpenSSH ed25519 host certificate (an
ssh-keycrate testvector), not a hand-rolled blob.
Risk
russh0.62 could never reach, so nothing thatworked before stops working — a deployment relying on certificate-based host keys would
have been failing already.
supply-chain/changes come fromcargo vet regenerate exemptions. Beyond the sixversion bumps it also pruned nine exemptions now covered by a refreshed Mozilla import
(
anstream,anstyle-parse,anstyle-query,anstyle-wincon,colorchoice,is_terminal_polyfill,once_cell_polyfill,simdutf8,strsim) and added thecorresponding
simdutf8audit toimports.lock. These are coupled: the prune is onlyvalid because of the import.
russh0.62.7→0.63.1 is recorded as an exemption, not a delta audit. The existingrusshdeltas inaudits.tomlare human review attestations, and I am not in a positionto sign one. If you want this version genuinely audited, that is a follow-up:
just vet-certify russh 0.63.1.Checklist
Generated by Claude Code