<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Wed, 30 Sep 2026 03:11:30 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-27699 — Basic FTP has Path Traversal Vulnerability in its downloadToDir() method</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-27699</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; patrickjuchli basic-ftp&lt;/p&gt;
&lt;p&gt;The `basic-ftp` FTP client library for Node.js contains a path traversal vulnerability (CWE-22) in versions prior to 5.2.0 in the `downloadToDir()` method. A malicious FTP server can send directory listings with filenames containing path traversal sequences (`../`) that cause files to be written outside the intended download directory. Version 5.2.0 patches the issue.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; patrickjuchli basic-ftp&lt;/p&gt;
&lt;p&gt;The `basic-ftp` FTP client library for Node.js contains a path traversal vulnerability (CWE-22) in versions prior to 5.2.0 in the `downloadToDir()` method. A malicious FTP server can send directory listings with filenames containing path traversal sequences (`../`) that cause files to be written outside the intended download directory. Version 5.2.0 patches the issue.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-27699</guid>
    </item>
    <item>
      <title>GHSA-5rq4-664w-9x2c — Basic FTP has Path Traversal Vulnerability in its downloadToDir() method</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-5rq4-664w-9x2c</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: basic-ftp&lt;/p&gt;
&lt;p&gt;The `basic-ftp` library contains a path traversal vulnerability in the `downloadToDir()` method. A malicious FTP server can send directory listings with filenames containing path traversal sequences (`../`) that cause files to be written outside the intended download directory.&lt;/p&gt;
&lt;p&gt;## Source-to-Sink Flow&lt;/p&gt;
&lt;p&gt;```
1. SOURCE: FTP server sends LIST response
└─&amp;gt; &amp;#34;-rw-r--r-- 1 user group 1024 Jan 20 12:00 ../../../etc/passwd&amp;#34;&lt;/p&gt;
&lt;p&gt;2. PARSER: parseListUnix.ts:100 extracts filename
└─&amp;gt; file.name = &amp;#34;../../../etc/passwd&amp;#34;&lt;/p&gt;
&lt;p&gt;3. VALIDATION: parseListUnix.ts:101 checks
└─&amp;gt; if (name === &amp;#34;.&amp;#34; || name === &amp;#34;..&amp;#34;) ❌ (only filters exact matches)
└─&amp;gt; &amp;#34;../../../etc/passwd&amp;#34; !== &amp;#34;.&amp;#34; &amp;amp;&amp;amp; !== &amp;#34;..&amp;#34; ✅ PASSES&lt;/p&gt;
&lt;p&gt;4. SINK: Client.ts:707 uses filename directly
└─&amp;gt; const localPath = join(localDirPath, file.name)
└─&amp;gt; join(&amp;#34;/safe/download&amp;#34;, &amp;#34;../../../etc/passwd&amp;#34;)
└─&amp;gt; Result: &amp;#34;/safe/download/../../../etc/passwd&amp;#34; → resolves to &amp;#34;/etc/passwd&amp;#34;&lt;/p&gt;
&lt;p&gt;5. FILE WRITE: Client.ts:512 opens file
└─&amp;gt; fsOpen(localPath, &amp;#34;w&amp;#34;) → writes to /etc/passwd (outside intended directory)
```&lt;/p&gt;
&lt;p&gt;## Vulnerable Code&lt;/p&gt;
&lt;p&gt;**File**: `src/Client.ts:707`&lt;/p&gt;
&lt;p&gt;```typescript
protected async _downloadFromWorkingDir(localDirPath: string): Promise&amp;lt;void&amp;gt; {
await ensureLocalDirectory(localDirPath)
for (const file of await this.list()) {
const localPath = join(localDirPath, file.name) // ⚠️ VULNERABLE
// file.name comes from untrusted FTP server, no sanitization
await this.downloadTo(localPath, file.name)
}
}
```&lt;/p&gt;
&lt;p&gt;**Root Cause**:
- Parser validation (`parseListUnix.ts:101`) only…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: basic-ftp&lt;/p&gt;
&lt;p&gt;The `basic-ftp` library contains a path traversal vulnerability in the `downloadToDir()` method. A malicious FTP server can send directory listings with filenames containing path traversal sequences (`../`) that cause files to be written outside the intended download directory.&lt;/p&gt;
&lt;p&gt;## Source-to-Sink Flow&lt;/p&gt;
&lt;p&gt;```
1. SOURCE: FTP server sends LIST response
└─&amp;gt; &amp;#34;-rw-r--r-- 1 user group 1024 Jan 20 12:00 ../../../etc/passwd&amp;#34;&lt;/p&gt;
&lt;p&gt;2. PARSER: parseListUnix.ts:100 extracts filename
└─&amp;gt; file.name = &amp;#34;../../../etc/passwd&amp;#34;&lt;/p&gt;
&lt;p&gt;3. VALIDATION: parseListUnix.ts:101 checks
└─&amp;gt; if (name === &amp;#34;.&amp;#34; || name === &amp;#34;..&amp;#34;) ❌ (only filters exact matches)
└─&amp;gt; &amp;#34;../../../etc/passwd&amp;#34; !== &amp;#34;.&amp;#34; &amp;amp;&amp;amp; !== &amp;#34;..&amp;#34; ✅ PASSES&lt;/p&gt;
&lt;p&gt;4. SINK: Client.ts:707 uses filename directly
└─&amp;gt; const localPath = join(localDirPath, file.name)
└─&amp;gt; join(&amp;#34;/safe/download&amp;#34;, &amp;#34;../../../etc/passwd&amp;#34;)
└─&amp;gt; Result: &amp;#34;/safe/download/../../../etc/passwd&amp;#34; → resolves to &amp;#34;/etc/passwd&amp;#34;&lt;/p&gt;
&lt;p&gt;5. FILE WRITE: Client.ts:512 opens file
└─&amp;gt; fsOpen(localPath, &amp;#34;w&amp;#34;) → writes to /etc/passwd (outside intended directory)
```&lt;/p&gt;
&lt;p&gt;## Vulnerable Code&lt;/p&gt;
&lt;p&gt;**File**: `src/Client.ts:707`&lt;/p&gt;
&lt;p&gt;```typescript
protected async _downloadFromWorkingDir(localDirPath: string): Promise&amp;lt;void&amp;gt; {
await ensureLocalDirectory(localDirPath)
for (const file of await this.list()) {
const localPath = join(localDirPath, file.name) // ⚠️ VULNERABLE
// file.name comes from untrusted FTP server, no sanitization
await this.downloadTo(localPath, file.name)
}
}
```&lt;/p&gt;
&lt;p&gt;**Root Cause**:
- Parser validation (`parseListUnix.ts:101`) only…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-5rq4-664w-9x2c</guid>
    </item>
  </channel>
</rss>
