CVE-2026-82660
Nodemailer jsonTransport bypasses disableFileAccess and disableUrlAccess
Nodemailer before 8.0.9 fails to enforce disableFileAccess and disableUrlAccess options during message normalization in jsonTransport. Attackers can read local files or fetch URLs by supplying path or href values in message content fields, bypassing intended access controls.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- Low
- Integrity
- Low
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
5.3
Nodemailer jsonTransport bypasses disableFileAccess and disableUrlAccess
Nodemailer before 8.0.9 fails to enforce disableFileAccess and disableUrlAccess options during message normalization in jsonTransport. Attackers can read local files or fetch URLs by supplying path or href values in message content fields, bypassing intended access controls.
- Record
CVE-2026-82660- CVSS 4.0
- 5.3 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N - CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-862
- Updated
- 2026-11-02
EUVDEUVD-2026-68438
5.3
Nodemailer before 8.0.9 fails to enforce disableFileAccess and disableUrlAccess options during message normalization in jsonTransport. Attackers can read local files or fetch URLs by supplying path or href values in message content fields, bypassing intended access controls.
- Record
EUVD-2026-68438- CVSS 4.0
- 5.3 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-28mw-fm9r-fxjg
5.3
Nodemailer before 8.0.9 fails to enforce disableFileAccess and disableUrlAccess options during...
Nodemailer before 8.0.9 fails to enforce disableFileAccess and disableUrlAccess options during message normalization in jsonTransport. Attackers can read local files or fetch URLs by supplying path or href values in message content fields, bypassing intended access controls.
- Record
GHSA-28mw-fm9r-fxjg- CVSS 4.0
- 5.3 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-862
- Updated
- 2026-11-02
GitHub AdvisoriesGHSA-wqvq-jvpq-h66f
5.4
Nodemailer jsonTransport bypasses disableFileAccess and disableUrlAccess during message normalization
Summary
Nodemailer's disableFileAccess and disableUrlAccess options are intended to prevent message content and attachments from reading local files or fetching URLs. The normal MIME streaming path enforces those options in MimeNode._getStream(). However, jsonTransport serializes messages by calling mail.normalize(), which resolves html, text, alternatives, calendar events, and attachments through shared.resolveContent() before MIME generation. shared.resolveContent() reads local files and fetches HTTP(S) URLs directly, without receiving or checking disableFileAccess or disableUrlAccess.
As a result, applications that use jsonTransport as a safe serializer or queue payload generator while relying on disableFileAccess / disableUrlAccess can still be made to read local files into the generated JSON output or make outbound HTTP requests when an attacker controls message content fields such as attachment path or text.href.
The same missing-enforcement root cause is also reachable before normal streaming when attachDataUrls causes _convertDataImages() to call mail.resolveContent(mail.data, 'html', ...); this should be fixed with the same access-control check.
Details
Source-to-sink evidence:
lib/nodemailer.js:42-45selectsJSONTransportwhencreateTransport({ jsonTransport: true, ... })is used.lib/mailer/mail-message.js:34-39copies transport-leveldisableFileAccessanddisableUrlAccessoptions intomail.data.lib/json-transport/index.js:52-76serializes mail by callingmail.normalize((err, data) => ...).lib/mailer/mail-message.js:46-135implementsresolveAll()and callsshared.resolveContent(...args, ...)forhtml,text,watchHtml,amp,icalEvent, alternatives, and attachments.lib/shared/index.js:506-562implementsresolveContent().lib/shared/index.js:540-541fetches HTTP(S) content withnmfetch(content.path || content.href).lib/shared/index.js:549-550reads local files withfs.createReadStream(content.path).shared.resolveContent()does not checkdisableFileAccessordisableUrlAccessand does not receive those flags.
Control path showing intended enforcement:
lib/mail-composer/index.js:358-359,lib/mail-composer/index.js:367-368, and sibling child-node creation paths passdisableUrlAccessanddisableFileAccessintoMimeNode.lib/mime-node/index.js:51-52stores those flags.lib/mime-node/index.js:984-995rejects file paths withEFILEACCESSwhendisableFileAccessis set.lib/mime-node/index.js:998-1009rejects URLs withEURLACCESSwhendisableUrlAccessis set.test/mail-composer/mail-composer-test.js:1028-1044includes a normal MIME-streaming test that expects file access to be blocked whendisableFileAccess: true.
Additional same-root-cause variant:
lib/mailer/index.js:406-434implements_convertDataImages()forattachDataUrls.lib/mailer/index.js:407-410callsmail.resolveContent(mail.data, 'html', ...)whenattachDataUrlsis enabled andmail.data.htmlis present.- Because
mail.resolveContent()delegates toshared.resolveContent()atlib/mailer/mail-message.js:42-44, an object-formhtml: { path: ... }orhtml: { href: ... }can be resolved before the later MIME streaming enforcement sees the content. - This variant requires
attachDataUrlsto be enabled, so the main reportable default/common path isjsonTransport; both should be fixed by enforcing access flags inside the pre-resolution helper or passing policy into it.
Default/common exposure evidence:
jsonTransportis a shipped runtime transport selected by publiccreateTransportoptions.test/json-transport/json-transport-test.js:9-83demonstrates thatjsonTransportintentionally resolves file-backedhtmland attachments into JSON output.disableFileAccessanddisableUrlAccessare documented by code and tests as security controls and are copied from transport…
- Record
GHSA-wqvq-jvpq-h66f- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-862
- Updated
- 2026-11-02
NVD
5.3
Nodemailer before 8.0.9 fails to enforce disableFileAccess and disableUrlAccess options during message normalization in jsonTransport. Attackers can read local files or fetch URLs by supplying path or href values in message content fields, bypassing intended access controls.
- Record
CVE-2026-82660- CVSS 4.0
- 5.3 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-862
- Updated
- 2026-11-02
OSV
5.3
Nodemailer jsonTransport bypasses disableFileAccess and disableUrlAccess
Nodemailer before 8.0.9 fails to enforce disableFileAccess and disableUrlAccess options during message normalization in jsonTransport. Attackers can read local files or fetch URLs by supplying path or href values in message content fields, bypassing intended access controls.
- Record
CVE-2026-82660- CVSS 4.0
- 5.3 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-862
- Updated
- 2026-11-02
Show 7 moreShow less
OSVDEBIAN-CVE-2026-82660
5.3
Nodemailer before 8.0.9 fails to enforce disableFileAccess and disableUrlAccess options during message normalization in jsonTransport. Attackers can read local files or fetch URLs by supplying path or href values in message content fields, bypassing intended access controls.
- Record
DEBIAN-CVE-2026-82660- CVSS 4.0
- 5.3 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Updated
- 2026-11-02
OSVGHSA-wqvq-jvpq-h66f
5.4
Nodemailer jsonTransport bypasses disableFileAccess and disableUrlAccess during message normalization
Summary
Nodemailer's disableFileAccess and disableUrlAccess options are intended to prevent message content and attachments from reading local files or fetching URLs. The normal MIME streaming path enforces those options in MimeNode._getStream(). However, jsonTransport serializes messages by calling mail.normalize(), which resolves html, text, alternatives, calendar events, and attachments through shared.resolveContent() before MIME generation. shared.resolveContent() reads local files and fetches HTTP(S) URLs directly, without receiving or checking disableFileAccess or disableUrlAccess.
As a result, applications that use jsonTransport as a safe serializer or queue payload generator while relying on disableFileAccess / disableUrlAccess can still be made to read local files into the generated JSON output or make outbound HTTP requests when an attacker controls message content fields such as attachment path or text.href.
The same missing-enforcement root cause is also reachable before normal streaming when attachDataUrls causes _convertDataImages() to call mail.resolveContent(mail.data, 'html', ...); this should be fixed with the same access-control check.
Details
Source-to-sink evidence:
lib/nodemailer.js:42-45selectsJSONTransportwhencreateTransport({ jsonTransport: true, ... })is used.lib/mailer/mail-message.js:34-39copies transport-leveldisableFileAccessanddisableUrlAccessoptions intomail.data.lib/json-transport/index.js:52-76serializes mail by callingmail.normalize((err, data) => ...).lib/mailer/mail-message.js:46-135implementsresolveAll()and callsshared.resolveContent(...args, ...)forhtml,text,watchHtml,amp,icalEvent, alternatives, and attachments.lib/shared/index.js:506-562implementsresolveContent().lib/shared/index.js:540-541fetches HTTP(S) content withnmfetch(content.path || content.href).lib/shared/index.js:549-550reads local files withfs.createReadStream(content.path).shared.resolveContent()does not checkdisableFileAccessordisableUrlAccessand does not receive those flags.
Control path showing intended enforcement:
lib/mail-composer/index.js:358-359,lib/mail-composer/index.js:367-368, and sibling child-node creation paths passdisableUrlAccessanddisableFileAccessintoMimeNode.lib/mime-node/index.js:51-52stores those flags.lib/mime-node/index.js:984-995rejects file paths withEFILEACCESSwhendisableFileAccessis set.lib/mime-node/index.js:998-1009rejects URLs withEURLACCESSwhendisableUrlAccessis set.test/mail-composer/mail-composer-test.js:1028-1044includes a normal MIME-streaming test that expects file access to be blocked whendisableFileAccess: true.
Additional same-root-cause variant:
lib/mailer/index.js:406-434implements_convertDataImages()forattachDataUrls.lib/mailer/index.js:407-410callsmail.resolveContent(mail.data, 'html', ...)whenattachDataUrlsis enabled andmail.data.htmlis present.- Because
mail.resolveContent()delegates toshared.resolveContent()atlib/mailer/mail-message.js:42-44, an object-formhtml: { path: ... }orhtml: { href: ... }can be resolved before the later MIME streaming enforcement sees the content. - This variant requires
attachDataUrlsto be enabled, so the main reportable default/common path isjsonTransport; both should be fixed by enforcing access flags inside the pre-resolution helper or passing policy into it.
Default/common exposure evidence:
jsonTransportis a shipped runtime transport selected by publiccreateTransportoptions.test/json-transport/json-transport-test.js:9-83demonstrates thatjsonTransportintentionally resolves file-backedhtmland attachments into JSON output.disableFileAccessanddisableUrlAccessare documented by code and tests as security controls and are copied from transport…
- Record
GHSA-wqvq-jvpq-h66f- CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N - Weakness
- CWE-862
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-82660
5.3
Nodemailer before 8.0.9 fails to enforce disableFileAccess and disableUrlAccess options during message normalization in jsonTransport. Attackers can read local files or fetch URLs by supplying path or href values in message content fields, bypassing intended access controls.
- Record
UBUNTU-CVE-2026-82660- CVSS 4.0
- 5.3 Medium
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N - CVSS 3.1
- 5.4 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N - Updated
- 2026-11-02
OSVCLSA-2026-1788976685 No score
TuxCare security update for nodemailer (3 CVEs)
TuxCare rebuilt nodemailer to address 3 CVEs. Fixed in 0.7.1-tuxcare.2.
- Record
CLSA-2026-1788976685- Updated
- 2026-11-02
OSVCLSA-2026-1789050616 No score
TuxCare security update for nodemailer (7 CVEs)
TuxCare rebuilt nodemailer to address 7 CVEs. Fixed in 2.7.2-tuxcare.5.
- Record
CLSA-2026-1789050616- Updated
- 2026-11-02
OSVCLSA-2026-1789052249 No score
TuxCare security update for nodemailer (6 CVEs)
TuxCare rebuilt nodemailer to address 6 CVEs. Fixed in 6.10.1-tuxcare.9.
- Record
CLSA-2026-1789052249- Updated
- 2026-11-02
OSVROOT-APP-NPM-GHSA-wqvq-jvpq-h66f No score
GHSA-wqvq-jvpq-h66f in nodemailer - Patched by Root
Root has patched GHSA-wqvq-jvpq-h66f in the nodemailer package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-GHSA-wqvq-jvpq-h66f- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
nodemailernpm |
through 8.0.8 | 8.0.9 |
nodemailerTuxCare:npm From an advisory covering 3 CVEs |
0.7.1-tuxcare.0 up to 0.7.1-tuxcare.2, plus listed versions 0.7.10.7.1-tuxcare.1 |
0.7.1-tuxcare.2 |
nodemailerTuxCare:npm From an advisory covering 7 CVEs |
2.7.2-tuxcare.0 up to 2.7.2-tuxcare.5, plus listed versions 2.7.22.7.2-tuxcare.12.7.2-tuxcare.22.7.2-tuxcare.32.7.2-tuxcare.4 |
2.7.2-tuxcare.5 |
nodemailerTuxCare:npm From an advisory covering 6 CVEs |
6.10.1-tuxcare.0 up to 6.10.1-tuxcare.9, plus listed versions 6.10.16.10.1-tuxcare.16.10.1-tuxcare.26.10.1-tuxcare.36.10.1-tuxcare.4 Show 4 moreShow less6.10.1-tuxcare.56.10.1-tuxcare.66.10.1-tuxcare.76.10.1-tuxcare.8 |
6.10.1-tuxcare.9 |
node-nodemailerDebian:12 |
All versions, plus listed versions 10.0.0+~8.0.1-110.0.10+~8.0.1-110.0.10+~8.0.2-16.10.0+~6.4.17-16.8.0+~6.4.6-1 Show 22 moreShow less6.9.13+~6.4.14-16.9.15+~6.4.16-16.9.16+~6.4.16-16.9.4+~6.4.9-16.9.4+~6.4.9-26.9.4+~6.4.9-36.9.4+~6.4.9-47.0.10+~7.0.2-17.0.12+~7.0.5-17.0.5+~7.0.1-17.0.6+~7.0.1-17.0.9+~7.0.2-17.0.9+~7.0.2-28.0.11+~8.0.1-18.0.2+~7.0.11-18.0.3+~7.0.11-18.0.4+~7.0.11-18.0.4+~7.0.11-29.0.0+~8.0.1-19.0.3+~8.0.1-19.0.5+~8.0.1-19.0.6+~8.0.1-1 |
None known |
node-nodemailerDebian:13 |
All versions, plus listed versions 10.0.0+~8.0.1-110.0.10+~8.0.1-110.0.10+~8.0.2-16.10.0+~6.4.17-16.10.0+~6.4.17-1+deb13u1 Show 15 moreShow less7.0.10+~7.0.2-17.0.12+~7.0.5-17.0.5+~7.0.1-17.0.6+~7.0.1-17.0.9+~7.0.2-17.0.9+~7.0.2-28.0.11+~8.0.1-18.0.2+~7.0.11-18.0.3+~7.0.11-18.0.4+~7.0.11-18.0.4+~7.0.11-29.0.0+~8.0.1-19.0.3+~8.0.1-19.0.5+~8.0.1-19.0.6+~8.0.1-1 |
None known |
node-nodemailerDebian:14 |
before 8.0.11+~8.0.1-1, plus listed versions 6.10.0+~6.4.17-17.0.10+~7.0.2-17.0.12+~7.0.5-17.0.5+~7.0.1-17.0.6+~7.0.1-1 Show 6 moreShow less7.0.9+~7.0.2-17.0.9+~7.0.2-28.0.2+~7.0.11-18.0.3+~7.0.11-18.0.4+~7.0.11-18.0.4+~7.0.11-2 |
8.0.11+~8.0.1-1 |
nodemailernpm |
before 8.0.9 | 8.0.9 |
nodemailerRoot:npm |
before 6.10.1-aikido.10 | 6.10.1-aikido.106.10.1-aikido.117.0.11-aikido.67.0.11-aikido.76.10.1-aikido.127.0.11-aikido.56.10.1-aikido.96.10.1-aikido.87.0.9-aikido.56.10.1-aikido.57.0.11-aikido.37.0.9-aikido.66.10.1-aikido.67.0.11-aikido.47.0.9-aikido.77.0.9-aikido.86.10.1-aikido.137.0.11-aikido.87.0.11-aikido.97.0.13-aikido.67.0.13-aikido.76.10.1-aikido.14 |
@rootio/nodemailerRoot:npm |
before 6.10.1-root.io.10 | 6.10.1-root.io.106.10.1-root.io.117.0.11-root.io.67.0.11-root.io.76.10.1-root.io.127.0.11-root.io.56.10.1-root.io.96.10.1-root.io.87.0.9-root.io.56.10.1-root.io.57.0.11-root.io.37.0.9-root.io.66.10.1-root.io.67.0.11-root.io.47.0.9-root.io.77.0.9-root.io.86.10.1-root.io.137.0.11-root.io.87.0.11-root.io.97.0.13-root.io.67.0.13-root.io.76.10.1-root.io.14 |
Show 4 moreShow less
| Package | Affected | Fixed |
|---|---|---|
node-nodemailerUbuntu:20.04:LTS |
All versions, plus listed versions 6.3.0-26.3.1-16.4.0-16.4.1-16.4.2-16.4.5-1 |
None known |
node-nodemailerUbuntu:22.04:LTS |
All versions, plus listed versions 6.4.17-36.7.0-16.7.0-26.7.1+~6.4.4-1 |
None known |
node-nodemailerUbuntu:24.04:LTS |
All versions, plus listed versions 6.9.4+~6.4.9-26.9.4+~6.4.9-3ubuntu16.9.4+~6.4.9-4 |
None known |
node-nodemailerUbuntu:26.04:LTS |
All versions, plus listed versions 7.0.5+~7.0.1-17.0.9+~7.0.2-27.0.10+~7.0.2-17.0.12+~7.0.5-18.0.4+~7.0.11-1 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-82660 is a medium vulnerability (CVSS 5.3) in Nodemailer, published June 15, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.26%, the 17th percentile. Fixed in nodemailer 8.0.9.
References
github.com/nodemailer/nodemailer/security/advisories/GHSA-wqvq-jvpq-h66f
vulncheck.com/advisories/nodemailer-jsontransport-bypasses-disablefileaccess-and-disableurlaccess
nvd.nist.gov/vuln/detail/CVE-2026-82660
github.com/advisories/GHSA-28mw-fm9r-fxjg
github.com/advisories/GHSA-wqvq-jvpq-h66f
github.com/CVEProject/cvelistV5/tree/main/cves/2026/82xxx/CVE-2026-82660.json
Left out here: the rest of 2 source descriptions. The JSON record has them.