Action not permitted
Modal body text goes here.
Modal Title
Modal Body
CERTFR-2026-AVI-1531
Vulnerability from certfr_avis - Published: 2026-11-13 - Updated: 2026-11-13
De multiples vulnérabilités ont été découvertes dans Node.js. Certaines d'entre elles permettent à un attaquant de provoquer une atteinte à la confidentialité des données, un contournement de la politique de sécurité et un déni de service.
Solutions
Se référer au bulletin de sécurité de l'éditeur pour l'obtention des correctifs (cf. section Documentation).
| Title | Publication Time | Tags | |||
|---|---|---|---|---|---|
|
|||||
{
"$ref": "https://www.cert.ssi.gouv.fr/openapi.json",
"affected_systems": [
{
"description": "Node.js versions ant\u00e9rieures \u00e0 22.23.5",
"product": {
"name": "Node.js",
"vendor": {
"name": "Node.js",
"scada": false
}
}
},
{
"description": "Node.js versions 26.x ant\u00e9rieures \u00e0 26.13.1",
"product": {
"name": "Node.js",
"vendor": {
"name": "Node.js",
"scada": false
}
}
},
{
"description": "Node.js versions 24.x ant\u00e9rieures \u00e0 24.22.3",
"product": {
"name": "Node.js",
"vendor": {
"name": "Node.js",
"scada": false
}
}
}
],
"affected_systems_content": "",
"content": "## Solutions\n\nSe r\u00e9f\u00e9rer au bulletin de s\u00e9curit\u00e9 de l\u0027\u00e9diteur pour l\u0027obtention des correctifs (cf. section Documentation).",
"cves": [
{
"name": "CVE-2026-123874",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-123874"
},
{
"name": "CVE-2026-126051",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-126051"
},
{
"name": "CVE-2026-123875",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-123875"
},
{
"name": "CVE-2026-123866",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-123866"
},
{
"name": "CVE-2026-123828",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-123828"
},
{
"name": "CVE-2026-123877",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-123877"
},
{
"name": "CVE-2024-27983",
"url": "https://www.cve.org/CVERecord?id=CVE-2024-27983"
},
{
"name": "CVE-2026-123829",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-123829"
},
{
"name": "CVE-2026-48937",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-48937"
},
{
"name": "CVE-2026-106071",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-106071"
},
{
"name": "CVE-2026-123872",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-123872"
},
{
"name": "CVE-2026-123868",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-123868"
},
{
"name": "CVE-2026-123864",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-123864"
},
{
"name": "CVE-2026-123862",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-123862"
},
{
"name": "CVE-2026-123867",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-123867"
},
{
"name": "CVE-2026-123871",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-123871"
},
{
"name": "CVE-2026-123863",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-123863"
},
{
"name": "CVE-2026-48615",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-48615"
},
{
"name": "CVE-2026-123865",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-123865"
}
],
"initial_release_date": "2026-11-13T00:00:00",
"last_revision_date": "2026-11-13T00:00:00",
"links": [],
"reference": "CERTFR-2026-AVI-1531",
"revisions": [
{
"description": "Version initiale",
"revision_date": "2026-11-13T00:00:00.000000"
}
],
"risks": [
{
"description": "D\u00e9ni de service"
},
{
"description": "Contournement de la politique de s\u00e9curit\u00e9"
},
{
"description": "Atteinte \u00e0 la confidentialit\u00e9 des donn\u00e9es"
}
],
"summary": "De multiples vuln\u00e9rabilit\u00e9s ont \u00e9t\u00e9 d\u00e9couvertes dans Node.js. Certaines d\u0027entre elles permettent \u00e0 un attaquant de provoquer une atteinte \u00e0 la confidentialit\u00e9 des donn\u00e9es, un contournement de la politique de s\u00e9curit\u00e9 et un d\u00e9ni de service.",
"title": "Multiples vuln\u00e9rabilit\u00e9s dans Node.js",
"vendor_advisories": [
{
"published_at": "2026-11-03",
"title": "Bulletin de s\u00e9curit\u00e9 Node.js november-2026-security-releases",
"url": "https://nodejs.org/en/blog/vulnerability/november-2026-security-releases"
}
]
}
CVE-2024-27983 (GCVE-0-2024-27983)
Vulnerability from cvelistv5 – Published: 2024-04-09 01:06 – Updated: 2025-11-04 18:30- CWE-362 - Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')
| Vendor | Product | Version | |
|---|---|---|---|
| NodeJS | Node |
Affected:
4.0 , < 4.*
(semver)
Affected: 5.0 , < 5.* (semver) Affected: 6.0 , < 6.* (semver) Affected: 7.0 , < 7.* (semver) Affected: 8.0 , < 8.* (semver) Affected: 9.0 , < 9.* (semver) Affected: 10.0 , < 10.* (semver) Affected: 11.0 , < 11.* (semver) Affected: 12.0 , < 12.* (semver) Affected: 13.0 , < 13.* (semver) Affected: 14.0 , < 14.* (semver) Affected: 15.0 , < 15.* (semver) Affected: 16.0 , < 16.* (semver) Affected: 17.0 , < 17.* (semver) Affected: 18.0 , < 18.20.1 (semver) Affected: 19.0 , < 19.* (semver) Affected: 20.0 , < 20.12.1 (semver) Affected: 21.0 , < 21.7.2 (semver) |
|
| nodejs | nodejs |
Affected:
0 , ≤ 18.20.0
(custom)
Affected: 0 , ≤ 20.12.0 (custom) Affected: 0 , ≤ 21.7.1 (custom) cpe:2.3:a:nodejs:nodejs:*:*:*:*:*:*:*:* |
{
"containers": {
"adp": [
{
"providerMetadata": {
"dateUpdated": "2025-11-04T18:30:20.209Z",
"orgId": "af854a3a-2127-422b-91ae-364da2661108",
"shortName": "CVE"
},
"references": [
{
"tags": [
"x_transferred"
],
"url": "https://hackerone.com/reports/2319584"
},
{
"tags": [
"x_transferred"
],
"url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/JDECX4BYZLMM4S4LALN4DPZ2HUTTPLKE/"
},
{
"tags": [
"x_transferred"
],
"url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/YDVFUH7ACZPYB3BS4SVILNOY7NQU73VW/"
},
{
"tags": [
"x_transferred"
],
"url": "http://www.openwall.com/lists/oss-security/2024/04/03/16"
},
{
"tags": [
"x_transferred"
],
"url": "https://security.netapp.com/advisory/ntap-20240510-0002/"
},
{
"url": "https://lists.debian.org/debian-lts-announce/2024/09/msg00029.html"
},
{
"url": "https://www.kb.cert.org/vuls/id/421644"
}
],
"title": "CVE Program Container"
},
{
"affected": [
{
"cpes": [
"cpe:2.3:a:nodejs:nodejs:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unknown",
"product": "nodejs",
"vendor": "nodejs",
"versions": [
{
"lessThanOrEqual": "18.20.0",
"status": "affected",
"version": "0",
"versionType": "custom"
},
{
"lessThanOrEqual": "20.12.0",
"status": "affected",
"version": "0",
"versionType": "custom"
},
{
"lessThanOrEqual": "21.7.1",
"status": "affected",
"version": "0",
"versionType": "custom"
}
]
}
],
"metrics": [
{
"other": {
"content": {
"id": "CVE-2024-27983",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2024-04-09T19:14:56.001352Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-362",
"description": "CWE-362 Concurrent Execution using Shared Resource with Improper Synchronization (\u0027Race Condition\u0027)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2025-03-14T18:08:27.458Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Node",
"vendor": "NodeJS",
"versions": [
{
"lessThan": "4.*",
"status": "affected",
"version": "4.0",
"versionType": "semver"
},
{
"lessThan": "5.*",
"status": "affected",
"version": "5.0",
"versionType": "semver"
},
{
"lessThan": "6.*",
"status": "affected",
"version": "6.0",
"versionType": "semver"
},
{
"lessThan": "7.*",
"status": "affected",
"version": "7.0",
"versionType": "semver"
},
{
"lessThan": "8.*",
"status": "affected",
"version": "8.0",
"versionType": "semver"
},
{
"lessThan": "9.*",
"status": "affected",
"version": "9.0",
"versionType": "semver"
},
{
"lessThan": "10.*",
"status": "affected",
"version": "10.0",
"versionType": "semver"
},
{
"lessThan": "11.*",
"status": "affected",
"version": "11.0",
"versionType": "semver"
},
{
"lessThan": "12.*",
"status": "affected",
"version": "12.0",
"versionType": "semver"
},
{
"lessThan": "13.*",
"status": "affected",
"version": "13.0",
"versionType": "semver"
},
{
"lessThan": "14.*",
"status": "affected",
"version": "14.0",
"versionType": "semver"
},
{
"lessThan": "15.*",
"status": "affected",
"version": "15.0",
"versionType": "semver"
},
{
"lessThan": "16.*",
"status": "affected",
"version": "16.0",
"versionType": "semver"
},
{
"lessThan": "17.*",
"status": "affected",
"version": "17.0",
"versionType": "semver"
},
{
"lessThan": "18.20.1",
"status": "affected",
"version": "18.0",
"versionType": "semver"
},
{
"lessThan": "19.*",
"status": "affected",
"version": "19.0",
"versionType": "semver"
},
{
"lessThan": "20.12.1",
"status": "affected",
"version": "20.0",
"versionType": "semver"
},
{
"lessThan": "21.7.2",
"status": "affected",
"version": "21.0",
"versionType": "semver"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "An attacker can make the Node.js HTTP/2 server completely unavailable by sending a small amount of HTTP/2 frames packets with a few HTTP/2 frames inside. It is possible to leave some data in nghttp2 memory after reset when headers with HTTP/2 CONTINUATION frame are sent to the server and then a TCP connection is abruptly closed by the client triggering the Http2Session destructor while header frames are still being processed (and stored in memory) causing a race condition."
}
],
"metrics": [
{
"cvssV3_0": {
"baseScore": 8.2,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H",
"version": "3.0"
}
}
],
"providerMetadata": {
"dateUpdated": "2025-04-30T22:25:15.944Z",
"orgId": "36234546-b8fa-4601-9d6f-f4e334aa8ea1",
"shortName": "hackerone"
},
"references": [
{
"url": "https://hackerone.com/reports/2319584"
},
{
"url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/JDECX4BYZLMM4S4LALN4DPZ2HUTTPLKE/"
},
{
"url": "https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/YDVFUH7ACZPYB3BS4SVILNOY7NQU73VW/"
},
{
"url": "http://www.openwall.com/lists/oss-security/2024/04/03/16"
},
{
"url": "https://security.netapp.com/advisory/ntap-20240510-0002/"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "36234546-b8fa-4601-9d6f-f4e334aa8ea1",
"assignerShortName": "hackerone",
"cveId": "CVE-2024-27983",
"datePublished": "2024-04-09T01:06:43.681Z",
"dateReserved": "2024-02-29T01:04:06.641Z",
"dateUpdated": "2025-11-04T18:30:20.209Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-106071 (GCVE-0-2026-106071)
Vulnerability from cvelistv5 – Published: 2026-10-23 16:15 – Updated: 2026-11-02 15:40- CWE-284 - Improper Access Control - Generic
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-106071",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-11-02T15:40:16.898483Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-11-02T15:40:27.184Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "node",
"vendor": "nodejs",
"versions": [
{
"lessThanOrEqual": "26.12.0",
"status": "affected",
"version": "26.12.0",
"versionType": "semver"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "A flaw in Node.js Permission Model filesystem enforcement can grant access to paths that do not match a wildcard `--allow-fs-read` or `--allow-fs-write` rule.\n\nWhen the requested path is shorter than the prefix of a wildcard grant, the radix tree lookup stops comparing early and treats the path as a match. For example, `--allow-fs-read=/etc/passwd.*` also allows reading `/etc/passwd`. This requires the wildcard grant to sit directly under the root of the permission tree, for example when it is the only grant for that scope. This is a different root cause from CVE-2026-58043.\n\nThis vulnerability affects Node.js **26.x**."
}
],
"metrics": [
{
"cvssV3_0": {
"baseScore": 3.6,
"baseSeverity": "LOW",
"vectorString": "CVSS:3.0/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:N/CR:M/IR:M/AR:M",
"version": "3.0"
}
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-284",
"description": "CWE-284 Improper Access Control - Generic",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-23T16:15:05.791Z",
"orgId": "36234546-b8fa-4601-9d6f-f4e334aa8ea1",
"shortName": "hackerone"
},
"references": [
{
"url": "https://nodejs.org/en/blog/vulnerability/october-2026-security-releases"
}
]
}
},
"cveMetadata": {
"assignerOrgId": "36234546-b8fa-4601-9d6f-f4e334aa8ea1",
"assignerShortName": "hackerone",
"cveId": "CVE-2026-106071",
"datePublished": "2026-10-23T16:15:05.791Z",
"dateReserved": "2026-10-06T15:00:00.655Z",
"dateUpdated": "2026-11-02T15:40:27.184Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-123828 (GCVE-0-2026-123828)
Vulnerability from cvelistv5 – Published: 2026-11-11 18:10 – Updated: 2026-11-11 18:10- CWE-122 - Heap Overflow
| URL | Tags |
|---|---|
| https://nodejs.org/en/blog/vulnerability/november… | vendor-advisory |
| https://cna.openjsf.org/security-advisories.html |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "node",
"vendor": "nodejs",
"versions": [
{
"lessThan": "24.22.3",
"status": "affected",
"version": "24.0.0",
"versionType": "semver"
},
{
"lessThan": "26.13.1",
"status": "affected",
"version": "25.0.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "zonduu"
},
{
"lang": "en",
"type": "remediation developer",
"value": "mcollina"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "UlisesGascon"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "pimterry"
},
{
"lang": "en",
"type": "coordinator",
"value": "aduh95"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/markdown",
"value": "A one-byte heap buffer overflow in Node.js HTTP/2 Alt-Svc handling lets a remote, unauthenticated attacker corrupt process memory. When an application passes an attacker-controlled value such as a request\u0027s `:authority` header to `Http2Session.altsvc()`, the AltSvc implementation in `src/node_http2.cc` allocates a buffer sized to the origin length and then writes it with a null terminator, placing one byte past the end of the allocation. A single request carrying a long but syntactically valid `:authority` triggers the out-of-bounds write, which aborts the process and serves as a remote heap-corruption primitive. This vulnerability affects Node.js 26.x and 24.x."
}
],
"value": "A one-byte heap buffer overflow in Node.js HTTP/2 Alt-Svc handling lets a remote, unauthenticated attacker corrupt process memory. When an application passes an attacker-controlled value such as a request\u0027s :authority header to Http2Session.altsvc(), the AltSvc implementation in src/node_http2.cc allocates a buffer sized to the origin length and then writes it with a null terminator, placing one byte past the end of the allocation. A single request carrying a long but syntactically valid :authority triggers the out-of-bounds write, which aborts the process and serves as a remote heap-corruption primitive. This vulnerability affects Node.js 26.x and 24.x."
}
],
"metrics": [
{
"cvssV3_0": {
"baseScore": 5.9,
"baseSeverity": "MEDIUM",
"vectorString": "CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.0"
},
"format": "CVSS"
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-122",
"description": "Heap Overflow",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-11T18:10:54.030Z",
"orgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"shortName": "openjs"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://nodejs.org/en/blog/vulnerability/november-2026-security-releases"
},
{
"url": "https://cna.openjsf.org/security-advisories.html"
}
],
"title": "Node.js is vulnerable to a heap buffer overflow in HTTP/2 session.altsvc() via a long origin",
"x_generator": {
"engine": "nodejs-private/security-release publish-cves"
}
}
},
"cveMetadata": {
"assignerOrgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"assignerShortName": "openjs",
"cveId": "CVE-2026-123828",
"datePublished": "2026-11-11T18:10:54.030Z",
"dateReserved": "2026-11-06T16:02:55.733Z",
"dateUpdated": "2026-11-11T18:10:54.030Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-123829 (GCVE-0-2026-123829)
Vulnerability from cvelistv5 – Published: 2026-11-11 18:12 – Updated: 2026-11-11 18:12- CWE-200 - Information Disclosure
| URL | Tags |
|---|---|
| https://nodejs.org/en/blog/vulnerability/november… | vendor-advisory |
| https://cna.openjsf.org/security-advisories.html |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "node",
"vendor": "nodejs",
"versions": [
{
"lessThan": "22.23.5",
"status": "affected",
"version": "0.0.0",
"versionType": "semver"
},
{
"lessThan": "24.22.3",
"status": "affected",
"version": "23.0.0",
"versionType": "semver"
},
{
"lessThan": "26.13.1",
"status": "affected",
"version": "25.0.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Trail of Bits (OpenAI)"
},
{
"lang": "en",
"type": "remediation developer",
"value": "RafaelGSS"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "UlisesGascon"
},
{
"lang": "en",
"type": "coordinator",
"value": "aduh95"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/markdown",
"value": "A Permission Model bypass in Node.js recursive file watching discloses the names of files and directories the process is not permitted to read. On macOS and Windows, `fs.watch()` and `fs.promises.watch()` in recursive mode are backed by the native `libuv` watcher: `FSEventWrap::Start` checks `kFileSystemRead` only once, on the watched root, and `FSEventWrap::OnEvent` then forwards every filename `libuv` reports (relative paths at any depth) to the JavaScript callback without checking that each path is covered by the read grant. Code running under `--permission` with an exact read grant on a directory can therefore learn names such as `sub/secret.txt` even though `readdir` on that subdirectory is denied. The flaw exposes names and timing metadata, not file contents, and requires macOS or Windows plus files created under the watched directory by another actor. This vulnerability affects Node.js 26.x, 24.x, and 22.x."
}
],
"value": "A Permission Model bypass in Node.js recursive file watching discloses the names of files and directories the process is not permitted to read. On macOS and Windows, fs.watch() and fs.promises.watch() in recursive mode are backed by the native libuv watcher: FSEventWrap::Start checks kFileSystemRead only once, on the watched root, and FSEventWrap::OnEvent then forwards every filename libuv reports (relative paths at any depth) to the JavaScript callback without checking that each path is covered by the read grant. Code running under --permission with an exact read grant on a directory can therefore learn names such as sub/secret.txt even though readdir on that subdirectory is denied. The flaw exposes names and timing metadata, not file contents, and requires macOS or Windows plus files created under the watched directory by another actor. This vulnerability affects Node.js 26.x, 24.x, and 22.x."
}
],
"metrics": [
{
"cvssV3_0": {
"baseScore": 2.5,
"baseSeverity": "LOW",
"vectorString": "CVSS:3.0/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N",
"version": "3.0"
},
"format": "CVSS"
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-200",
"description": "Information Disclosure",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-11T18:12:41.452Z",
"orgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"shortName": "openjs"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://nodejs.org/en/blog/vulnerability/november-2026-security-releases"
},
{
"url": "https://cna.openjsf.org/security-advisories.html"
}
],
"title": "Node.js is vulnerable to Permission Model file-name disclosure via recursive fs.watch",
"x_generator": {
"engine": "nodejs-private/security-release publish-cves"
}
}
},
"cveMetadata": {
"assignerOrgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"assignerShortName": "openjs",
"cveId": "CVE-2026-123829",
"datePublished": "2026-11-11T18:12:41.452Z",
"dateReserved": "2026-11-06T16:03:55.749Z",
"dateUpdated": "2026-11-11T18:12:41.452Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-123862 (GCVE-0-2026-123862)
Vulnerability from cvelistv5 – Published: 2026-11-11 18:14 – Updated: 2026-11-11 18:14- CWE-248 - Uncaught Exception
| URL | Tags |
|---|---|
| https://nodejs.org/en/blog/vulnerability/november… | vendor-advisory |
| https://cna.openjsf.org/security-advisories.html |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "node",
"vendor": "nodejs",
"versions": [
{
"lessThan": "22.23.5",
"status": "affected",
"version": "0.0.0",
"versionType": "semver"
},
{
"lessThan": "24.22.3",
"status": "affected",
"version": "23.0.0",
"versionType": "semver"
},
{
"lessThan": "26.13.1",
"status": "affected",
"version": "25.0.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Chris Rohlf in collaboration with Claude and Anthropic Research"
},
{
"lang": "en",
"type": "remediation developer",
"value": "mcollina"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "UlisesGascon"
},
{
"lang": "en",
"type": "coordinator",
"value": "aduh95"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/markdown",
"value": "An uncatchable exception in the Node.js zlib streaming API lets a peer crash a process by disconnecting while data is being compressed. `zlib.params()` queues a flush and completes its work in that write\u0027s callback; if the stream is destroyed first, as `pipeline()` does when the peer goes away, `Writable` still invokes the callback with an error, but the callback ignores its arguments and asserts that the native handle still exists. The handle is gone, so an `ERR_INTERNAL_ASSERTION` is thrown from inside stream internals and bypasses the stream\u0027s `error` event, the `params()` callback, and the `pipeline()` callback, terminating the process. An application is affected only if it calls `deflate.params()` while streaming to a peer, which is uncommon. This vulnerability affects Node.js 26.x, 24.x, and 22.x."
}
],
"value": "An uncatchable exception in the Node.js zlib streaming API lets a peer crash a process by disconnecting while data is being compressed. zlib.params() queues a flush and completes its work in that write\u0027s callback; if the stream is destroyed first, as pipeline() does when the peer goes away, Writable still invokes the callback with an error, but the callback ignores its arguments and asserts that the native handle still exists. The handle is gone, so an ERR_INTERNAL_ASSERTION is thrown from inside stream internals and bypasses the stream\u0027s error event, the params() callback, and the pipeline() callback, terminating the process. An application is affected only if it calls deflate.params() while streaming to a peer, which is uncommon. This vulnerability affects Node.js 26.x, 24.x, and 22.x."
}
],
"metrics": [
{
"cvssV3_0": {
"baseScore": 2.9,
"baseSeverity": "LOW",
"vectorString": "CVSS:3.0/AV:L/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L",
"version": "3.0"
},
"format": "CVSS"
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-248",
"description": "Uncaught Exception",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-11T18:14:26.996Z",
"orgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"shortName": "openjs"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://nodejs.org/en/blog/vulnerability/november-2026-security-releases"
},
{
"url": "https://cna.openjsf.org/security-advisories.html"
}
],
"title": "Node.js is vulnerable to a zlib denial of service via a stream destroy during a pending params() call",
"x_generator": {
"engine": "nodejs-private/security-release publish-cves"
}
}
},
"cveMetadata": {
"assignerOrgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"assignerShortName": "openjs",
"cveId": "CVE-2026-123862",
"datePublished": "2026-11-11T18:14:26.996Z",
"dateReserved": "2026-11-06T16:11:55.196Z",
"dateUpdated": "2026-11-11T18:14:26.996Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-123863 (GCVE-0-2026-123863)
Vulnerability from cvelistv5 – Published: 2026-11-11 18:16 – Updated: 2026-11-11 18:16- CWE-617 - Reachable Assertion
| URL | Tags |
|---|---|
| https://nodejs.org/en/blog/vulnerability/november… | vendor-advisory |
| https://cna.openjsf.org/security-advisories.html |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "node",
"vendor": "nodejs",
"versions": [
{
"lessThan": "24.22.3",
"status": "affected",
"version": "24.0.0",
"versionType": "semver"
},
{
"lessThan": "26.13.1",
"status": "affected",
"version": "25.0.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Chris Rohlf in collaboration with Claude and Anthropic Research"
},
{
"lang": "en",
"type": "remediation developer",
"value": "mcollina"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "UlisesGascon"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "pimterry"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "ronag"
},
{
"lang": "en",
"type": "coordinator",
"value": "aduh95"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/markdown",
"value": "A reachable assertion in Node.js HTTP/2 session teardown lets any unauthenticated client abort the server, over both TLS and cleartext. A client can arrange for an `Http2Stream` that still holds `nghttp2`-allocated header buffers to outlive its session: the stream is removed from the session\u0027s stream set but never detached, so when `~Http2Session()` runs the memory accounting is nonzero and the `CHECK_EQ(current_nghttp2_memory_, 0)` assertion fails, terminating the process. The trigger needs only a default `http2` server whose handler responds before the request body has ended, which is typical. It is a variant of CVE-2024-27983 that the earlier fix did not cover, because that fix only detached streams still tracked in the session. This vulnerability affects Node.js 26.x (since 26.9.0) and 24.x (since 24.22.0)."
}
],
"value": "A reachable assertion in Node.js HTTP/2 session teardown lets any unauthenticated client abort the server, over both TLS and cleartext. A client can arrange for an Http2Stream that still holds nghttp2-allocated header buffers to outlive its session: the stream is removed from the session\u0027s stream set but never detached, so when ~Http2Session() runs the memory accounting is nonzero and the CHECK_EQ(current_nghttp2_memory_, 0) assertion fails, terminating the process. The trigger needs only a default http2 server whose handler responds before the request body has ended, which is typical. It is a variant of CVE-2024-27983 that the earlier fix did not cover, because that fix only detached streams still tracked in the session. This vulnerability affects Node.js 26.x (since 26.9.0) and 24.x (since 24.22.0)."
}
],
"metrics": [
{
"cvssV3_0": {
"baseScore": 8.2,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H",
"version": "3.0"
},
"format": "CVSS"
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-617",
"description": "Reachable Assertion",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-11T18:16:12.733Z",
"orgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"shortName": "openjs"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://nodejs.org/en/blog/vulnerability/november-2026-security-releases"
},
{
"url": "https://cna.openjsf.org/security-advisories.html"
}
],
"title": "Node.js is vulnerable to a remote HTTP/2 denial of service via a reachable assertion in Http2Session teardown",
"x_generator": {
"engine": "nodejs-private/security-release publish-cves"
}
}
},
"cveMetadata": {
"assignerOrgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"assignerShortName": "openjs",
"cveId": "CVE-2026-123863",
"datePublished": "2026-11-11T18:16:12.733Z",
"dateReserved": "2026-11-06T16:12:44.473Z",
"dateUpdated": "2026-11-11T18:16:12.733Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-123864 (GCVE-0-2026-123864)
Vulnerability from cvelistv5 – Published: 2026-11-11 18:17 – Updated: 2026-11-11 18:17- CWE-416 - Use After Free
| URL | Tags |
|---|---|
| https://nodejs.org/en/blog/vulnerability/november… | vendor-advisory |
| https://cna.openjsf.org/security-advisories.html |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "node",
"vendor": "nodejs",
"versions": [
{
"lessThan": "22.23.5",
"status": "affected",
"version": "0.0.0",
"versionType": "semver"
},
{
"lessThan": "24.22.3",
"status": "affected",
"version": "23.0.0",
"versionType": "semver"
},
{
"lessThan": "26.13.1",
"status": "affected",
"version": "25.0.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Chris Rohlf in collaboration with Claude and Anthropic Research"
},
{
"lang": "en",
"type": "remediation developer",
"value": "mcollina"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "ShogunPanda"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "pimterry"
},
{
"lang": "en",
"type": "coordinator",
"value": "aduh95"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/markdown",
"value": "A re-entrancy flaw in Node.js HTTPS lets an unauthenticated client read memory belonging to other connections, including TLS private keys and other users\u0027 requests. `TLSWrap::DoWrite()` calls `ClearOut()` directly when asked to write zero bytes; if that write is issued from JavaScript running inside the HTTP parser\u0027s `on_body` callback, `ClearOut()` decrypts the next TLS record while the parser is still mid-body, re-entering `llhttp_execute()` and causing a use-after-free and an out-of-bounds heap read. The server then copies that freed or unrelated heap memory into the response for the request body. Triggering it requires a handler that calls `res.flushHeaders()` before the request body ends and later calls `res.end()` with a non-empty chunk, and reading the leaked memory requires any ordinary route that echoes or stores a request body. Cleartext `node:http` is not affected. This vulnerability affects Node.js 26.x, 24.x, and 22.x."
}
],
"value": "A re-entrancy flaw in Node.js HTTPS lets an unauthenticated client read memory belonging to other connections, including TLS private keys and other users\u0027 requests. TLSWrap::DoWrite() calls ClearOut() directly when asked to write zero bytes; if that write is issued from JavaScript running inside the HTTP parser\u0027s on_body callback, ClearOut() decrypts the next TLS record while the parser is still mid-body, re-entering llhttp_execute() and causing a use-after-free and an out-of-bounds heap read. The server then copies that freed or unrelated heap memory into the response for the request body. Triggering it requires a handler that calls res.flushHeaders() before the request body ends and later calls res.end() with a non-empty chunk, and reading the leaked memory requires any ordinary route that echoes or stores a request body. Cleartext node:http is not affected. This vulnerability affects Node.js 26.x, 24.x, and 22.x."
}
],
"metrics": [
{
"cvssV3_0": {
"baseScore": 8.1,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:H",
"version": "3.0"
},
"format": "CVSS"
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-416",
"description": "Use After Free",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-11T18:17:56.773Z",
"orgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"shortName": "openjs"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://nodejs.org/en/blog/vulnerability/november-2026-security-releases"
},
{
"url": "https://cna.openjsf.org/security-advisories.html"
}
],
"title": "Node.js is vulnerable to cross-connection memory disclosure via TLS write re-entrancy in the HTTPS request parser",
"x_generator": {
"engine": "nodejs-private/security-release publish-cves"
}
}
},
"cveMetadata": {
"assignerOrgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"assignerShortName": "openjs",
"cveId": "CVE-2026-123864",
"datePublished": "2026-11-11T18:17:56.773Z",
"dateReserved": "2026-11-06T16:13:33.715Z",
"dateUpdated": "2026-11-11T18:17:56.773Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-123865 (GCVE-0-2026-123865)
Vulnerability from cvelistv5 – Published: 2026-11-11 18:19 – Updated: 2026-11-11 18:19- CWE-400 - Uncontrolled Resource Consumption
| URL | Tags |
|---|---|
| https://nodejs.org/en/blog/vulnerability/november… | vendor-advisory |
| https://cna.openjsf.org/security-advisories.html |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "node",
"vendor": "nodejs",
"versions": [
{
"lessThan": "22.23.5",
"status": "affected",
"version": "0.0.0",
"versionType": "semver"
},
{
"lessThan": "24.22.3",
"status": "affected",
"version": "23.0.0",
"versionType": "semver"
},
{
"lessThan": "26.13.1",
"status": "affected",
"version": "25.0.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "pimterry"
},
{
"lang": "en",
"type": "remediation developer",
"value": "mcollina"
},
{
"lang": "en",
"type": "coordinator",
"value": "aduh95"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/markdown",
"value": "An unauthenticated HTTP/2 client can permanently leak Node.js server memory and file descriptors. If a peer triggers a protocol error, for example an oversized frame header, while the session is already shutting down, `nghttp2` tears the session down internally but Node.js never notices, leaving a dangling session: the socket stays in `CLOSE_WAIT` and all of Node.js\u0027s HTTP/2 state for that connection is held in memory indefinitely, with no further cost to the attacker. The attacker can start the shutdown remotely by sending `GOAWAY(NO_ERROR)`, so it is reliable against default HTTP/2 servers. It is an incomplete-fix case of CVE-2026-48937: that fix detected `nghttp2` internal terminations by watching for `GOAWAY` sent while not shutting down, but missed terminations that arrive while the session is already shutting down. This vulnerability affects Node.js 26.x, 24.x, and 22.x."
}
],
"value": "An unauthenticated HTTP/2 client can permanently leak Node.js server memory and file descriptors. If a peer triggers a protocol error, for example an oversized frame header, while the session is already shutting down, nghttp2 tears the session down internally but Node.js never notices, leaving a dangling session: the socket stays in CLOSE_WAIT and all of Node.js\u0027s HTTP/2 state for that connection is held in memory indefinitely, with no further cost to the attacker. The attacker can start the shutdown remotely by sending GOAWAY(NO_ERROR), so it is reliable against default HTTP/2 servers. It is an incomplete-fix case of CVE-2026-48937: that fix detected nghttp2 internal terminations by watching for GOAWAY sent while not shutting down, but missed terminations that arrive while the session is already shutting down. This vulnerability affects Node.js 26.x, 24.x, and 22.x."
}
],
"metrics": [
{
"cvssV3_0": {
"baseScore": 7.5,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"version": "3.0"
},
"format": "CVSS"
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-400",
"description": "Uncontrolled Resource Consumption",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-11T18:19:36.284Z",
"orgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"shortName": "openjs"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://nodejs.org/en/blog/vulnerability/november-2026-security-releases"
},
{
"url": "https://cna.openjsf.org/security-advisories.html"
}
],
"title": "Node.js is vulnerable to an HTTP/2 memory and file-descriptor leak via a protocol error during session shutdown",
"x_generator": {
"engine": "nodejs-private/security-release publish-cves"
}
}
},
"cveMetadata": {
"assignerOrgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"assignerShortName": "openjs",
"cveId": "CVE-2026-123865",
"datePublished": "2026-11-11T18:19:36.284Z",
"dateReserved": "2026-11-06T16:14:27.277Z",
"dateUpdated": "2026-11-11T18:19:36.284Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-123866 (GCVE-0-2026-123866)
Vulnerability from cvelistv5 – Published: 2026-11-11 18:21 – Updated: 2026-11-11 18:21- CWE-416 - Use After Free
| URL | Tags |
|---|---|
| https://nodejs.org/en/blog/vulnerability/november… | vendor-advisory |
| https://cna.openjsf.org/security-advisories.html |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "node",
"vendor": "nodejs",
"versions": [
{
"lessThan": "22.23.5",
"status": "affected",
"version": "0.0.0",
"versionType": "semver"
},
{
"lessThan": "24.22.3",
"status": "affected",
"version": "23.0.0",
"versionType": "semver"
},
{
"lessThan": "26.13.1",
"status": "affected",
"version": "25.0.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "aidan02"
},
{
"lang": "en",
"type": "remediation developer",
"value": "mcollina"
},
{
"lang": "en",
"type": "coordinator",
"value": "aduh95"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/markdown",
"value": "A use-after-free in Node.js HTTP/2 stream teardown can leak response memory, including the contents of other connections\u0027 response buffers, to a peer. When a stream is torn down while a write is still backpressured, for example by a peer `RST_STREAM` or by the server\u0027s own per-stream timeout destroying the stream, the stream\u0027s response buffer is freed but a reference to it is still used, so freed or unrelated heap memory is written to the socket instead of the intended response. On Node.js 26.x and 24.x the teardown can be driven purely by a remote peer once the window-size change from 26.9.0 and 24.22.0 is present, and on all supported lines the same defect is reachable through an application-initiated teardown such as a per-stream idle timeout. This vulnerability affects Node.js 26.x, 24.x, and 22.x."
}
],
"value": "A use-after-free in Node.js HTTP/2 stream teardown can leak response memory, including the contents of other connections\u0027 response buffers, to a peer. When a stream is torn down while a write is still backpressured, for example by a peer RST_STREAM or by the server\u0027s own per-stream timeout destroying the stream, the stream\u0027s response buffer is freed but a reference to it is still used, so freed or unrelated heap memory is written to the socket instead of the intended response. On Node.js 26.x and 24.x the teardown can be driven purely by a remote peer once the window-size change from 26.9.0 and 24.22.0 is present, and on all supported lines the same defect is reachable through an application-initiated teardown such as a per-stream idle timeout. This vulnerability affects Node.js 26.x, 24.x, and 22.x."
}
],
"metrics": [
{
"cvssV3_0": {
"baseScore": 7.5,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
"version": "3.0"
},
"format": "CVSS"
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-416",
"description": "Use After Free",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-11T18:21:18.538Z",
"orgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"shortName": "openjs"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://nodejs.org/en/blog/vulnerability/november-2026-security-releases"
},
{
"url": "https://cna.openjsf.org/security-advisories.html"
}
],
"title": "Node.js is vulnerable to HTTP/2 response memory disclosure via a use-after-free during stream teardown",
"x_generator": {
"engine": "nodejs-private/security-release publish-cves"
}
}
},
"cveMetadata": {
"assignerOrgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"assignerShortName": "openjs",
"cveId": "CVE-2026-123866",
"datePublished": "2026-11-11T18:21:18.538Z",
"dateReserved": "2026-11-06T16:15:25.978Z",
"dateUpdated": "2026-11-11T18:21:18.538Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-123867 (GCVE-0-2026-123867)
Vulnerability from cvelistv5 – Published: 2026-11-11 18:23 – Updated: 2026-11-12 14:34- CWE-295 - Improper Certificate Validation
| URL | Tags |
|---|---|
| https://nodejs.org/en/blog/vulnerability/november… | vendor-advisory |
| https://cna.openjsf.org/security-advisories.html |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "node",
"vendor": "nodejs",
"versions": [
{
"lessThan": "22.23.5",
"status": "affected",
"version": "0.0.0",
"versionType": "semver"
},
{
"lessThan": "24.22.3",
"status": "affected",
"version": "23.0.0",
"versionType": "semver"
},
{
"lessThan": "26.13.1",
"status": "affected",
"version": "25.0.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"value": "Uttkarsh Singh"
},
{
"lang": "en",
"type": "remediation developer",
"value": "mcollina"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "UlisesGascon"
},
{
"lang": "en",
"type": "remediation reviewer",
"value": "pimterry"
},
{
"lang": "en",
"type": "coordinator",
"value": "aduh95"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/markdown",
"value": "A per-host mutual-TLS authorization bypass in Node.js lets a client authorized for the default hostname reach a protected hostname it is not authorized for. When a TLS server assigns a hostname a different client-certificate CA with `server.addContext(host, { ca: protectedCA })` but no server certificate in that SNI context, the per-host client CA is never installed and the handshake falls back to the default client CA. In `src/crypto/crypto_tls.cc`, `CertCbDone` installs the SNI context\u0027s CA only when `setSniContext` succeeds, but `setSniContext` returns `false` for a context with no server certificate, so a CA-only SNI context silently keeps the default CA. A client holding a certificate trusted by the default CA, but not the protected CA, can therefore complete mTLS to the protected hostname and read its response even with `requestCert` and `rejectUnauthorized` enabled, while a client certified by the protected CA is rejected. This vulnerability affects Node.js 26.x, 24.x, and 22.x."
}
],
"value": "A per-host mutual-TLS authorization bypass in Node.js lets a client authorized for the default hostname reach a protected hostname it is not authorized for. When a TLS server assigns a hostname a different client-certificate CA with `server.addContext(host, { ca: protectedCA })` but no server certificate in that SNI context, the per-host client CA is never installed and the handshake falls back to the default client CA. In `src/crypto/crypto_tls.cc`, `CertCbDone` installs the SNI context\u0027s CA only when `setSniContext` succeeds, but `setSniContext` returns `false` for a context with no server certificate, so a CA-only SNI context silently keeps the default CA. A client holding a certificate trusted by the default CA, but not the protected CA, can therefore complete mTLS to the protected hostname and read its response even with `requestCert` and `rejectUnauthorized` enabled, while a client certified by the protected CA is rejected. This vulnerability affects Node.js 26.x, 24.x, and 22.x."
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "NONE",
"baseScore": 4.2,
"baseSeverity": "MEDIUM",
"confidentialityImpact": "LOW",
"integrityImpact": "LOW",
"privilegesRequired": "LOW",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:N",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-295",
"description": "CWE-295 Improper Certificate Validation",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-11-12T14:34:33.702Z",
"orgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"shortName": "openjs"
},
"references": [
{
"tags": [
"vendor-advisory"
],
"url": "https://nodejs.org/en/blog/vulnerability/november-2026-security-releases"
},
{
"url": "https://cna.openjsf.org/security-advisories.html"
}
],
"source": {
"discovery": "UNKNOWN"
},
"title": "Node.js is vulnerable to a per-host mTLS authorization bypass via a CA-only SNI context failing open to the default CA",
"x_generator": {
"engine": "nodejs-private/security-release publish-cves"
}
}
},
"cveMetadata": {
"assignerOrgId": "ce714d77-add3-4f53-aff5-83d477b104bb",
"assignerShortName": "openjs",
"cveId": "CVE-2026-123867",
"datePublished": "2026-11-11T18:23:12.991Z",
"dateReserved": "2026-11-06T16:16:19.081Z",
"dateUpdated": "2026-11-12T14:34:33.702Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Vulnerability timeline
Sightings and recorded dates, grouped by day · UTC
How durations are calculated
Following the VTEM framework (Black Hat USA 2015), time to patch starts when the vendor or a coordinator was informed, total time to patch at discovery, and disclosure to patch at public disclosure; vendor response time runs from the report to its acknowledgement. Time to exploit and time unpatched start at the earliest discovery or report, falling back to public disclosure. Unpatched time ends at the first recorded patch, or the calculation time when no patch is recorded. Exploitation to patch shows the interval between those two events; a published proof of concept is a public exploit, not exploitation.
Each result shows its source dates. A negative interval means the end event came first; when date-only inputs leave the order open, the result says so. Date-only inputs are approximate. The earliest evidence wins: KEV report dates and sightings are labelled as such. Records describing another vulnerability are listed but never calculated from, and a PoC alone does not establish exploitation. Missing patch evidence does not prove that no patch exists. Filters below change the event list only.
Loading timeline…
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.