<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://db.gcve.eu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-20T19:17:12.876738+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@gcve.eu</email>
  </author>
  <link href="https://db.gcve.eu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://db.gcve.eu/vuln/ghsa-v53p-9fqp-m79j</id>
    <title>GHSA-v53p-9fqp-m79j — Nodemailer: Quadratic backtracking in the addressparser free-text fallback allows remote denial of service</title>
    <updated>2026-10-20T19:17:12.891257+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> npm: nodemailer</p>
<p>### Summary</p>
<p>When `addressparser` finds no address by its strict reading, it falls back to pulling one out of the free text with `/\s*\b[^@\s]+@[^\s]+\b\s*/`. That pattern backtracks quadratically: `[^@\s]+` is retried from every offset and rescans the run to the next `@` each time. A single header value holding a long whitespace-free run with no usable `@` blocks the Node.js event loop for tens of seconds.</p>
<p>It is cheaper to exploit than GHSA-prgh-xp8r-p3m5: 273KB is enough for ~43s, where the comment-joined shape needed ~1.5MB for ~10s.</p>
<p>### Details</p>
<p>The fallback in `src/addressparser/index.ts` ran the pattern as a search. `[^@\s]+` crosses neither whitespace nor `@`, so from each start offset it scans forward to the next `@` or to the end of the run and then fails, and the engine simply advances one character and repeats. Three shapes make every offset fail:</p>
<p>- the run holds no `@` at all
- the only `@` has nothing after it
- the only `@` has nothing before it</p>
<p>A fourth reaches it with a valid address present but placed past a long run, so the long run is walked before the match is found.</p>
<p>### PoC</p>
<p>```js
const addressparser = require('nodemailer/lib/addressparser');
const s = Date.now();
addressparser(' &gt;' + '&gt;[x][x]'.repeat(40000)); // 273KB
console.log(Date.now() - s, 'ms'); // ~43000 ms, blocking
```</p>
<p>Measured on 10.0.5:</p>
<p>| Value | Parse time |
| --- | --- |
| `'[x]'.repeat(40000)` (117KB) | 9.0 s |
| `'[x]'.repeat(40000) + '@'` (117KB) | 8.9 s |
| `'@' + '[x]'.repeat(4…</p></div>
    </content>
    <link href="https://db.gcve.eu/vuln/ghsa-v53p-9fqp-m79j"/>
  </entry>
</feed>
