chore(deps): update dependencies and patch cargo audit advisories - #685
Merged
Conversation
…ries Lockfile-only refresh via `cargo update`. No manifest or code changes. Resolves security findings reported by `cargo audit`: - quinn-proto 0.11.14 -> 0.11.16 (RUSTSEC-2026-0185, 7.5 high): remote memory exhaustion via unbounded out-of-order stream reassembly - anyhow 1.0.102 -> 1.0.104 (RUSTSEC-2026-0190): unsoundness in Error::downcast_mut(), patched in >= 1.0.103 Clears three yanked crates: aes 0.9.0 -> 0.9.1, crypto-bigint 0.7.3 -> 0.7.5, spin 0.9.8 -> 0.9.9. The reqwest <0.13.3 pin is respected (stays at 0.13.2), preserving the wasm32-wasi tokio cfg workaround documented in Cargo.toml. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
No code changes required; the URL_SAFE_NO_PAD engine API used by the PKCE challenge/verifier encoding is unchanged in 0.23. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
No code changes required. The crate is declared for the fallback token storage feature set but has no remaining call sites in src/, so this is a manifest-only bump. It also dedupes against the 0.11 copy already pulled in transitively. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
No code changes required. The Retrieve trait impl and options() builder used for $ref resolution in the IDP schema migration are unchanged across 0.47-0.49. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
No code changes required. Connection::new, Config::default, Mode::Server and poll_next_inbound as used by the synthetics tunnel multiplexer are unchanged in 0.14. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
No code changes required. The rustls-tls-native-roots feature and the Message/WebSocketStream APIs used by the tunnel WebSocket bridge are unchanged in 0.30. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
russh 0.62 reworked the channel-open callback contract. Both channel_open_session and channel_open_direct_tcpip now receive a ChannelOpenHandle and return Result<()> instead of Result<bool>: accepting requires an explicit reply.accept().await, and dropping the handle sends an automatic AdministrativelyProhibited rejection. Handler changes in src/tunnel.rs: - channel_open_session accepts explicitly instead of returning Ok(true) - channel_open_direct_tcpip accepts after the TCP connect succeeds but before spawning the read pump, so no data is written to a channel the client has not yet seen accepted - a failed TCP connect still propagates, and now also drops the handle, which rejects the channel instead of leaving the open request unanswered This bump also pulls the SSH crypto chain from pre-release to stable: curve25519-dalek 5.0.0-rc.0 -> 5.0.0, ed25519-dalek 3.0.0-rc.0 -> 3.0.0, elliptic-curve 0.14.0-rc.33 -> 0.14.1, and p256/p384/p521 to 0.14.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
jack-edmonds-dd
approved these changes
Jul 27, 2026
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.
Summary
Refreshes the dependency tree to clear the
cargo auditfindings and bring five direct dependencies up a major version.cargo auditgoes from 3 vulnerabilities + 4 warnings to 2 vulnerabilities + 0 warnings, with the two remaining findings unfixable upstream (see below).Each bump is a separate commit so any individual one can be dropped without losing the rest. The first commit carries all of the security value and touches no code.
Changes
Security (lockfile only —
db10b0e)quinn-proto0.11.14 → 0.11.16 — RUSTSEC-2026-0185, 7.5 high, remote memory exhaustion via unbounded out-of-order stream reassemblyanyhow1.0.102 → 1.0.104 — RUSTSEC-2026-0190, unsoundness inError::downcast_mut()(patched in>= 1.0.103)aes0.9.0 → 0.9.1,crypto-bigint0.7.3 → 0.7.5,spin0.9.8 → 0.9.9Major bumps (no code change required)
base640.22 → 0.23 (Cargo.toml:112) —URL_SAFE_NO_PADengine API unchangedaes-gcm0.10 → 0.11 (Cargo.toml:121) — also dedupes against the 0.11 copy already present transitivelyjsonschema0.46 → 0.49 (Cargo.toml:166) —Retrieveimpl andoptions()builder atsrc/commands/idp/migrate.rs:1076,1143unchangedyamux0.13 → 0.14 (Cargo.toml:127) — tunnel multiplexer API unchangedtokio-tungstenite0.29 → 0.30 (Cargo.toml:126) —rustls-tls-native-rootsfeature and stream API unchangedrussh0.61 → 0.62 (Cargo.toml:128,src/tunnel.rs) — requires code changes0.62 reworked the channel-open callback contract: handlers now receive a
ChannelOpenHandleand returnResult<()>instead ofResult<bool>. Accepting requires an explicitreply.accept().await, and dropping the handle sends an automaticAdministrativelyProhibitedrejection — so a mechanical signature-only patch would have silently rejected every channel.channel_open_session(src/tunnel.rs:242) accepts explicitly instead of returningOk(true)channel_open_direct_tcpip(src/tunnel.rs:251) accepts after the TCP connect succeeds but before spawning the read pump, so no data is written to a channel the client has not yet seen acceptedThis bump also pulls the SSH crypto chain off pre-release versions:
curve25519-dalek5.0.0-rc.0 → 5.0.0,ed25519-dalek3.0.0-rc.0 → 3.0.0,elliptic-curve0.14.0-rc.33 → 0.14.1, andp256/p384/p521→ 0.14.0.Deliberately not included
keyring3 → 4 — deferred. 4.x is a full restructure into akeyring-corefacade plus per-store crates. Its own docs state that applications wanting to control which store is used per platform "should not be linking to this library at all."src/auth/storage.rsis exactly that case: it probes Secret Service and falls back to the kernel keyring (keyutils) on Linux (src/auth/storage.rs:728-743). The 4.xv1compatibility shim hardcodeszbus-secret-serviceon Linux and exposes neitherkeyring::keyutilsnorset_default_credential_builder, so there is no way to express that fallback through it — shipping the shim would regress headless/CI Linux users. Doing it properly means migrating ~60keyring::Entry/keyring::Errorcall sites in code and tests tokeyring-corewith explicit per-platform store setup. That deserves its own PR, and there is no advisory against keyring 3. Worth noting the current feature list atCargo.toml:149is already stale —cargo outdatedreports all six requested features as obsolete in 4.x.rsaRUSTSEC-2023-0071 (Marvin attack, medium) — unfixable. Both copies remain:rsa0.9.10 via our directssh-key0.6 dep, andrsa0.10.0-rc.18 viarussh. Upstream has published no fixed release.ssh-keyhas no stable 0.7 (latest is 0.7.0-rc.11), so bumping that dep would mean taking a direct dependency on a release candidate. Left as-is and not suppressed; per discussion, nocargo auditCI gate is being added in this PR.One partial path does exist and was deliberately not taken:
russhgates itsrsacopy behind an optional but default-onrsafeature, sodefault-features = false(plus re-enabling the rest) would drop that finding. Not done here because it removes RSA host-key support from the SSH tunnel — a functional change, not a dependency bump — andsrc/tunnel.rshas no test coverage to catch the regression. Worth its own PR if we want RSA gone.wasm-bindgen family — left at their exact
=0.2.114/=0.3.91pins. Commit c39359a pinned these specifically for WASI compatibility.reqwest— stays at 0.13.2.cargo updaterespects the<0.13.3bound, preserving the wasm32-wasi tokio cfg workaround documented atCargo.toml:88-90.Testing
cargo test --bin pup -- --test-threads=1— 1599 passed, 0 failedcargo clippy --all-targets -- -D warnings— cleancargo fmt --check— cleancargo check --target wasm32-wasip2 --no-default-features --features wasi— cleancargo check --lib --target wasm32-unknown-unknown --no-default-features --features browser— cleancargo audit— 3 vulnerabilities + 4 warnings → 2 vulnerabilities + 0 warningsTwo caveats worth reviewer attention:
src/tunnel.rshas no test coverage (cargo test tunnelmatches 0 tests), so the russh handler migration is verified by compilation and API-contract reading against the vendored russh 0.62.4 source, not by execution. The accept/reject path is the part to exercise manually against a live synthetics tunnel.cargo check --all-featuresfails onmaintoday, before any change here, withE0428: the name config_dir is defined multiple times(src/config.rs:440andsrc/config.rs:457—nativevswasi/browser). Not introduced by this PR and not addressed in it, but it means--all-featuresis not a usable smoke test; the three real feature sets were checked individually instead.🤖 Generated with Claude Code