Repository navigation
fix(deps): update dependency nodemailer to v10.1.4 [security] - #2860
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
SafeDep Report SummaryPackage Details
This report is generated by SafeDep GitHub App |
renovate
Bot
force-pushed
the
renovate/npm-nodemailer-vulnerability
branch
29 times, most recently
from
October 28, 2026 08:45
0ec006d to
96a8f92
Compare
renovate
Bot
force-pushed
the
renovate/npm-nodemailer-vulnerability
branch
11 times, most recently
from
October 29, 2026 15:07
2823c6d to
39a8c08
Compare
renovate
Bot
force-pushed
the
renovate/npm-nodemailer-vulnerability
branch
from
October 29, 2026 19:13
39a8c08 to
4e9b0e8
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.15→10.1.4Nodemailer: 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>.<"a@evil.com>"@good.com>is the mailbox"a@evil.com>"@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
<"a@evil.com>"@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"a@evil.com>"@good.com, with no defects reported.The envelope a message gets is built from the same parse, so
sendMail({ to: "<\"a@evil.com>\"@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).
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; <evil@evil.com>) <v@victim.com>;names onlyv@victim.com, and Nodemailer read it as the single recipientevil@evil.com. 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; <evil@evil.com>) <v@victim.com>;. The validator sees one mailbox,v@victim.com, and approves it. Nodemailer delivers toevil@evil.comonly. The same works through a quoted display name,G: "a;" "<evil@evil.com>" <v@victim.com>;. 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 mailboxv@victim.com, with no defects reported.The envelope a message gets is built from the same parse, so
sendMail({ to: "G: (a; <evil@evil.com>) <v@victim.com>;" })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 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) <evil@evil.com>) <v@victim.com>namesv@victim.comwithx(y) <evil@evil.com>as a comment, and Nodemailer read it as the addressevil@evil.com. 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) <evil@evil.com>) <v@victim.com>, which validates asv@victim.com. Nodemailer delivers toevil@evil.com. 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 asv@victim.comwith the display nameVictim, with no defects reported.The envelope a message gets is built from the same parse, so
sendMail({ to: "Victim (x(y) <evil@evil.com>) <v@victim.com>" })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).
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
v10.0.16Compare Source
Bug Fixes
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.