{"id":"CVE-2026-116696","kind":"vulnerability","aliases":["CVE-2026-116696"],"related":[],"title":"russh: SSH agent accepts unlimited confirm constraints, growing memory","description":"russh is a Rust SSH client and server library that includes an SSH agent protocol implementation. Prior to 0.65.0, russh::keys::agent::server::serve in russh/src/keys/agent/server.rs accepts repeated SSH_AGENT_CONSTRAIN_CONFIRM records while adding a key and appends every Constraint::Confirm record to the key's retained constraint vector without a count or memory limit. A process that can connect to the agent socket, including the remote side of a forwarded agent session, can repeatedly add constrained keys and cause renewable memory growth that persists for the process lifetime because keys without a lifetime constraint do not expire. This issue is fixed in version 0.65.0.","summary":"The russh Rust SSH library's agent server appends every SSH_AGENT_CONSTRAIN_CONFIRM record when adding a key, with no count or size limit. A client that can reach the agent socket, including a forwarded agent session, can grow the process's memory until it runs out.","severity":"low","cvss":3.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","russh","rust","self-hosted","ssh"],"not_affected_if":["client-only","no-agent-server"],"how_to_check":"- Check the russh version in `Cargo.lock` for `russh` below `0.65.0`\n- Check whether the application runs `russh::keys::agent::server::serve`, which is the vulnerable agent server","fix":"- Upgrade `russh` to `0.65.0` or later","status":"open","published_at":"2026-10-27T21:18:05+00:00","first_seen_at":"2026-10-27T21:29:21+00:00","triaged_at":"2026-10-27T21:30:24+00:00","updated_at":"2026-10-27T21:30:24+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-27T21:30:24Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade `russh` to `0.65.0` or later","reach":"network","title":"russh: SSH agent accepts unlimited confirm constraints, growing memory","impact":"low","summary":"The russh Rust SSH library's agent server appends every SSH_AGENT_CONSTRAIN_CONFIRM record when adding a key, with no count or size limit. A client that can reach the agent socket, including a forwarded agent session, can grow the process's memory until it runs out.","category":"package","nicknames":[],"who_cares":["rust","russh","ssh","self-hosted"],"confidence":0.7,"needs_auth":"unknown","worst_case":"A remote peer exhausts process memory, causing a persistent denial of service.","analyst_note":"","how_to_check":"- Check the russh version in `Cargo.lock` for `russh` below `0.65.0`\n- Check whether the application runs `russh::keys::agent::server::serve`, which is the vulnerable agent server","needs_analyst":false,"not_affected_if":["client-only","no-agent-server"],"who_is_affected":"Only applications that run the russh SSH agent server, serving an agent socket that clients can connect to, are exposed. Applications that only use russh as an SSH client, or that do not expose the agent server, can skip it. The sources do not say how the agent is typically exposed beyond the socket and forwarded sessions.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"low"},"cost_usd":0.0006,"input_tokens":3441,"output_tokens":511,"severity_before":"low"},"analyst_status":null,"analyst_note":null,"search":"'-116696':12A,15A '-2026':11A,14A '0.65.0':88C,175C 'accept':4A,96C 'add':39B,104C,146C 'agent':3A,29B,34B,54B,59B,83C,91C,99C,133C,142C 'append':31B,108C 'caus':150C 'client':49B,75C 'confirm':6A,36B,101C,111C 'connect':130C 'constrain':35B,100C,147C 'constraint':7A,110C,118C,165C 'count':44B,122C 'cve':10A,13A 'everi':32B,109C 'expir':168C 'fix':172C 'forward':58B,141C 'grow':8A,62B 'growth':153C 'host':21B 'implement':85C 'includ':56B,80C,135C 'issu':170C 'key':41B,90C,106C,115C,148C,161C 'librari':27B,78C 'lifetim':159C,164C 'limit':47B,125C 'memori':9A,66B,124C,152C 'packag':16B 'persist':155C 'prior':86C 'process':64B,127C,158C 'protocol':84C 'reach':52B 'record':37B,102C,112C 'remot':137C 'renew':151C 'repeat':97C,145C 'retain':117C 'run':69B 'russh':1A,17B,24B,70C,89C 'russh/src/keys/agent/server.rs':95C 'rust':18B,25B,73C 'self':20B 'self-host':19B 'serv':93C 'server':30B,77C,92C 'session':60B,143C 'side':138C 'size':46B 'socket':55B,134C 'ssh':2A,22B,26B,33B,74C,82C,98C 'unlimit':5A 'vector':119C 'version':174C 'without':120C,162C","nicknames":[],"mitigations":[],"who_affected":"Only applications that run the russh SSH agent server, serving an agent socket that clients can connect to, are exposed. Applications that only use russh as an SSH client, or that do not expose the agent server, can skip it. The sources do not say how the agent is typically exposed beyond the socket and forwarded sessions.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-27T21:18:05+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-116696","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-116696","severity":null,"published_at":"2026-10-27T21:18:05+00:00","modified_at":"2026-10-27T21:18:05+00:00","first_seen_at":"2026-10-27T21:29:21+00:00","fetched_at":"2026-10-27T21:29:21+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}