CVE-2026-39983

FTP Command Injection via CRLF in basic-ftp

Published Apr 9, 2026 CVSS 3.1 · 8.6 High EPSS 2.2% KEV · Not listed
Description
basic-ftp is an FTP client for Node.js. Prior to 5.2.1, basic-ftp allows FTP command injection via CRLF sequences (\r\n) in file path parameters passed to high-level path APIs such as cd(), remove(), rename(), uploadFrom(), downloadTo(), list(), and removeDir(). The library's protectWhitespace() helper only handles leading spaces and returns other paths unchanged, while FtpContext.send() writes the resulting command string directly to the control socket with \r\n appended. This lets attacker-controlled path strings split one intended FTP command into multiple commands. This vulnerability is fixed in 5.2.1.

Analysis

AI-generated

Technical impact

The basic‑ftp library, used by Node.js applications, mistakenly accepts \r\n sequences in file path parameters for high‑level methods such as cd(), remove(), rename(), uploadFrom(), downloadTo(), list(), and removeDir(). The library's protectWhitespace helper only removes leading spaces and otherwise leaves the path unchanged. When the library forwards the constructed command to the FTP server, it appends \r\n and sends the string verbatim. An attacker who can supply a controlled path can insert a CRLF and split the intended FTP command into multiple commands, thereby gaining the ability to execute arbitrary FTP operations. This is a classic example of CWE‑93, where an input that controls a protocol delimiter is not validated, leading to command injection at the protocol level.

Affected Systems

Patrick Juchli's basic‑ftp library is used by Node.js applications. Versions prior to 5.2.1 are vulnerable. Any application that imports basic‑ftp and uses high‑level path APIs (cd, remove, rename, uploadFrom, downloadTo, list, removeDir) without sanitization is affected. No information is available regarding operating system or deployment dependency.

Risk and Exploitability

The vulnerability has a CVSS vector indicating high severity with a base score of 8.6. The EPSS score is 2 %, implying a low but non‑negligible probability of exploitation. The flaw is not listed in the CISA KEV catalog. Attackers who can supply an attacker‑controlled file path and have valid FTP credentials can use CRLF sequences to split a single intended command into multiple commands, effectively gaining the ability to execute arbitrary FTP operations such as uploading, downloading, deleting, or renaming files. This can compromise confidentiality, integrity, and availability of the files on the target FTP server. The attack requires only application‑level control over the path parameter; no additional network access beyond normal FTP usage is required.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade the basic‑ftp package to version 5.2.1 or later
  • Validate or sanitize all path parameters before passing them to the library, ensuring no CRLF sequences remain
  • Configure the FTP user credentials used by the application with the least privileges required to perform its intended functions

Generated by OpenCVE AI on April 21, 2026 at 23:23 UTC.

Tracking

Sign in to view the affected projects.

Advisories

Source ID Title
Github GHSA Github GHSA GHSA-chqc-8p9q-pq6q basic-ftp has FTP Command Injection via CRLF
History
Type Values Removed Values Added
CPEs cpe:2.3:a:patrickjuchli:basic-ftp:*:*:*:*:*:node.js:*:*
Type Values Removed Values Added
First Time appeared Patrickjuchli
Patrickjuchli basic-ftp
Vendors & Products Patrickjuchli
Patrickjuchli basic-ftp
Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}

Type Values Removed Values Added
Description basic-ftp is an FTP client for Node.js. Prior to 5.2.1, basic-ftp allows FTP command injection via CRLF sequences (\r\n) in file path parameters passed to high-level path APIs such as cd(), remove(), rename(), uploadFrom(), downloadTo(), list(), and removeDir(). The library's protectWhitespace() helper only handles leading spaces and returns other paths unchanged, while FtpContext.send() writes the resulting command string directly to the control socket with \r\n appended. This lets attacker-controlled path strings split one intended FTP command into multiple commands. This vulnerability is fixed in 5.2.1.
Title FTP Command Injection via CRLF in basic-ftp
Weaknesses CWE-93
References
Metrics cvssV3_1

{'score': 8.6, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:L'}

Weaknesses
  • CWE-93

    Improper Neutralization of CRLF Sequences ('CRLF Injection')

Sources

Status
PUBLISHED
Assigner
GitHub_M
Published
Updated
Jul 15, 2026, 1:01 AM
Reserved
Apr 8, 2026, 12:01 AM
Status
Modified
Published
Apr 9, 2026, 6:17 PM
Modified
Oct 26, 2026, 10:10 PM
Severity
Important
Public date
Apr 9, 2026, 5:05 PM