IT SBIT Services
Schneeberger
DEEN
CVE tracker

basic-ftp: Denial of service via quadratic-time directory listing parsing

CVE-2026-102990High 8.2

← All vulnerabilities

Summary

basic-ftp, an FTP client library for Node.js, contains a flaw in the parser for Unix-style directory listings used by Client.list(). A malicious or compromised FTP server can send a crafted listing that forces quadratic CPU time, which blocks the Node.js event loop and freezes the process. No credentials are required, but the application must connect to the attacker-controlled server. The impact is limited to availability.

Affected

  • basic-ftp versions up to and including 6.2.0 (advisory: affected < 6.2.1)

Fixed in

  • basic-ftp 6.2.1 (commit d0d9e07)
  • Check the current v6.2.x release notes before choosing a version, as later fixes may exist.

Workaround

  • No vendor workaround known.
  • Until patched, limit the application to trusted FTP servers.

Exploitation

  • Public proof of concept referenced in the GitHub advisory.
  • CISA SSVC: exploitation 'poc', automatable: yes.
  • No in-the-wild exploitation found in the sources reviewed.
  • EPSS 0.00507 (low).

Our recommendation

  • Update basic-ftp to 6.2.1 or later, including transitive dependencies (check with npm ls basic-ftp).
  • Identify Node.js services that fetch files from FTP servers you do not control and prioritise them.
  • Monitor for process hangs and unusually high CPU usage in these services.

Public exploits

PoC-in-GitHub, Metasploit and Exploit-DB list nothing for this CVE.

Research sources

Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 1 Nov 2026, 17:40.

Original description (NVD)

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.

NVD references (4)

Sources

The tracker combines official, freely usable data sources – updated continuously:

This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.

Affected? We can help.

We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.