docs(deps): record that the pinned russh fork predates upstream's security fixes

The patch note said "temporary until upstream releases gssapi-with-mic
support (PR #737)" and left it there. Checking that exit condition turned up
three things worth writing down.

The PR number is wrong: #737 does not exist. The real one is Eugeny/russh#738,
and it was merged upstream on 2026-08-11T09:27:51Z — so the condition this
patch was waiting for has half arrived. Only half: v0.62.6 was published at
09:26:56Z the same day, one minute before the merge, so no release carries it
yet and the patch still has to stay.

The part that matters more: this rev is dated 2026-07-14 and branched before
v0.62.3, so it is missing every security fix upstream has published since —
v0.62.4's three (malformed PTY request, malformed Curve25519 KEX packet, zero
Curve25519 key), v0.62.5's channel-ID validation and v0.62.6's
max_auth_attempts. The last two are described as server-side and tty7 runs no
SSH server, but "fix mpint encoding and validate curve25519 keys" is in key
exchange, which a client runs too, against whatever server it dials. Flagged
for assessment rather than asserted: I have not reproduced it.

No dependency change here. Moving the SSH layer wants an SSH connection to
test it against, and connecting needs the GUI's connection manager, which
cannot be driven from this environment. The interim fix is to rebase the fork
onto v0.62.6 or later; the real one is to drop the patch when #738 ships.

Verified with the GitHub API rather than assumed: commit dates on both sides,
and the fork does not contain any of the four fix commits.

2937 tests pass.
This commit is contained in:
l0ng-ai
2026-08-15 18:11:17 +08:00
parent 84124a57a2
commit 56eb32b99f
+33 -5
View File
@@ -323,11 +323,39 @@ smallvec = "1"
smol = "2"
[patch.crates-io]
# Temporary until upstream russh releases gssapi-with-mic client auth support
# (https://github.com/Eugeny/russh/pull/737) — remove this patch and take the
# crates.io release once it lands. Pinned to an exact rev (never a branch):
# russh is the SSH protocol layer handling user credentials, and a moving
# branch on a third-party fork could change what `cargo update` builds.
# Temporary until upstream russh *releases* gssapi-with-mic client auth
# support — remove this patch and take the crates.io release once it lands.
# Pinned to an exact rev (never a branch): russh is the SSH protocol layer
# handling user credentials, and a moving branch on a third-party fork could
# change what `cargo update` builds.
#
# Status as of 2026-08-15 (the PR this used to cite as #737 does not exist;
# the real one is #738):
#
# - Eugeny/russh#738 "feat(client): support gssapi-with-mic auth" was MERGED
# upstream on 2026-08-11T09:27:51Z. v0.62.6 was published at 09:26:56Z the
# same day — one minute *before* the merge — so no release carries it yet.
# The next release after that should; check before assuming this patch is
# still needed.
#
# - THIS REV IS OLDER THAN THE UPSTREAM SECURITY FIXES. It is dated
# 2026-07-14 and branched before v0.62.3, so it does not contain:
# v0.62.4 (2026-07-22) GHSA-cqjc-rmpq-xprq, GHSA-g9hv-x236-4qp3,
# GHSA-5xvq-cp9x-6p6r — malformed PTY request,
# malformed Curve25519 KEX packet, zero Curve25519
# key. Upstream describes them as a client crashing
# its own session, but "fix mpint encoding and
# validate curve25519 keys" (a7fc1eb) is in key
# exchange, which a *client* also runs against
# whatever server it dials — worth assessing rather
# than assuming it is server-only.
# v0.62.5 (2026-07-31) GHSA-m65r-rprj-r5rg — channel IDs not validated.
# v0.62.6 (2026-08-11) GHSA-g6xm-f9xp-qq35 — max_auth_attempts.
#
# The last two are described as server-side and tty7 runs no SSH server, so
# they most likely do not apply; the KEX ones are the reason this note
# exists. Until #738 ships in a release, the fix is to rebase the fork onto
# v0.62.6 (or later) and move this rev forward.
russh = { git = "https://github.com/ayamir/russh", rev = "0d1d073350ed823069252075cbf3db9672d5b490" }
[workspace.lints.clippy]