chore(deps): bump the rust-dependencies group with 4 updates - #2360
chore(deps): bump the rust-dependencies group with 4 updates#2360dependabot[bot] wants to merge 1 commit into
Conversation
Bumps the rust-dependencies group with 4 updates: [flate2](https://github.com/rust-lang/flate2-rs), [russh](https://github.com/warp-tech/russh), [napi](https://github.com/napi-rs/napi-rs) and [syn](https://github.com/dtolnay/syn). Updates `flate2` from 1.1.9 to 1.1.10 - [Release notes](https://github.com/rust-lang/flate2-rs/releases) - [Commits](rust-lang/flate2-rs@1.1.9...1.1.10) Updates `russh` from 0.62.7 to 0.63.1 - [Release notes](https://github.com/warp-tech/russh/releases) - [Commits](Eugeny/russh@v0.62.7...v0.63.1) Updates `napi` from 3.12.1 to 3.12.2 - [Release notes](https://github.com/napi-rs/napi-rs/releases) - [Commits](napi-rs/napi-rs@napi-v3.12.1...napi-v3.12.2) Updates `syn` from 3.0.3 to 3.0.4 - [Release notes](https://github.com/dtolnay/syn/releases) - [Commits](dtolnay/syn@3.0.3...3.0.4) --- updated-dependencies: - dependency-name: flate2 dependency-version: 1.1.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: russh dependency-version: 0.63.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: rust-dependencies - dependency-name: napi dependency-version: 3.12.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies - dependency-name: syn dependency-version: 3.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: rust-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
bashkit | ac9cb47 | Commit Preview URL Branch Preview URL |
Aug 31 2026, 09:44 AM |
… fixes (#2365) ## What changed Takes the `rust-dependencies` group bump that Dependabot opened as #2360 (`flate2` 1.1.9→1.1.10, `napi` 3.12.1→3.12.2, `syn` 3.0.3→3.0.4, `russh` 0.62.7→0.63.1) and adds the code change `russh` 0.63 requires, which #2360 could not make on its own. **`russh` 0.63.1 is a security release for code we actually run as an SSH client:** - **GHSA-47hw-gvq5-r2gm** — client-side `Handler` callbacks were reachable with invalid (never-opened) channel IDs. This is the client-side mirror of GHSA-m65r-rprj-r5rg. - **GHSA-p8qx-h547-fjw9** — two peers disagreeing on supported MACs could negotiate `none` MAC 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 audit` is green on `main` today *despite* `russh` 0.62.7 being affected. The bump is what fixes it; our audit tooling would not have told us. **Behavior change — SSH host certificates.** `russh` 0.63 widened `Handler::check_server_key` to receive a `PublicKeyOrCertificate`, so a server can now present 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** — including when 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 updated in both the knowledge threat model and the user-facing rustdoc one. ## Why Dependabot #2360 was red on five checks. It bumped `russh` across a breaking 0.x boundary without the adaptation, so the crate did not compile: ``` error[E0053]: method `check_server_key` has an incompatible type for trait --> crates/bashkit/src/builtins/ssh/russh_handler.rs:39:28 | 39 | server_public_key: &russh::keys::PublicKey, | ^^^^^^^^^^^^^^^^^^^^^^^ expected `russh::keys::PublicKeyOrCertificate`, | found `russh::keys::PublicKey` ``` and `cargo vet` had six unvetted new versions. ## Before / After Before — on #2360's head (`ac9cb47`): ``` Check failure Lint failure Test failure Examples failure Audit failure ``` ``` Vetting Failed! 6 unvetted dependencies: flate2:1.1.10 miniz_oxide:0.9.1 napi:3.12.2 russh:0.63.1 syn:3.0.4 zlib-rs:0.6.7 ``` After — locally on this branch: ``` $ cargo test -p bashkit --features ssh --lib builtins::ssh::russh_handler test result: ok. 16 passed; 0 failed; 0 ignored; 2692 filtered out $ cargo vet --locked Vetting Succeeded (27 fully audited, 5 partially audited, 587 exempted) $ cargo clippy --all-targets --features http_client,ssh,sqlite -- -D warnings Finished `dev` profile $ cargo fmt --check && just check-okf && just check-doc-links knowledge: OKF v0.2 conformant (40 concepts, 7 index files, 1 log file) docs OK: 157 relative links and 6 dependency versions across 45 files ``` 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*: ``` test_strict_accepts_matching_public_key ... ok test_strict_rejects_unmatched_public_key ... ok test_strict_rejects_certificate_even_when_inner_key_is_trusted ... ok test_strict_rejects_certificate_with_wildcard_host ... ok test_non_strict_accepts_certificate ... ok ``` The certificate fixture is a real OpenSSH ed25519 host certificate (an `ssh-key` crate test vector), not a hand-rolled blob. ## Risk - **Medium.** Touches SSH host-key verification, a security boundary. - The certificate path is new surface that `russh` 0.62 could never reach, so nothing that worked before stops working — a deployment relying on certificate-based host keys would have been failing already. - `supply-chain/` changes come from `cargo vet regenerate exemptions`. Beyond the six version 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 the corresponding `simdutf8` audit to `imports.lock`. These are coupled: the prune is only valid because of the import. - `russh` 0.62.7→0.63.1 is recorded as an **exemption**, not a delta audit. The existing `russh` deltas in `audits.toml` are human review attestations, and I am not in a position to sign one. If you want this version genuinely audited, that is a follow-up: `just vet-certify russh 0.63.1`. ## Checklist - [x] Tests added or updated - [x] Backward compatibility considered --- _Generated by [Claude Code](https://claude.ai/code/session_0131Yeb4LuBMYu9Z43k9e1xf)_
|
Superseded by #2365, which is merged. This PR could not go green on its own: Worth noting for the record: Closing. Generated by Claude Code |
|
This pull request was built based on a group rule. Closing it will not ignore any of these versions in future pull requests. To ignore these dependencies, configure ignore rules in dependabot.yml |
Bumps the rust-dependencies group with 4 updates: flate2, russh, napi and syn.
Updates
flate2from 1.1.9 to 1.1.10Release notes
Sourced from flate2's releases.
Commits
ed93d4fMerge pull request #558 from rust-lang/lib-doc-updatefb5228dMerge pull request #559 from bushrat011899/no_std6ed3ba3Add executableno_stdexamplefaed8a0Expand CI to testno_stdcompatibility and correctness2ba8e7eAdd unstableno_stdsupport behindflate2_unstable_nightly_alloc_io3fe1126Centralize usage ofstdforerrorandio98e313aAddGzHeader::mtime_as_duration0642965Switch tocoreimplicit prelude and only usestdwhere required454a63cRemove left-overdbg!statement2a490b7Addruntime_detectionfeatureUpdates
russhfrom 0.62.7 to 0.63.1Release notes
Sourced from russh's releases.
Commits
d3ae702v0.63.12885385fixed mac negotiation3430fd2correctly handle unexpected channel IDsdbe2234v0.63.0c7c673cstrict kex testsf2354c7improve strict kex checks8da8967sanitize Curve25519 params46c927ause constant-time comparison for agent unlock0363fdefixed PKCS#8 parsing panicking on incorrect contentsef9fbe1Update README.mdUpdates
napifrom 3.12.1 to 3.12.2Release notes
Sourced from napi's releases.
Commits
444bf29chore(napi): release v3.12.2 (#3459)2ffb055fix(napi): memory safety in PromiseRaw callbacks and AbortSignal conversion (...511ead2chore(deps): update dependency oxc-parser to ^0.146.0 (#3457)220b402chore(deps): update dependency oxc-parser to ^0.145.0 (#3456)70c1493chore(release): publishaeba312fix(cli): compatible with emnapi v1 & v2 (#3454)d532909chore(deps): update dependency oxc-parser to ^0.144.0 (#3453)b8ba732fix(deps): update emnapi to v2.0.0-alpha.4 (#3451)06349ebchore(deps): update cross-platform-actions/action action to v1.4.0 (#3452)a5b5f27chore(release): publishUpdates
synfrom 3.0.3 to 3.0.4Release notes
Sourced from syn's releases.
Commits
b5d62a6Release 3.0.4abf019cMerge pull request #2078 from dtolnay/foreginitemfnd454333Allow safe fn in impl Parse for ForeignItemFn8011b1cUpdate test suite to nightly-2026-08-1856a8d83Raise rayon thread size for testsf2c5c50Ignore assert_is_empty pedantic clippy lint0eba76dUpdate test suite to nightly-2026-08-05baaebceUpdate test suite to nightly-2026-07-25b886a38Update test suite to nightly-2026-07-243c41416Update test suite to nightly-2026-07-23Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore <dependency name> major versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)@dependabot ignore <dependency name> minor versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)@dependabot ignore <dependency name>will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)@dependabot unignore <dependency name>will remove all of the ignore conditions of the specified dependency@dependabot unignore <dependency name> <ignore condition>will remove the ignore condition of the specified dependency and ignore conditions