<?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://db.gcve.eu</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>Fri, 02 Oct 2026 23:09:12 +0000</lastBuildDate>
    <item>
      <title>GHSA-rp42-5vxx-qpwr — basic-ftp vulnerable to denial of service via unbounded memory consumption in Client.list()</title>
      <link>https://db.gcve.eu/vuln/ghsa-rp42-5vxx-qpwr</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: basic-ftp&lt;/p&gt;
&lt;p&gt;### Summary
`basic-ftp@5.2.2` is vulnerable to denial of service through unbounded memory growth while processing directory listings from a remote FTP server. A malicious or compromised server can send an extremely large or never-ending listing response to `Client.list()`, causing the client process to consume memory until it becomes unstable or crashes.&lt;/p&gt;
&lt;p&gt;### Details
The issue is in the package&amp;#39;s default directory listing flow.&lt;/p&gt;
&lt;p&gt;`Client.list()` reaches `dist/Client.js`, where the full listing response is downloaded into a `StringWriter` before parsing:&lt;/p&gt;
&lt;p&gt;File: `dist/Client.js:516-527`&lt;/p&gt;
&lt;p&gt;```js
async _requestListWithCommand(command) {
    const buffer = new StringWriter_1.StringWriter();
    await (0, transfer_1.downloadTo)(buffer, {
        ftp: this.ftp,
        tracker: this._progressTracker,
        command,
        remotePath: &amp;#34;&amp;#34;,
        type: &amp;#34;list&amp;#34;
    });
    const text = buffer.getText(this.ftp.encoding);
    this.ftp.log(text);
    return this.parseList(text);
}
```&lt;/p&gt;
&lt;p&gt;The vulnerable sink is `StringWriter`, which grows an in-memory `Buffer` with no limit:&lt;/p&gt;
&lt;p&gt;File: `dist/StringWriter.js:5-20`&lt;/p&gt;
&lt;p&gt;```js
class StringWriter extends stream_1.Writable {
    constructor() {
        super(...arguments);
        this.buf = Buffer.alloc(0);
    }
    _write(chunk, _, callback) {
        if (chunk instanceof Buffer) {
            this.buf = Buffer.concat([this.buf, chunk]);
            callback(null);
        }
        else {
            callback(new Error(&amp;#34;StringWriter expects chunks…&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;### Summary
`basic-ftp@5.2.2` is vulnerable to denial of service through unbounded memory growth while processing directory listings from a remote FTP server. A malicious or compromised server can send an extremely large or never-ending listing response to `Client.list()`, causing the client process to consume memory until it becomes unstable or crashes.&lt;/p&gt;
&lt;p&gt;### Details
The issue is in the package&amp;#39;s default directory listing flow.&lt;/p&gt;
&lt;p&gt;`Client.list()` reaches `dist/Client.js`, where the full listing response is downloaded into a `StringWriter` before parsing:&lt;/p&gt;
&lt;p&gt;File: `dist/Client.js:516-527`&lt;/p&gt;
&lt;p&gt;```js
async _requestListWithCommand(command) {
    const buffer = new StringWriter_1.StringWriter();
    await (0, transfer_1.downloadTo)(buffer, {
        ftp: this.ftp,
        tracker: this._progressTracker,
        command,
        remotePath: &amp;#34;&amp;#34;,
        type: &amp;#34;list&amp;#34;
    });
    const text = buffer.getText(this.ftp.encoding);
    this.ftp.log(text);
    return this.parseList(text);
}
```&lt;/p&gt;
&lt;p&gt;The vulnerable sink is `StringWriter`, which grows an in-memory `Buffer` with no limit:&lt;/p&gt;
&lt;p&gt;File: `dist/StringWriter.js:5-20`&lt;/p&gt;
&lt;p&gt;```js
class StringWriter extends stream_1.Writable {
    constructor() {
        super(...arguments);
        this.buf = Buffer.alloc(0);
    }
    _write(chunk, _, callback) {
        if (chunk instanceof Buffer) {
            this.buf = Buffer.concat([this.buf, chunk]);
            callback(null);
        }
        else {
            callback(new Error(&amp;#34;StringWriter expects chunks…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-rp42-5vxx-qpwr</guid>
    </item>
  </channel>
</rss>
