cve.bz

CVE-2026-128088 russh try_sign: asynchronous confirmation can sign after agent lock

2.2 lowFix available

Low (2.2) in eugeny russh. Fixed in russh 0.65.1.

On this page
russh is a Rust SSH client and server library that includes an SSH agent protocol implementation. Prior to version 0.65.1, try_sign() captures an Arc<PrivateKey> before awaiting Agent::confirm() and does not revalidate the shared lock state or key presence after the await. This is a distinct residual defect in the remediation for CVE-2026-116794. A peer, including a remote SSH server using agent forwarding, can begin a confirmation-constrained signature request while the agent is unlocked and receive the signature after another connection locks the agent if the stale confirmation returns true. New post-lock requests are rejected and private key material is not disclosed, but the pending operation bypasses the current lock state. This issue is fixed in version 0.65.1.

Severity

CVSS 3.1

2.2 low
CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:U/C:N/I:L/A:N
CWEs
CWE-367 Time-of-check Time-of-use (TOCTOU) Race Condition
CWE-863 Incorrect Authorization
OWASP Top 10
A01:2025 Broken Access Control
Published
Modified
Assigned by
GitHub_M (CNA)
NVD analysis
Deferred: the NVD does not plan to analyze it
Record from
the NVD, synced

Ask an AI about this CVE

Show the promptExplain CVE-2026-128088 for an engineer deciding whether to act. Use https://cve.bz/api/public/cves/CVE-2026-128088?via=ask-ai-copy and https://cve.bz/cve/CVE-2026-128088?via=ask-ai-copy as the source of truth: what is affected and which versions fix it, whether it is in CISA KEV, public exploits, and its EPSS (an internet-wide 30-day estimate of exploitation activity, not a forecast for my systems). If they give no fixed versions, use the CVE record https://cveawg.mitre.org/api/cve/CVE-2026-128088 or the vendor advisory, not third-party mirrors. Tell me how to check whether I am affected and how to verify a fix. Cite the sources and say where they are uncertain.

Opens a third-party assistant; its answer is its own, not cve.bz's. The prompt holds only this CVE's id and public links.

Badge for a README or a site

CVE-2026-128088

An image that stays current: it is drawn from the data each time it is fetched (a host that proxies images, as GitHub does, may show its copy for a while). Markdown:

[![CVE-2026-128088](https://cve.bz/cve/badge/CVE-2026-128088.svg)](https://cve.bz/cve/CVE-2026-128088)

HTML:

<a href="https://cve.bz/cve/CVE-2026-128088"><img src="https://cve.bz/cve/badge/CVE-2026-128088.svg" alt="CVE-2026-128088"></a>

Affected

Versions

From the CNA's record in the CVE List.

ProductAffected
Eugeny russh>= 0.65.0, < 0.65.1

Fix and patched versions

  • russh (crates.io): fixed in 0.65.1

Packages (OSV)

AdvisoryEcosystemPackageAffectedFixed in
GHSA-736f-c93q-9fwxcrates.iorussh>=0.65.0 <0.65.10.65.1

Attack patterns (CAPEC)

  • CAPEC-27 Leveraging Race Conditions via Symbolic Links Likelihood: Medium · Severity: High
  • CAPEC-29 Leveraging Time-of-Check and Time-of-Use (TOCTOU) Race Conditions Likelihood: High · Severity: High

The attack patterns MITRE's CAPEC relates to this record's weaknesses, as MITRE names them. Credits.

History

  1. The NVD deferred its analysis

Changes since this site first stored the record. The same for every record: /api/public/changes.

References

Check your stackJSON