RustSec logo

History ⋅ Edit ⋅ JSON (OSV)

RUSTSEC-2026-0494

SSH message fields allocated before their size is checked

Reported
Issued
Package
russh (crates.io)
Type
Vulnerability
Categories
Keywords
#ssh #kexinit #name-list #allocation #pre-auth
Aliases
References
CVSS Score
7.5 HIGH
CVSS Details
Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality Impact
None
Integrity Impact
None
Availability Impact
High
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Patched
  • >=0.61.0
Unaffected
  • <0.34.0

Description

Many of russh's client and server message handlers decoded length-prefixed strings, byte fields and name-lists from the peer into owned String, Vec or name-list values first and only checked their size and meaning afterwards. This includes the algorithm name-lists in SSH_MSG_KEXINIT, which a server parses during the initial key exchange, before any authentication.

A peer can fill these fields with oversized or highly fragmented values, for example a name-list of hundreds of thousands of one-letter algorithm names, and make russh allocate far more memory than the packet itself takes. With many concurrent connections this can exhaust the memory of a server process.

From 0.61.0, name-lists are rejected before they are split into separate strings when they are longer than 16 KiB or hold more than 1,024 entries, and the key exchange decodes its algorithm lists through this bounded decoder.

Advisory available under CC0-1.0 license.