Nodemailer processes the recipient domain in _normalizeAddress within lib/mime-node/index.js. In affected releases, the domain is lowercased and then encoded with the bundled RFC 3492 Punycode codec, without the full UTS-46 mapping and normalization that should occur before Punycode generation.
- An application may validate the recipient domain with a UTS-46-conformant parser such as
url.domainToASCII, new URL(), a browser-side parser, or an IDN library.
- An attacker supplies an address containing an ignored or mapped character, such as an invisible character or compatibility character. The validator can see a trusted domain while Nodemailer generates a different Punycode A-label.
- Nodemailer uses its resulting domain in the SMTP envelope
RCPT TO and in address headers, so the trust decision and the actual delivery destination can disagree.
Exploitation requires an application to accept attacker-influenced recipient input, make an allow-list, block-list, or same-domain decision with a different parser, and then rely on Nodemailer for delivery. The record characterizes the issue as network reachable, requiring no privileges and no user interaction, but with high attack complexity. Whether a particular resulting A-label can be registered in the target TLD, and the practical impact, remain deployment-dependent.