CVE-2026-45309
HighCVSS 7.5Exploitation Probability (EPSS)
Low risk36th percentile - higher than 36% of all known CVEs
Summary
Vulnerability in AsyncSSH before version 2.23.0 allows an attacker to exploit the %u token expansion in AuthorizedKeysFile to read key files outside the intended directory using path traversal segments (/, \, ..). The attacker can authenticate using a chosen key file.
Risk Assessment
Attack can lead to unauthorized SSH authentication, enabling access to the system without proper credentials.
Recommendation
Upgrade AsyncSSH to version 2.23.0 or later immediately.
Other vulnerabilities in AsyncSSH
See all- CVE-2026-62949Medium
AsyncSSH is a Python package which provides an asynchronous client and server implementation of the SSHv2 protocol on top of the Python asyncio framework. Prior to 2.24.0, _process_channel_open and _process_channel_open_confirmation in asyncssh/connection.py accept a peer-supplied send_pktsize value of zero. When channel data reaches SSHChannel._flush_send_buf in asyncssh/channel.py, the zero value causes each loop iteration to slice and remove zero bytes without reducing the send window, leaving the synchronous loop permanently true with no await point. A malicious SSH server can trigger the client path through SSH_MSG_CHANNEL_OPEN_CONFIRMATION before the first channel write, while an authenticated client can trigger the server path through SSH_MSG_CHANNEL_OPEN and freeze every current and future connection handled by the process. This vulnerability is fixed in 2.24.0.
- CVE-2026-54591High
A vulnerability in AsyncSSH prior to version 2.23.1 allows a malicious SSH server to write arbitrary files on the SCP client's filesystem. This occurs because _parse_cd_args in scp.py returns server-provided filenames verbatim and _recv_files joins them to the destination path without enforcing the target directory boundary, enabling ../ traversal sequences.
- CVE-2026-54590Medium
AsyncSSH version 2.23.0 contains an incomplete fix for CVE-2026-45309 that blocks /, , and .. before %u substitution in AuthorizedKeysFile but does not block a leading ~ or ${ENV}, allowing later expansion in _expand_val and Path(filename).expanduser() to escape the intended authorized-keys directory. This issue is fixed in version 2.23.1.
Original NVD description (English source)
AsyncSSH is a Python package which provides an asynchronous client and server implementation of the SSHv2 protocol on top of the Python asyncio framework. Prior to 2.23.0, AsyncSSH expands the OpenSSH-compatible AuthorizedKeysFile %u token in asyncssh/config.py, asyncssh/connection.py, asyncssh/auth_keys.py, and asyncssh/misc.py with the raw SSH username during pre-authentication server config reload, allowing a server configured with AuthorizedKeysFile authorized_keys/%u to read an authorized-keys file outside the intended directory when the SSH username contains /, \, or .. path traversal segments and authenticate with an attacker-selected key file. This issue is fixed in version 2.23.0.
Vulnerability data from NVD (NIST) · CISA KEV · EPSS

