Skip to main content

Nodemailer EUVDEUVD-2026-81298

| CVE-2026-92598 HIGH
Interpretation Conflict (CWE-436)
2026-09-16 disclosure@vulncheck.com GHSA-r7q5-h7cx-p54x
8.3
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Submit recipient with invisible/mapped IDN char
  2. Delivery
    Validator folds domain to allow-listed name
  3. Exploit
    Allow-list check passes
  4. Execution
    Nodemailer encodes to divergent xn-- label
  5. Persist
    Email delivered to attacker-controlled domain
  6. Impact
    Sensitive message contents disclosed

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V4 - API and Web Service Interpretation consistency
Exploitation Conditions

Exploitation requires the consuming application to (1) perform a domain allow-list, same-domain, or user-confirmation check on the recipient using a UTS-46/IDNA-conformant parser (e.g. Node's url.domainToASCII, WHATWG URL, or Python idna), AND (2) then rely on Nodemailer (<9.1.0) to actually deliver to that address. The attacker must be able to influence the recipient address and supply a domain containing a UTS-46-mapped or ignored code point (e.g. an invisible U+00AD SOFT HYPHEN, full-width characters, or compatibility mappings) that folds to the trusted domain in the validator but encodes to a different xn-- label in Nodemailer's bundled raw RFC-3492 codec. Limiting factors: the divergence only matters when validation and delivery use different parsers, so applications that do no domain allow-listing, or that re-check Nodemailer's normalized output, are not exposed; address literals ('[127.0.0.1]', '[IPv6:::1]') and non-hostnames fall through unchanged and are unaffected; high attack complexity (AC:H) reflects the need to know the validator's normalization behavior and register the resulting punycode domain.

Impact

This is a real but conditional risk, not a drop-everything emergency. The vendor CVSS 4.0 vector (8.3, AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N) accurately captures the shape: network-reachable and unauthenticated to trigger, but with high attack complexity (AC:H) and a present attack requirement (AT:P) because exploitation depends on a specific interaction between an application's IDN-aware validator and Nodemailer's non-conformant encoder. No EPSS score was supplied, the CVE is not in CISA KEV, and no standalone public exploit is referenced (the patch's regression tests demonstrate the mismatch but are proof-of-concept fixtures, not weaponized exploit code) - so the correct read is 'no public exploit identified at time of analysis.' The primary impact is confidentiality (VC:H): email intended for a trusted allow-listed domain is silently delivered to an attacker-registrable domain, leaking message contents. CWE-436 (Interpretation Conflict) is the correct root cause - two parsers disagree on the canonical domain. Note this is explicitly the same weakness class as CVE-2025-13033 but reached via IDN/Punycode rather than quoted local-parts, and the earlier 7.0.7 fix does NOT cover it. The key limiter, and the reason not to treat the raw 8.3 as widespread mass-exploitation risk, is that harm only materializes when the consuming application runs a UTS-46-aware allow-list/same-domain check and then hands the raw address to Nodemailer for delivery; applications without such a check, or that pass Nodemailer's already-normalized output back into their check, are not exposed.

Exploit ScenarioDerived

An application restricts outbound mail to a corporate allow-list (e.g. 'company.com') and validates the recipient using a UTS-46-conformant parser such as Node's url.domainToASCII, which folds an invisible U+00AD SOFT HYPHEN in 'compa­ny.com' down to the trusted 'company.com' and approves it. It then passes the original address to Nodemailer, whose bundled raw RFC-3492 codec maps nothing and encodes the domain to a different label ('xn--company-pka.com'), delivering the message - and any sensitive content or reset link it contains - to a domain the attacker has registered. No visible homograph is needed, so neither an automated check nor a human confirming the displayed recipient would notice; no public exploit is identified but the patch's tests concretely demonstrate the encoding divergence.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 16, 2026

Email can be delivered to an unintended, attacker-controlled domain by Nodemailer before 9.1.0, because the library's recipient normalizer encodes international domain names with a bundled raw RFC 3492 Punycode codec instead of applying UTS-46 mapping, so a domain that a standards-compliant validator folds to a trusted domain resolves to a different xn-- A-label at SMTP delivery time. The flaw is an interpretation conflict (CWE-436) reached over the network by unauthenticated senders (assessed CVSS:3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:N, vendor CVSS:4.0 8.3), but exploitation is conditional: the consuming application must both allow-list, same-domain check, or user-confirm the recipient with a UTS-46/IDNA-conformant parser and then rely on Nodemailer to deliver to that already-approved address. No public exploit code has been identified at time of analysis and the issue is not in CISA KEV; a vendor-released fix exists as Nodemailer 9.1.0.

RemediationAI

Upgrade to Nodemailer 9.1.0 or later - the vendor-released fix, delivered through PR 1848 and commits 259c32d and b212ac4, replaces the unconditional bundled Punycode call with a normalizeDomain() path built on url.domainToASCII/domainToUnicode, per advisory GHSA-wmmp-3585-3rmp. If an immediate upgrade is not possible, apply one of the following compensating controls with its trade-off understood. First, canonicalize the recipient yourself with Node's url.domainToASCII (or an equivalent UTS-46 implementation) before the allow-list check and compare the canonicalized A-label against the allow-list, rather than checking the raw input - this aligns validation with parsing but requires the literal input to be the same one later passed to Nodemailer, and applications that re-encode or re-decode in between reintroduce the gap. Second, reject out of hand any recipient domain containing non-ASCII code points that UTS-46 would map or ignore, specifically U+00AD SOFT HYPHEN, full-width compatibility characters, and any input whose UTS-46-folded form differs from its raw form; the trade-off is that legitimate IDN domains relying on such mappings (for example composed diacritics needing NFC) will also be refused. Third, re-validate Nodemailer's normalized envelope output (the getEnvelope().to values) against the allow-list immediately before transmission so validation and delivery consume the same string - this is the most robust workaround but requires code changes in every send path and must be applied after all address rewriting. Address literals ('[127.0.0.1]', '[IPv6:::1]') fall through Nodemailer's normalization unchanged, so any hostname-based allow-list should explicitly reject literal-address recipients as a separate control. No public exploit code has been identified at time of analysis, so prioritization should focus on applications where attacker-controlled recipients are combined with a domain allow-list.

Affected VersionsENISA

nodemailer 0 <9.1.0

Affected Packages

npm nodemailer fix: 9.1.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in npm

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

This is a textbook interpretation conflict (CWE-436) between two IDN processing pipelines. Nodemailer's _normalizeAddress() in lib/mime-node/index.js splits the address at the last '@' and normalizes the domain with nothing more than .toLowerCase() before handing it to the project's bundled lib/punycode codec, a pure RFC 3492 Punycode implementation that performs none of the UTS-46 steps standards-compliant parsers take: it does not remove Ignored code points such as U+00AD SOFT HYPHEN, does not apply the compatibility mappings that turn full-width characters into their canonical ASCII forms, and does not perform NFC normalization or validity checks. Browsers, the WHATWG URL Standard, Node's url.domainToASCII/domainToUnicode, and Python's idna all apply UTS-46 first, so an input like 'compa\u00ADny.com' is read as 'company.com' by a validator but encoded by the bundled codec to 'xn--company-pka.com' - the allow-list approves the trusted name while SMTP sends to a different, attacker-registrable one, and no visible homograph is required because the trigger character is invisible. The upstream fix introduces a normalizeDomain() helper that prefers url.domainToASCII/domainToUnicode and falls back to the bundled codec only when the URL parser returns empty for non-hostname inputs, so address literals ('[127.0.0.1]', '[IPv6:::1]') and strings such as 'ex_ample.com' are left exactly as supplied and are not affected by the divergence. The advisory notes this is the same weakness class previously reported through quoted local-parts as CVE-2025-13033, and that the earlier 7.0.7 fix does not address the IDN/Punycode path; remediation arrives via PR 1848 and commits 259c32d and b212ac4, documented in GHSA-wmmp-3585-3rmp and the VulnCheck advisory.

Know when Node.js gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (vulncheck) PRIMARY 8.3 HIGH
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N
vuln.today AI 6.5 MEDIUM

AC:H because exploitation hinges on a parser-divergence condition the attacker must craft against; PR:N/UI:N as no auth or victim action is needed; C:H for leaked mail contents, I:L for allow-list bypass, A:N.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:N
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:L/VA:N/SC:N/SI:N/SA:N
SUSE 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
Red Hat 6.5 MEDIUM

Primary rating from Vendor (vulncheck).

CVSS VectorVendor: vulncheck

Attack Vector
Network
Attack Complexity
High
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 16, 2026 - 23:19 EUVD
CVE Published
Sep 16, 2026 - 22:18 cve.org
HIGH 8.3

DescriptionCVE.org

Nodemailer before 9.1.0 fails to apply UTS-46 normalization when encoding international domain names, causing the domain resolver to compute a different Punycode A-label than standards-compliant parsers. Attackers can craft recipient addresses with invisible characters or compatibility mappings that pass domain allow-list checks but are delivered to attacker-controlled domains via SMTP.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 7 npm packages depend on nodemailer (6 direct, 1 indirect)

Ecosystem-wide dependent count for version 9.1.0.

Technical POC Analysis

Evidence: advisory GHSA-wmmp-3585-3rmp (published 2026-09-01, reporter e1abrador), which at publication listed no CVE and rated the issue Moderate 6.5 / CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:N,…

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Nodemailer versions before 9.1.0 can misdeliver email to attacker-controlled domains when an application screens recipients with a standards-compliant IDNA/UTS-46 parser but relies on Nodemailer to resolve the same address at send time, meaning an address already approved as internal or trusted can land in the wrong mailbox. Any business process that uses Nodemailer to send sensitive content - customer notifications, internal reports, password resets, or regulated data - could disclose message contents to an unintended external party. Leadership should care because the failure is silent, affects confidentiality of outbound communications, and requires coordinated remediation across every application embedding the library, not just a mail server configuration change.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 81% exploitable
Prevalence
High
Nodemailer is the dominant email-sending library across the Node.js ecosystem
Social Media
1
Sightings
Data Quality
8 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment Vendor CIRCL GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

42
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +42
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

CVE-2025-68613 HIGH POC
8.8 Dec 19

Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation

CVE-2024-41713 CRITICAL POC
9.1 Oct 21

A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could

CVE-2024-55591 CRITICAL POC
9.8 Jan 14

FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote

CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2014-7205 CRITICAL POC
10.0 Oct 08

Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t

CVE-2025-59528 CRITICAL POC
10.0 Sep 22

Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete

CVE-2017-14849 HIGH POC
7.5 Sep 28

Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc

CVE-2017-5941 CRITICAL POC
9.8 Feb 09

An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2014-3744 HIGH POC
7.5 Oct 23

Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi

CVE-2014-9566 HIGH POC
7.5 Mar 10

Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin

CVE-2013-4660 MEDIUM POC
6.8 Jun 28

The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic

Vendor StatusVendor

SUSE

Severity: Important
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise High Performance Computing 12 Not-Affected
SUSE Linux Enterprise Micro 5.3 Affected
SUSE Linux Enterprise Micro 5.4 Affected
SUSE Linux Enterprise Micro 5.5 Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy