Skip to main content

basic-ftp CVE-2026-102990

| EUVDEUVD-2026-90360 HIGH
Inefficient Regular Expression Complexity (ReDoS) (CWE-1333)
2026-09-30 GitHub_M GHSA-c475-qrg2-pj4r
8.2
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Lure client to malicious/compromised FTP server
  2. Delivery
    Client calls Client.list()
  3. Exploit
    Server returns crafted long directory line
  4. Execution
    Regex backtracks quadratically in parseListUnix
  5. Impact
    Event loop blocked, process freezes (DoS)

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V2 - Validation and Business Logic Regex complexity limits
MITRE ATT&CK

1 technique across 1 tactic: Impact

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires that the victim application (1) uses basic-ftp prior to 6.2.1, (2) connects - via Client - to an FTP server the attacker controls or has compromised, and (3) invokes Client.list() to parse a directory listing. The attacker-controlled listing must include a long Unix-style line whose prefix matches RE_LINE but whose later size and date fields fail, forcing quadratic backtracking across the variable-length owner/group fields, while a benign final nonblank line ensures parseList() selects the Unix parser and applies it to the crafted line. The core limiting factor is the trust direction: the client must reach out to an untrusted/hostile FTP server, so deployments that only connect to trusted, controlled FTP endpoints are not realistically exposed. No authentication of the attacker is needed (PR:N) and no user interaction beyond the normal list operation (UI:N), but the AT:P precondition (contacting a malicious server) constrains real-world reach.

Impact

This is a genuine but bounded availability risk. The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H) correctly scopes the impact to availability only - a CWE-1333 inefficient-regex (ReDoS) condition where RE_LINE in parseListUnix.ts backtracks quadratically, blocking the Node.js single-threaded event loop and freezing the entire process. The AT:P (Attack Requirement: Present) is the pivotal signal: exploitation is not opportunistic against a listening service but requires the victim's basic-ftp client to connect to a malicious or compromised FTP server and call Client.list(). This inverts the usual client/server trust direction, so the practical attacker is a rogue/compromised FTP endpoint the client chooses to contact. No EPSS score, no CISA KEV listing, and no public POC were provided - so there is no public exploit identified at time of analysis and no evidence of active exploitation. The 8.2 severity is driven by network reach and low complexity, but the AT:P precondition and DoS-only impact (no confidentiality/integrity, no RCE) mean real-world priority is moderate, weighted by how many deployments point basic-ftp at untrusted servers. The commit's own comment confirms the O(n²) mechanism and the fix (anchoring the regex and bounding owner/group word counts to {0,7}), so the technical claim is well-substantiated.

Exploit ScenarioDerived

An attacker who controls or has compromised an FTP server waits for a Node.js application using basic-ftp (<6.2.1) to connect and call Client.list(). The server returns a directory listing containing a crafted long Unix-style line with a valid prefix that cannot satisfy the later size/date fields, plus a normal final line so parseList() still selects the Unix parser; parsing the malicious line triggers catastrophic regex backtracking that pegs the CPU and freezes the event loop. No public POC is referenced, but the fix commit describes the O(n²) mechanism precisely, making reproduction straightforward.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
1 public PoC Patch available 0.5% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 30, 2026

Quadratic CPU consumption in basic-ftp before 6.2.1 lets a malicious or compromised FTP server freeze a Node.js application that calls Client.list(): the RE_LINE pattern in src/parseListUnix.ts backtracks across the optional, unbounded owner and group fields of a crafted Unix-style directory line, and because parseList() picks a parser from the last nonblank line and then applies it to every line, a normal trailing entry can force the vulnerable Unix parser onto the earlier hostile line and block the event loop. The attack requires the victim to connect out to an untrusted or attacker-controlled FTP endpoint and perform a listing (CVSS 3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - availability only, no confidentiality or integrity impact); unauthenticated attackers are sufficient, but the trust direction is the limiting factor, so systems that only talk to trusted FTP servers are not realistically exposed. There is no public exploit identified at time of analysis and the issue is not confirmed as actively exploited (no CISA KEV), and the vendor-released patch is version 6.2.1.

RemediationAI

Upgrade basic-ftp to the patched release: npm install basic-ftp@6.2.1 (or later), as published at https://github.com/patrickjuchli/basic-ftp/releases/tag/v6.2.1 - this is the vendor-released patch and it also corrects the same unanchored-quantifier pattern in the DOS parser. The fix is attributable to commit d0d9e07c56e519587bb50532ac6eadbb0cb0cfe9 and documented in advisory GHSA-c475-qrg2-pj4r. If upgrading is not immediately possible, the most effective compensating control is to avoid calling Client.list() against any FTP server that is not fully trusted and controlled, since the attacker must be the server side of the connection; note the trade-off that this rules out legitimate use against third-party or customer-hosted FTP endpoints. Where untrusted servers must still be listed, run the FTP client in a separate worker thread or child process with a hard wall-clock timeout and an external supervisor that can kill and restart it, accepting the added latency and complexity, or wrap the listing call in an application-level timeout and circuit breaker so a blocked event loop in one worker does not stall the whole process - recognizing that a synchronous ReDoS inside the same event loop cannot be interrupted by a timer on that loop. Monitoring for unusually long Client.list() durations or event-loop lag spikes provides detection if a hostile listing is served before patching is complete.

Affected VersionsENISA

basic-ftp < 6.2.1

Affected Packages

npm basic-ftp fix: 6.2.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in npm

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The root cause is CWE-1333 (Inefficient Regular Expression Complexity), a ReDoS pattern in basic-ftp's Unix directory-listing parser. basic-ftp is a Node.js FTP client that parses raw LIST/NLST output into FileInfo objects; parseList() inspects the last nonblank line to decide which dialect parser (Unix, DOS, MLSD) to use, then applies that single parser to all lines in the listing. The Unix parser's RE_LINE expression allowed owner and group names to contain spaces via unbounded constructs such as "(\S+(?:\s\S+)*?)\s+" and "(\S+(?:\s\S+)*)\s+", so a line with a valid prefix (file-type character, permissions, link count) followed by long whitespace-separated token runs that ultimately fail to satisfy the trailing size/date fields causes exponential/quadratic backtracking over those adjacent variable-length fields - an O(n²) cost per line that Node's single-threaded event loop cannot interrupt. The 6.2.1 commit (d0d9e07c56e519587bb50532ac6eadbb0cb0cfe9) fixes this by anchoring the expression ("^[\s\d]*" to tolerate inode/block counts from ls -i or ls -s) and bounding both name quantifiers to at most eight space-separated words ("{0,7}"), and by similarly anchoring the DOS parser's expression in parseListDOS.ts, whose unanchored "(\S+)\s+(\S+)\s+" could likewise be retried at every position for O(n²) cost. The added tests cover ls -i/ls -s prefixes and multi-word owner/group names such as "Domain Users" and "staff group", confirming that the bounded quantifiers preserve legitimate parsing while removing the pathological case.

Know when Node.js gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 8.2 HIGH
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
vuln.today AI 5.9 MEDIUM

Availability-only DoS (A:H, C/I:N); AC:H reflects the required precondition of the client connecting to an attacker-controlled FTP server, which 3.1 cannot express as a separate attack requirement.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Red Hat 7.5 HIGH

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 30, 2026 - 21:04 EUVD
CVE Published
Sep 30, 2026 - 19:44 cve.org
HIGH 8.2

DescriptionCVE.org

basic-ftp is an FTP client for Node.js. Prior to 6.2.1, Client.list() can be forced by a malicious or compromised FTP server to spend quadratic CPU time parsing a directory listing because the RE_LINE expression in src/parseListUnix.ts backtracks across adjacent variable-length owner and group fields when a long Unix-style line has a valid prefix but cannot satisfy the later size and date fields. parseList() selects a parser from the last nonblank line and then applies it to every line, so a normal final line can select the Unix parser while an earlier crafted line blocks the Node.js event loop and freezes the process. This issue is fixed in version 6.2.1.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 12 npm packages depend on basic-ftp (7 direct, 5 indirect)

Ecosystem-wide dependent count for version 6.2.1.

Technical POC Analysis

CWE-1333 (Inefficient Regular Expression Complexity / ReDoS) in the Unix directory-listing parser of basic-ftp.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Latest POC

1 public PoC link from github

Sign in to open the public PoC links collected for this CVE.

Executive ViewAI

Why It Matters

A high-severity denial-of-service flaw in the widely used Node.js FTP client library basic-ftp (versions before 6.2.1) allows a malicious or compromised FTP server to freeze any application that performs a directory listing against it, exhausting CPU and blocking the application's event loop. The risk is concentrated in services that connect outward to untrusted, third-party, or externally supplied FTP endpoints; systems that only communicate with vetted internal FTP servers are not realistically exposed. Because the impact is availability-only - no data theft or tampering - leadership should treat this primarily as an operational resilience and third-party integration risk rather than a data breach risk.

Business Impact: Medium
Compensating Controls

No vendor-released patch identified at time of analysis; interim mitigations: restrict outbound FTP connectivity to trusted, allowlisted servers and block arbitrary internet FTP egress; avoid running Client.list() against untrusted or partner-supplied endpoints; isolate listing operations in worker threads or child processes with hard timeouts and memory/CPU limits; add event-loop-lag and resource-exhaustion monitoring with automatic restart of affected services; upgrade to basic-ftp 6.2.1 or later once the maintainer confirms availability.

Threat Intelligence Overview

EPSS Score
0.5%
Top 59% exploitable
Prevalence
High
basic-ftp is the most-used pure-JS FTP client on npm, millions of weekly downloads
Threat Intel
1
1 source
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
Medium
Technical Impact
Partial

Priority Score

62
Low Medium High Critical
KEV: 0
EPSS: +1
CVSS: +41
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

CVE-2025-68613 HIGH POC
8.8 Dec 19

Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation

CVE-2024-41713 CRITICAL POC
9.1 Oct 21

A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could

CVE-2024-55591 CRITICAL POC
9.8 Jan 14

FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote

CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2014-7205 CRITICAL POC
10.0 Oct 08

Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t

CVE-2025-59528 CRITICAL POC
10.0 Sep 22

Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete

CVE-2017-14849 HIGH POC
7.5 Sep 28

Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc

CVE-2017-5941 CRITICAL POC
9.8 Feb 09

An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner

CVE-2014-0224 HIGH POC
7.4 Jun 05

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

CVE-2014-3744 HIGH POC
7.5 Oct 23

Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi

CVE-2014-9566 HIGH POC
7.5 Mar 10

Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin

CVE-2013-4660 MEDIUM POC
6.8 Jun 28

The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy