CVE-2026-73420: @auth/core Email Normalizer Validates The Address Vulnerability

CRITICAL
Advisory Identifier: GHSA-7rqj-j65f-68wh
CWE-180
Published
Advisory Summary

CVE-2026-73420 is a CRITICAL email normalizer validates the address vulnerability (CWE-180: Incorrect Behavior Order: Validate Before Canonicalize) affecting @auth/core libraries in the npm ecosystem. The issue involves email normalizer validates the address before unicode normalization, allowing a homoglyph @ bypass. Remediation is available by upgrading affected packages to version 0.41.3, 4.24.15, 5.0.0-beta.32.

CVE-2026-73420 at a Glance

CVE Identifier CVE-2026-73420
GHSA Identifier GHSA-7rqj-j65f-68wh
Severity CRITICAL
CVSS v3.1 Base Score N/A
CWE Classification CWE-180: Incorrect Behavior Order: Validate Before Canonicalize
Affected Product @auth/core
Package Ecosystem npm
Published Date
Last Updated

How to Fix CVE-2026-73420

To remediate this vulnerability, upgrade all affected @auth/core dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

@auth/core fixed: 0.41.3
npm install @auth/core@0.41.3
next-auth fixed: 4.24.15
npm install next-auth@4.24.15
next-auth fixed: 5.0.0-beta.32
npm install next-auth@5.0.0-beta.32
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

npm ls @auth/core

How to Check if You Are Affected

To determine whether your Node.js application is affected by CVE-2026-73420, inspect your project dependencies using npm:

npm ls @auth/core

Analyze the terminal output to locate any version of @auth/core in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.41.3), your application is affected.

Note: The npm ls @auth/core command inspects dependencies declared in your package.json and lockfile; it does not perform automated runtime dynamic scanning.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-180: Incorrect Behavior Order: Validate Before Canonicalize, where the product validates input before it is canonicalized, which prevents the product from detecting data that becomes invalid after the canonicalization step. In @auth/core, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

## Summary The default email-address normalizer used by the email/magic-link sign-in flow validates the address **before** applying Unicode normalization. An address can contain a Unicode character that is not an ASCII `@` (U+0040) but canonicalizes to one under NFKC/NFKD normalization (the normalization commonly applied by mail libraries and services for internationalized email). Such an address passes the normalizer's single-`@` check, but a downstream mail library that normalizes the string then sees two `@` separators and may deliver the passwordless sign-in link to a different recipient than intended. This is an instance of validating before canonicalizing. ## Am I affected? You may be affected if **all** of the following hold: - You use `next-auth` `>= 4.0.0, < 4.24.14`, or `@auth/core` `>= 0.1.0, < 0.41.3`. - You have the email / magic-link (passwordless) provider enabled. - You rely on the built-in default identifier normalizer (you have not supplied your own `normalizeIdentifier`). - Your `sendVerificationRequest` implementation uses a mail library or delivery service that applies Unicode normalization to recipient addresses (most internationalized-email/SMTPUTF8-capable senders do). You are **not** affected if you do not use the email provider, or if your normalizer/mailer rejects or canonicalizes non-ASCII addresses before they are validated. ## Impact - Account takeover: an attacker who knows a victim's email address can request a magic link that is delivered to an attacker-controlled mailbox, then use it to sign in as the victim. - No victim interaction is required to misroute the link; the attacker initiates the flow. ## Patched version The fix applies Unicode (NFKC) normalization before the address is validated, so homoglyph separators are collapsed and rejected up front. Upgrade to the first release containing this fix (pending; this advisory will be updated with the exact patched version before publication). No application code changes are required after upgrading. ## Workarounds If you cannot upgrade immediately: - Supply a custom `normalizeIdentifier` on the email provider that calls `identifier.normalize("NFKC")` (and lower-cases/trims) **before** any validation, and rejects addresses that do not contain exactly one `@` after normalization. - Or reject any address whose local part or domain contains non-ASCII characters, if your user base does not require internationalized email addresses. ## Credit Reported by @kakashi-kx. Thank you for the responsible disclosure.

CVE-2026-73420 Affected @auth/core Versions

3 component(s)
Fixed Versions:
0.41.34.24.155.0.0-beta.32
Product / Package Ecosystem Affected Versions Fixed Version
@auth/core
npm
≥ 0.1.0
< 0.41.3
0.41.3
next-auth
npm
≥ 4.10.3
< 4.24.15
4.24.15
next-auth
npm
≥ 5.0.0-beta.1
< 5.0.0-beta.32
5.0.0-beta.32

References

Frequently Asked Questions

What is CVE-2026-73420?
CVE-2026-73420 is a security vulnerability in @auth/core involving Email normalizer validates the address before Unicode normalization, allowing a homoglyph @ bypass under CWE-180: Incorrect Behavior Order: Validate Before Canonicalize.
Which @auth/core versions are affected?
Affected versions include releases prior to 0.41.3, 4.24.15, 5.0.0-beta.32 across affected packages: @auth/core, next-auth.
What version fixes CVE-2026-73420?
Upgrading to 0.41.3, 4.24.15, 5.0.0-beta.32 (or the latest patched release for your respective branch) resolves the vulnerability.
Is @auth/core affected?
Yes, @auth/core is affected in releases prior to 0.41.3. Upgrade your dependency to 0.41.3 or later.
Is next-auth affected?
Yes, next-auth is affected in releases prior to 4.24.15, 5.0.0-beta.32. Upgrade your dependency to 4.24.15, 5.0.0-beta.32 or later.
What CWE is associated with CVE-2026-73420?
CVE-2026-73420 is classified under CWE-180: Incorrect Behavior Order: Validate Before Canonicalize (The product validates input before it is canonicalized, which prevents the product from detecting data that becomes invalid after the canonicalization step.).
How can I check npm dependencies for CVE-2026-73420?
Run the dependency tree command: 'npm ls @auth/core'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-7rqj-j65f-68wh",
  "modified" : "2026-08-12T20:27:03Z",
  "published" : "2026-07-23T14:40:15Z",
  "aliases" : [ "CVE-2026-73420" ],
  "summary" : "Auth.js: Email normalizer validates the address before Unicode normalization, allowing a homoglyph @ bypass",
  "details" : "## Summary\n\nThe default email-address normalizer used by the email/magic-link sign-in flow validates the address **before** applying Unicode normalization. An address can contain a Unicode character that is not an ASCII `@` (U+0040) but canonicalizes to one under NFKC/NFKD normalization (the normalization commonly applied by mail libraries and services for internationalized email). Such an address passes the normalizer's single-`@` check, but a downstream mail library that normalizes the string then sees two `@` separators and may deliver the passwordless sign-in link to a different recipient than intended. This is an instance of validating before canonicalizing.\n\n## Am I affected?\n\nYou may be affected if **all** of the following hold:\n\n- You use `next-auth` `>= 4.0.0, < 4.24.14`, or `@auth/core` `>= 0.1.0, < 0.41.3`.\n- You have the email / magic-link (passwordless) provider enabled.\n- You rely on the built-in default identifier normalizer (you have not supplied your own `normalizeIdentifier`).\n- Your `sendVerificationRequest` implementation uses a mail library or delivery service that applies Unicode normalization to recipient addresses (most internationalized-email/SMTPUTF8-capable senders do).\n\nYou are **not** affected if you do not use the email provider, or if your normalizer/mailer rejects or canonicalizes non-ASCII addresses before they are validated.\n\n## Impact\n\n- Account takeover: an attacker who knows a victim's email address can request a magic link that is delivered to an attacker-controlled mailbox, then use it to sign in as the victim.\n- No victim interaction is required to misroute the link; the attacker initiates the flow.\n\n## Patched version\n\nThe fix applies Unicode (NFKC) normalization before the address is validated, so homoglyph separators are collapsed and rejected up front. Upgrade to the first release containing this fix (pending; this advisory will be updated with the exact patched version before publication). No application code changes are required after upgrading.\n\n## Workarounds\n\nIf you cannot upgrade immediately:\n\n- Supply a custom `normalizeIdentifier` on the email provider that calls `identifier.normalize(\"NFKC\")` (and lower-cases/trims) **before** any validation, and rejects addresses that do not contain exactly one `@` after normalization.\n- Or reject any address whose local part or domain contains non-ASCII characters, if your user base does not require internationalized email addresses.\n\n## Credit\n\nReported by @kakashi-kx. Thank you for the responsible disclosure.",
  "severity" : [ {
    "type" : "CVSS_V4",
    "score" : "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "npm",
      "name" : "@auth/core"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0.1.0"
      }, {
        "fixed" : "0.41.3"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "npm",
      "name" : "next-auth"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "4.10.3"
      }, {
        "fixed" : "4.24.15"
      } ]
    } ]
  }, {
    "package" : {
      "ecosystem" : "npm",
      "name" : "next-auth"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "5.0.0-beta.1"
      }, {
        "fixed" : "5.0.0-beta.32"
      } ]
    } ],
    "database_specific" : {
      "last_known_affected_version_range" : "<= 5.0.0-beta.31"
    }
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/nextauthjs/next-auth/security/advisories/GHSA-7rqj-j65f-68wh"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/nextauthjs/next-auth/commit/19d2feb24359fa8c79418907fc68d9ec8152ca94"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/nextauthjs/next-auth/commit/a63eee12a1a20cb35209e44195b097868517b9a0"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/nextauthjs/next-auth"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/nextauthjs/next-auth/releases/tag/@auth/core@0.41.3"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/nextauthjs/next-auth/releases/tag/next-auth@4.24.15"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/nextauthjs/next-auth/releases/tag/next-auth@5.0.0-beta.32"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-180" ],
    "severity" : "CRITICAL",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-07-23T14:40:15Z",
    "nvd_published_at" : null
  }
}