<?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>Thu, 01 Oct 2026 13:37:09 +0000</lastBuildDate>
    <item>
      <title>GHSA-hmw2-7cc7-3qxx — form-data: CRLF injection in form-data via unescaped multipart field names and filenames</title>
      <link>https://db.gcve.eu/vuln/ghsa-hmw2-7cc7-3qxx</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: form-data&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`form-data` builds `multipart/form-data` request bodies. Through v4.0.5, the `field` name passed to `FormData#append` and the `filename` option are concatenated directly into the `Content-Disposition` header with no escaping of CR (`\r`), LF (`\n`), or `&amp;#34;`. An application that uses **untrusted input as a field name or filename** therefore lets an attacker terminate the header line and either inject additional headers or smuggle whole additional multipart parts into the request the application forwards to a backend.&lt;/p&gt;
&lt;p&gt;This is CWE-93 (CRLF injection). It is a divergence from how browsers and the WHATWG HTML spec serialize form-data (they escape these characters), so the fix is to match that behavior. Severity is **conditional**: it depends on the consuming application passing attacker-controlled data as a field name or filename. Applications that only use fixed/trusted field names are not affected.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;In `lib/form_data.js`, `_multiPartHeader` builds the part header as:&lt;/p&gt;
&lt;p&gt;```javascript
&amp;#39;Content-Disposition&amp;#39;: [&amp;#39;form-data&amp;#39;, &amp;#39;name=&amp;#34;&amp;#39; + field + &amp;#39;&amp;#34;&amp;#39;].concat(contentDisposition || [])
```&lt;/p&gt;
&lt;p&gt;and `_getContentDisposition` builds `filename=&amp;#34;&amp;#39; + filename + &amp;#39;&amp;#34;&amp;#39;`. Neither escapes control characters, so a `\r\n` in `field`/`filename` ends the header line. The same applies to `&amp;#34;`, which can break out of the quoted parameter.&lt;/p&gt;
&lt;p&gt;### Proof of concept&lt;/p&gt;
&lt;p&gt;```javascript
const FormData = require(&amp;#39;form-data&amp;#39;);
const form = new FormData();
form.append(&amp;#39;email&amp;#34;\r\nX-Injected: true\r\nfake…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: form-data&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`form-data` builds `multipart/form-data` request bodies. Through v4.0.5, the `field` name passed to `FormData#append` and the `filename` option are concatenated directly into the `Content-Disposition` header with no escaping of CR (`\r`), LF (`\n`), or `&amp;#34;`. An application that uses **untrusted input as a field name or filename** therefore lets an attacker terminate the header line and either inject additional headers or smuggle whole additional multipart parts into the request the application forwards to a backend.&lt;/p&gt;
&lt;p&gt;This is CWE-93 (CRLF injection). It is a divergence from how browsers and the WHATWG HTML spec serialize form-data (they escape these characters), so the fix is to match that behavior. Severity is **conditional**: it depends on the consuming application passing attacker-controlled data as a field name or filename. Applications that only use fixed/trusted field names are not affected.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;In `lib/form_data.js`, `_multiPartHeader` builds the part header as:&lt;/p&gt;
&lt;p&gt;```javascript
&amp;#39;Content-Disposition&amp;#39;: [&amp;#39;form-data&amp;#39;, &amp;#39;name=&amp;#34;&amp;#39; + field + &amp;#39;&amp;#34;&amp;#39;].concat(contentDisposition || [])
```&lt;/p&gt;
&lt;p&gt;and `_getContentDisposition` builds `filename=&amp;#34;&amp;#39; + filename + &amp;#39;&amp;#34;&amp;#39;`. Neither escapes control characters, so a `\r\n` in `field`/`filename` ends the header line. The same applies to `&amp;#34;`, which can break out of the quoted parameter.&lt;/p&gt;
&lt;p&gt;### Proof of concept&lt;/p&gt;
&lt;p&gt;```javascript
const FormData = require(&amp;#39;form-data&amp;#39;);
const form = new FormData();
form.append(&amp;#39;email&amp;#34;\r\nX-Injected: true\r\nfake…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-hmw2-7cc7-3qxx</guid>
    </item>
  </channel>
</rss>
