- Reported
-
- Issued
-
- Package
-
russh
(crates.io)
- Type
-
Vulnerability
- Keywords
-
#ssh-agent
#confirm
#constraint
#authorization
- Aliases
-
- References
-
- Patched
-
- Unaffected
-
Description
A key added to an SSH agent with the confirm constraint (what ssh-add -c sends) must not be used to sign until the user approves each use. russh's agent server (russh::keys::agent::server) accepted the constraint, but when a sign request arrived for such a key it used a fixed true in place of the result of Agent::confirm, so the application's confirmation step never ran. This started in 0.50.0-beta.12; 0.50.0-beta.8 to beta.11 still called confirm, and earlier russh releases have no agent server.
Any process that can reach the agent, including a remote host when the agent is forwarded, can then sign with the protected key without the user's approval, for example to log in elsewhere as the user. The private key itself is not disclosed. Agents whose Agent::confirm keeps the default, which always returns true, behave the same before and after the fix.
From 0.65.0 the agent server calls Agent::confirm for confirm-constrained keys and refuses to sign when it returns false. Implementations that left confirm unimplemented (for example as todo!()) will now reach that code.
Advisory available under CC0-1.0
license.