CVE-2025-23083
High · 7.7CVSS
7.7
EPSS
0.4%
Published
Jan 22, 2025
CISA due date
—
Cloudanix analysis
A security setting meant to limit what code can do in Node.js applications can be worked around, letting attackers run actions they should not be allowed to perform.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Low
- Impact
- Full Compromise
- Component
- Application
- Class
- Authorization Bypass
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The flaw permits bypassing the Node.js Permission Model by using diagnostics_channel to intercept worker thread creation events, including internal workers, allowing retrieval of worker instances and reuse of their constructors for unauthorized operations.
Why it matters to the business
Organizations running Node.js applications with the permission flag enabled face risk of unauthorized code execution and access to restricted resources, potentially resulting in data exposure or system compromise without user interaction.
How an attack unfolds
An attacker leverages diagnostics_channel to hook worker creation events, obtains references to internal worker instances, extracts their constructors, and reinstantiates them to perform actions outside the intended permission boundaries.
How to fix it
Upgrade affected Node.js versions (v20, v22, v23) to patched releases that restrict diagnostics_channel access to internal workers when the permission model is active.
How to confirm the fix worked
Confirm Node.js versions are updated beyond vulnerable releases, then test that diagnostics_channel hooks cannot access or reinstantiate internal worker constructors under --permission.
Typical attack path
- Register a diagnostics_channel hook for worker thread creation
- Intercept event exposing internal worker instance
- Capture and store the worker constructor reference
- Reinstate the constructor to spawn malicious workers
- Execute operations bypassing permission model restrictions
How to detect it
Review application logs for unexpected worker thread creation events tied to diagnostics_channel, inspect process activity for unauthorized worker instantiation attempts, and search runtime traces for constructor reuse patterns.
What your security team should do
- Prioritize patching Node.js installations using the permission model
- Audit applications for diagnostics_channel usage and restrict it where possible
- Monitor for unusual worker thread activity in permission-enforced environments
- Review EPSS and exploit maturity trends for changes in risk
The record
With the aid of the diagnostics_channel utility, an event can be hooked into whenever a worker thread is created. This is not limited only to workers but also exposes internal workers, where an instance of them can be fetched, and its constructor can be grabbed and reinstated for malicious usage. This vulnerability affects Permission Model users (--permission) on Node.js v20, v22, and v23.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| AlmaLinux:8 | nodejs | 0 | 1:20.18.2-1.module_el8.10.0+3958+472a6467 |
| AlmaLinux:8 | nodejs | 0 | 1:22.13.1-1.module_el8.10.0+3961+6a788e57 |
| AlmaLinux:8 | nodejs-devel | 0 | 1:20.18.2-1.module_el8.10.0+3958+472a6467 |
| AlmaLinux:8 | nodejs-devel | 0 | 1:22.13.1-1.module_el8.10.0+3961+6a788e57 |
| AlmaLinux:8 | nodejs-docs | 0 | 1:20.18.2-1.module_el8.10.0+3958+472a6467 |
| AlmaLinux:8 | nodejs-docs | 0 | 1:22.13.1-1.module_el8.10.0+3961+6a788e57 |
| AlmaLinux:8 | nodejs-full-i18n | 0 | 1:20.18.2-1.module_el8.10.0+3958+472a6467 |
| AlmaLinux:8 | nodejs-full-i18n | 0 | 1:22.13.1-1.module_el8.10.0+3961+6a788e57 |
| AlmaLinux:8 | nodejs-libs | 0 | 1:22.13.1-1.module_el8.10.0+3961+6a788e57 |
| AlmaLinux:8 | nodejs-nodemon | 0 | 3.0.1-1.module_el8.8.0+3613+1ed8c91d |
| AlmaLinux:8 | nodejs-packaging | 0 | 2021.06-4.module_el8.7.0+3343+ea2b7901 |
| AlmaLinux:8 | nodejs-packaging | 0 | 2021.06-4.module_el8.10.0+3961+6a788e57 |
| AlmaLinux:8 | nodejs-packaging-bundler | 0 | 2021.06-4.module_el8.10.0+3958+472a6467 |
| AlmaLinux:8 | nodejs-packaging-bundler | 0 | 2021.06-4.module_el8.10.0+3961+6a788e57 |
| AlmaLinux:8 | npm | 0 | 1:10.8.2-1.20.18.2.1.module_el8.10.0+3958+472a6467 |
| AlmaLinux:8 | npm | 0 | 1:10.9.2-1.22.13.1.1.module_el8.10.0+3961+6a788e57 |
| AlmaLinux:8 | v8-12.4-devel | 0 | 3:12.4.254.21-1.22.13.1.1.module_el8.10.0+3961+6a788e57 |
| AlmaLinux:9 | nodejs | 0 | 1:20.18.2-1.module_el9.5.0+137+381f3eaf |
| AlmaLinux:9 | nodejs | 0 | 1:22.13.1-1.module_el9.5.0+139+09296491 |
| AlmaLinux:9 | nodejs-devel | 0 | 1:20.18.2-1.module_el9.5.0+137+381f3eaf |
| AlmaLinux:9 | nodejs-devel | 0 | 1:22.13.1-1.module_el9.5.0+139+09296491 |
| AlmaLinux:9 | nodejs-docs | 0 | 1:20.18.2-1.module_el9.5.0+137+381f3eaf |
| AlmaLinux:9 | nodejs-docs | 0 | 1:22.13.1-1.module_el9.5.0+139+09296491 |
| AlmaLinux:9 | nodejs-full-i18n | 0 | 1:20.18.2-1.module_el9.5.0+137+381f3eaf |
| AlmaLinux:9 | nodejs-full-i18n | 0 | 1:22.13.1-1.module_el9.5.0+139+09296491 |
| AlmaLinux:9 | nodejs-libs | 0 | 1:22.13.1-1.module_el9.5.0+139+09296491 |
| AlmaLinux:9 | nodejs-nodemon | 0 | 3.0.1-1.module_el9.2.0+36+853e48f5 |
| AlmaLinux:9 | nodejs-nodemon | 0 | 3.0.1-1.module_el9.5.0+136+92f38f3c |
| AlmaLinux:9 | nodejs-packaging | 0 | 2021.06-4.module_el9.3.0+88+29afeaa2 |
| AlmaLinux:9 | nodejs-packaging | 0 | 2021.06-4.module_el9.5.0+136+92f38f3c |
| AlmaLinux:9 | nodejs-packaging-bundler | 0 | 2021.06-4.module_el9.5.0+124+df88fe49 |
| AlmaLinux:9 | nodejs-packaging-bundler | 0 | 2021.06-4.module_el9.5.0+139+09296491 |
| AlmaLinux:9 | npm | 0 | 1:10.8.2-1.20.18.2.1.module_el9.5.0+137+381f3eaf |
| AlmaLinux:9 | npm | 0 | 1:10.9.2-1.22.13.1.1.module_el9.5.0+139+09296491 |
| AlmaLinux:9 | v8-12.4-devel | 0 | 3:12.4.254.21-1.22.13.1.1.module_el9.5.0+139+09296491 |
| Alpine:v3.21 | nodejs | 0 | 22.13.1-r0 |
| Alpine:v3.22 | nodejs | 0 | 22.13.1-r0 |
| Bitnami | node | 19.0.0 | 20.18.2 |
| Bitnami | node-min | 19.0.0 | 20.18.2 |
| Chainguard | nodejs-20 | 0 | 20.18.2-r0 |
| Chainguard | nodejs-20-doc | 0 | 20.18.2-r0 |
| Chainguard | nodejs-21 | 0 | 21.7.3-r12 |
| Chainguard | nodejs-21-doc | 0 | 21.7.3-r12 |
| Chainguard | nodejs-22 | 0 | 22.13.1-r0 |
| Chainguard | nodejs-22-doc | 0 | 22.13.1-r0 |
| Chainguard | nodejs-23 | 0 | 23.6.1-r0 |
| Chainguard | nodejs-23-doc | 0 | 23.6.1-r0 |
| Debian:11 | nodejs | 0 | No fix |
| Debian:12 | nodejs | 0 | No fix |
| Debian:13 | nodejs | 0 | No fix |
| Debian:14 | nodejs | 0 | 20.18.2+dfsg-1 |
| Mageia:9 | nodejs | 0 | 22.13.1-2.mga9 |
| Rocky Linux:8 | nodejs | 0 | 1:20.18.2-1.module+el8.10.0+1932+2f13f218 |
| Rocky Linux:8 | nodejs | 0 | 1:22.13.1-1.module+el8.10.0+1935+d3cbe60f |
| Rocky Linux:8 | nodejs-nodemon | 0 | 0:3.0.1-1.module+el8.10.0+1666+930e28e8 |
| Rocky Linux:8 | nodejs-packaging | 0 | 0:2021.06-4.module+el8.10.0+1667+4a788d89 |
| Rocky Linux:9 | nodejs-nodemon | 0 | 0:3.0.1-1.module+el9.4.0+25495+f51dca35 |
| Rocky Linux:9 | nodejs-nodemon | 0 | 0:3.0.1-1.module+el9.6.0+32322+a8b1fd01 |
| Rocky Linux:9 | nodejs-packaging | 0 | 0:2021.06-4.module+el9.4.0+25495+f51dca35 |
| Rocky Linux:9 | nodejs-packaging | 0 | 0:2021.06-4.module+el9.5.0+31770+0da7192d |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS | nodejs20 | 0 | 20.18.2-150500.11.18.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS | nodejs20 | 0 | 20.18.2-150500.11.18.1 |
| SUSE:Linux Enterprise Module for Web and Scripting 15 SP6 | nodejs20 | 0 | 20.18.2-150600.3.9.1 |
| SUSE:Linux Enterprise Module for Web and Scripting 15 SP6 | nodejs22 | 0 | 22.13.1-150600.13.6.1 |
| SUSE:Linux Enterprise Server 15 SP5-LTSS | nodejs20 | 0 | 20.18.2-150500.11.18.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP5 | nodejs20 | 0 | 20.18.2-150500.11.18.1 |
| Ubuntu:20.04:LTS | nodejs | 0 | No fix |
| Ubuntu:22.04:LTS | nodejs | 0 | No fix |
| Ubuntu:24.04:LTS | nodejs | 0 | No fix |
| Ubuntu:24.10 | nodejs | 0 | No fix |
| Ubuntu:25.04 | nodejs | 0 | No fix |
| Ubuntu:Pro:14.04:LTS | nodejs | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | nodejs | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | nodejs | 0 | No fix |
| Wolfi | nodejs-20 | 0 | 20.18.2-r0 |
| Wolfi | nodejs-20-doc | 0 | 20.18.2-r0 |
| Wolfi | nodejs-21 | 0 | 21.7.3-r12 |
| Wolfi | nodejs-21-doc | 0 | 21.7.3-r12 |
| Wolfi | nodejs-22 | 0 | 22.13.1-r0 |
| Wolfi | nodejs-22-doc | 0 | 22.13.1-r0 |
| Wolfi | nodejs-23 | 0 | 23.6.1-r0 |
| Wolfi | nodejs-23-doc | 0 | 23.6.1-r0 |
| openSUSE:Leap 15.6 | nodejs20 | 0 | 20.18.2-150600.3.9.1 |
| openSUSE:Leap 15.6 | nodejs22 | 0 | 22.13.1-150600.13.6.1 |
| openSUSE:Tumbleweed | nodejs22 | 0 | 22.13.0-1.1 |
| openSUSE:Tumbleweed | nodejs24 | 0 | 24.11.1-2.1 |
| openSUSE:Tumbleweed | nodejs26 | 0 | 26.3.1-1.1 |
Related vulnerabilities
- CVE-2025-6965 There exists a vulnerability in SQLite versions before 3.50.2 where the number of… Also affects nodejs
- CVE-2025-23085 A memory leak could occur when a remote peer abruptly closes the socket without sending a… Also affects nodejs
- CVE-2025-22150 Undici is an HTTP/1.1 client. Also affects nodejs
- CVE-2023-39333 Maliciously crafted export names in an imported WebAssembly module can inject JavaScript… Also affects nodejs
- CVE-2023-46809 Node.js versions which bundle an unpatched version of OpenSSL or run against a… Also affects nodejs
- CVE-2024-36137 A vulnerability has been identified in Node.js, affecting users of the experimental… Also affects nodejs
- CVE-2024-22018 A vulnerability has been identified in Node.js, affecting users of the experimental… Also affects nodejs
- CVE-2024-22020 A security flaw in Node.js allows a bypass of network import restrictions. Also affects nodejs