CVE-2026-62949: AsyncSSH: asyncio event-loop freeze via SSH maximum packet size = 0 in SSH_MSG_CHANNEL_OPEN / OPEN_CONFIRMATION
A malicious SSH server can wedge an AsyncSSH client, and an authenticated
client can wedge an AsyncSSH server, by sending a channel maximum packet size of 0 in SSH_MSG_CHANNEL_OPEN_CONFIRMATION (server→client) or
SSH_MSG_CHANNEL_OPEN (client→server). AsyncSSH stores the peer-supplied value
verbatim with no lower-bound check; the first time channel data is written,
SSHChannel._flush_send_buf enters a synchronous infinite loop that cannot
be interrupted by asyncio.wait_for or any timeout. The loop body has no
await, so it blocks the entire asyncio event loop — for a server, one
malicious authenticated channel freezes all current and future connections.
RFC 4254 §5.1 leaves receiver behavior for a peer-reported “maximum packet size = 0” undefined, so the value must be rejected rather than stored.
References
- github.com/advisories/GHSA-rw4j-r22c-9gc3
- github.com/ronf/asyncssh/commit/756cbae5350789ce9735f15f704bae9b5a3608b8
- github.com/ronf/asyncssh/commit/9c354270c009285525e126721e8ed5fbed1f8a67
- github.com/ronf/asyncssh/releases/tag/v2.24.0
- github.com/ronf/asyncssh/security/advisories/GHSA-rw4j-r22c-9gc3
- nvd.nist.gov/vuln/detail/CVE-2026-62949
Code Behaviors & Features
Detect and mitigate CVE-2026-62949 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →