Nodemailer: Quadratic backtracking in the addressparser free-text fallback allows remote denial of service
### Summary 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. 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. ### Details 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: - the run holds no `@` at all - the only `@` has nothing after it - the only `@` has nothing before it 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. ### PoC ```js const addressparser = require('nodemailer/lib/addressparser'); const s = Date.now(); addressparser(' >' + '>[x][x]'.repeat(40000)); // 273KB console.log(Date.now() - s, 'ms'); // ~43000 ms, blocking ``` Measured on 10.0.5: | Value | Parse time | | --- | --- | | `'[x]'.repeat(40000)` (117KB) | 9.0 s | | `'[x]'.repeat(40000) + '@'` (117KB) | 8.9 s | | `'@' + '[x]'.repeat(40000)` (117
GHSA-v53p-9fqp-m79j
Primary source · Revision 1
Imported from structured advisory data. Source references identify upstream records or fields; verify affected versions and your deployed configuration.
Security context
Source reference: osv:GHSA-v53p-9fqp-m79j
nodemailer
Source reference: /affected/0/package/name
- Affected versions
- Not stated in this record
- Fixed versions
- 10.0.6
Source reference:
/affected/0/ranges - Prerequisites
- Not stated in this record
Structured affected-version data
Original package identities and version rules from this source.
[
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "0"
},
{
"fixed": "10.0.6"
}
]
}
],
"package": {
"name": "nodemailer",
"purl": "pkg:npm/nodemailer",
"ecosystem": "npm"
},
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-v53p-9fqp-m79j/GHSA-v53p-9fqp-m79j.json",
"last_known_affected_version_range": "<= 10.0.5"
}
}
]- Related CVEs
- CVE-2026-100700
Source reference:
/aliases
Publisher severity
high
Source reference: /database_specific/severity
- Event
- #33261 · Revision 1
- Added to Heist Feed
- Publisher date