Repository navigation
Update dependency nodemailer to v10.1.4 [SECURITY] - #538
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/npm-nodemailer-vulnerability
branch
from
November 1, 2026 16:27
044806b to
09ed206
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
10.0.16→10.1.4Nodemailer: A nested comment ends early in addressparser, releasing the rest of the comment as a recipient
GHSA-8c8m-p3m8-cjg8
More information
Details
Vulnerability summary
RFC 5322 comments nest. addressparser ended a comment at the first
), including the one that closes a nested comment, and parsed the rest of the outer comment as header text.Victim (x(y) <[email protected]>) <[email protected]>names[email protected]withx(y) <[email protected]>as a comment, and Nodemailer read it as the address[email protected]. This is the same shape as the escaped parenthesis fixed in 10.1.2, reached through nesting instead of a quoted-pair. Affected: 3.0.0 through 10.1.3.Attacker capabilities
The attacker controls the text of an address that an application passes to Nodemailer, or the From or To header of an inbound message parsed with mailparser. No access to the application, its configuration or its credentials is needed. The value is a syntactically valid RFC 5322 address that conformant parsers accept without defects.
Realistic exploitation scenario
An application validates a submitted address with a conformant parser and allows only its own domain. The attacker submits
Victim (x(y) <[email protected]>) <[email protected]>, which validates as[email protected]. Nodemailer delivers to[email protected]. In the inbound direction, a DMARC or display layer built on a conformant parser and a mail client built on mailparser disagree on the author of the same message, which is the setting for sender spoofing. The boundary crossed is the application's recipient allow list, or the author check of the receiving side.Proof of concept
Python's
email._header_value_parser.get_address_listreads the same value as[email protected]with the display nameVictim, with no defects reported.The envelope a message gets is built from the same parse, so
sendMail({ to: "Victim (x(y) <[email protected]>) <[email protected]>" })issues the RCPT TO shown above.Security impact
Mail intended for an approved recipient is delivered to an attacker chosen domain, disclosing its content, and parsers built on this module report a different author than conformant ones. The misreading only occurs on values a conformant validator approves, so correct validation is bypassed. Affected are applications that pass user influenced addresses to Nodemailer and consumers of the standalone parser such as mailparser.
The fix counts comment depth and ends a comment only at the
)that closes the outermost one.Found in an internal review of addressparser on 2026-10-18. Verified on 3.0.0, 6.9.16 and 10.1.3.
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Nodemailer: A ";" inside a quoted string or comment ends an address group early in addressparser, turning display text into a recipient
GHSA-m943-m63m-w62w
More information
Details
Vulnerability summary
addressparser ends an RFC 5322 group at the first
;, including one inside a quoted display name or a comment. The text after it is parsed again as top level recipients with the quoting flipped, so text that every conformant parser reads as a display name or comment becomes a live address.G: (a; <[email protected]>) <[email protected]>;names only[email protected], and Nodemailer read it as the single recipient[email protected]. Affected: 3.0.0 through 10.1.3.Attacker capabilities
The attacker controls the text of an address field that an application passes to Nodemailer, or the header of an inbound message parsed with mailparser. No access to the application, its configuration or its credentials is needed. The value is a syntactically valid RFC 5322 group that conformant parsers accept without defects.
Realistic exploitation scenario
An application validates the recipients of a submitted address list with a conformant parser and only allows addresses at its own domain. The attacker submits
G: (a; <[email protected]>) <[email protected]>;. The validator sees one mailbox,[email protected], and approves it. Nodemailer delivers to[email protected]only. The same works through a quoted display name,G: "a;" "<[email protected]>" <[email protected]>;. The boundary crossed is the application's recipient allow list.Proof of concept
Python's
email._header_value_parser.get_address_listreads the same value as the single mailbox[email protected], with no defects reported.The envelope a message gets is built from the same parse, so
sendMail({ to: "G: (a; <[email protected]>) <[email protected]>;" })issues the RCPT TO shown above.Security impact
Mail that an application intends for an approved recipient goes to a recipient chosen by the attacker, which discloses its content, and the intended recipient never receives it. The misreading only occurs on values a conformant validator approves, so correct validation is bypassed, which makes it a security issue rather than a parsing bug. Affected are applications that pass user influenced address lists to Nodemailer and consumers of the standalone parser such as mailparser.
The fix tracks quoted strings and comments inside a group and reads only a
;outside them.Found in an internal review of addressparser on 2026-10-18. Verified on 3.0.0, 6.9.16 and 10.1.3.
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Nodemailer: A ">" inside a quoted local part ends an angle-addr early in addressparser, delivering to a domain the header does not name
GHSA-85x2-q946-cp5h
More information
Details
Vulnerability summary
addressparser ends an angle-addr at the first
>it sees, including one inside a quoted local part, a comment or a domain literal. The domain is then read off the text in front of that>.<"[email protected]>"@good.com>is the mailbox"[email protected]>"@good.comunder RFC 5322, and Nodemailer read it as an address atevil.com. The unbracketed spelling of the same value was already read correctly. Affected: 3.0.0 through 10.1.3.Attacker capabilities
The attacker controls the text of a recipient or sender address that an application passes to Nodemailer, for example a To value entered in a contact or invite form, or the header of an inbound message parsed with mailparser. No access to the application, its configuration or its credentials is needed. The value is a syntactically valid RFC 5322 address that conformant parsers accept without defects.
Realistic exploitation scenario
An application lets users send invitations or notifications only to addresses at an allowed domain and validates the submitted value with a conformant parser or by checking its domain. The attacker submits
<"[email protected]>"@good.com>, which validates as agood.commailbox. Nodemailer then parses the same value, issuesRCPT TO:<"\"a"@evil.com>and the message, with whatever content the application puts into it, is delivered to the attacker's domain. The security boundary crossed is the application's recipient allow list. In the inbound direction, mailparser reports a different address than a conformant reader of the same header, so a display or policy layer built on the two disagrees.Proof of concept
Python's
email._header_value_parser.get_address_listreads the same value as"[email protected]>"@good.com, with no defects reported.The envelope a message gets is built from the same parse, so
sendMail({ to: "<\"[email protected]>\"@good.com>" })issues the RCPT TO shown above.Security impact
Mail that an application intends for an allowed domain is delivered to a domain chosen by the attacker, which discloses its content. It is a security vulnerability rather than a parsing bug because the misreading only occurs for values that a conformant validator approves, so validation done the right way is bypassed. Affected are applications that pass user influenced addresses to Nodemailer and consumers of the standalone parser such as mailparser.
The fix tracks quoted strings, comments and domain literals inside an angle-addr and reads only a
>outside them.Found in an internal review of addressparser on 2026-10-18. Verified on 3.0.0, 6.9.16 and 10.1.3.
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
nodemailer/nodemailer (nodemailer)
v10.1.4Compare Source
Bug Fixes
v10.1.3Compare Source
Bug Fixes
v10.1.2Compare Source
Bug Fixes
v10.1.1Compare Source
Bug Fixes
v10.1.0Compare Source
Features
Bug Fixes
Performance Improvements
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR was generated by Mend Renovate. View the repository job log.