Severity by source
AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:H
Attacker controls the SSH server but the victim must initiate the SCP transfer (UI:R); arbitrary file write yields I:H and A:H, with no data disclosure (C:N).
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
2Blast Radius
ecosystem impact- 28 pypi packages depend on asyncssh (9 direct, 19 indirect)
Ecosystem-wide dependent count for version 2.23.1.
DescriptionCVE.org
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.1, a malicious SSH server can write arbitrary files on the asyncssh SCP client's filesystem by sending filenames containing ../ traversal sequences because _parse_cd_args in scp.py returns server-provided names verbatim and _recv_files joins them to the destination path without enforcing the target directory boundary. This issue is fixed in version 2.23.1.
Articles & Coverage 1
AnalysisAI
Arbitrary file write in the AsyncSSH Python library (versions prior to 2.23.1) allows a malicious or compromised SSH server to plant files anywhere on an SCP client's filesystem when a user initiates a file-copy operation against it. Because the SCP client trusts server-supplied filenames verbatim, a hostile server can return names containing ../ sequences to escape the intended download directory, enabling code execution or system tampering. No public exploit has been identified at time of analysis, and the flaw is not listed in CISA KEV.
Technical ContextAI
AsyncSSH implements the SSHv2 protocol (including the SCP subsystem) on top of Python's asyncio framework. The vulnerability is a classic CWE-22 path traversal in the SCP client receive path: _parse_cd_args in scp.py returns the filename provided by the remote server without sanitization, and _recv_files then joins that name to the local destination path without verifying the result stays within the target directory boundary. Since SCP is a server-driven protocol where the sender dictates filenames, a trusted-client / untrusted-server trust inversion lets the server inject '../' components that resolve outside the intended folder. CPE data was not supplied, but the affected component is unambiguously the ronf/asyncssh Python package's SCP client code.
RemediationAI
Vendor-released patch: upgrade AsyncSSH to version 2.23.1 or later, which enforces the destination directory boundary when reconstructing received filenames (fix commit d730803b8e4e94c20c7580d90f94d1e05f9f58de; release https://github.com/ronf/asyncssh/releases/tag/v2.23.1). Until you can upgrade, restrict SCP client usage to trusted, authenticated servers only and avoid initiating AsyncSSH SCP downloads from servers you do not control, since the attack requires connecting to a malicious server; where feasible, run SCP client operations under a low-privilege account and into a dedicated, unprivileged destination directory (with no symlinks and minimal write reach) to blunt the impact of a traversal write, accepting that this does not prevent the traversal itself. Full details are in the advisory at https://github.com/ronf/asyncssh/security/advisories/GHSA-2wxc-x7rj-hg8f.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
Same weakness CWE-22 – Path Traversal
View allSame technique Path Traversal
View allVendor StatusVendor
Share
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-42399
GHSA-2wxc-x7rj-hg8f