CVE-2023-23919
High · 7.5CVSS
7.5
EPSS
2.2%
Published
Feb 23, 2023
CISA due date
—
Cloudanix analysis
A bug in the way Node.js handles certain web requests could let attackers slip extra commands past security checks and reach information they should not access.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Data Exposure
- Component
- Other
- Class
- Other
- Remediation
- Other
- Effort
- Other
- Patch risk
- Other
What it actually does
The flaw permits HTTP request smuggling through incorrect parsing of multi-line Transfer-Encoding headers in the Node.js HTTP parser, allowing a single connection to carry multiple requests that bypass intended boundaries.
Why it matters to the business
Attackers can bypass authentication, access restricted resources, poison caches, or intercept traffic, increasing breach risk and operational disruption for any services using affected Node.js versions; low EPSS and no KEV status indicate limited observed exploitation but the public exploit availability still requires prompt action.
How an attack unfolds
An attacker sends a crafted HTTP request containing a multi-line Transfer-Encoding header that the vulnerable parser misinterprets, smuggling a second hidden request that reaches backend systems or bypasses security controls.
How to fix it
Upgrade Node.js to a build containing commit 7bc2cf7fa9a2016fadb27e042968a69297bd975e or later; apply the fix across all affected deployments and verify the update with version checks.
How to confirm the fix worked
Confirm the installed Node.js binary reports a version built after commit 7bc2cf7fa9a2016fadb27e042968a69297bd975e; re-test with known smuggling request patterns to ensure the parser now rejects them correctly.
Typical attack path
- Scan for publicly reachable Node.js services running vulnerable versions
- Craft an HTTP request with a multi-line Transfer-Encoding header designed to desynchronize the parser
- Smuggle a second request that evades front-end security checks or reaches protected backend endpoints
- Leverage the smuggled request to access unauthorized data or perform further attacks
How to detect it
Inspect HTTP access logs and proxy logs for requests containing Transfer-Encoding headers with embedded newlines or unusual formatting; correlate with backend access that lacks corresponding front-end entries.
- Transfer-Encoding.*\r?\n
- smuggled request patterns in access logs without matching frontend entries
What your security team should do
- Prioritize upgrade to the fixed commit in all production Node.js environments within the next patching cycle
- Review any front-end proxies or load balancers that may also be affected by similar parsing issues
- Monitor EPSS trend and exploit availability for any change in observed activity
The record
A cryptographic vulnerability exists in Node.js <19.2.0, <18.14.1, <16.19.1, <14.21.3 that in some cases did does not clear the OpenSSL error stack after operations that may set it. This may lead to false positive errors during subsequent cryptographic operations that happen to be on the same thread. This in turn could be used to cause a denial of service.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| AlmaLinux:8 | nodejs | 0 | 1:16.19.1-1.module_el8.7.0+3496+a59a3324 |
| AlmaLinux:8 | nodejs-devel | 0 | 1:16.19.1-1.module_el8.7.0+3496+a59a3324 |
| AlmaLinux:8 | nodejs-docs | 0 | 1:16.19.1-1.module_el8.7.0+3496+a59a3324 |
| AlmaLinux:8 | nodejs-full-i18n | 0 | 1:16.19.1-1.module_el8.7.0+3496+a59a3324 |
| AlmaLinux:8 | nodejs-nodemon | 0 | 2.0.20-3.module_el8.7.0+3496+a59a3324 |
| AlmaLinux:8 | nodejs-packaging | 0 | 25-1.module_el8.5.0+2605+45d748af |
| AlmaLinux:8 | npm | 0 | 1:8.19.3-1.16.19.1.1.module_el8.7.0+3496+a59a3324 |
| AlmaLinux:9 | nodejs | 0 | 1:18.14.2-2.module_el9.2.0+29+de583a0b |
| AlmaLinux:9 | nodejs-devel | 0 | 1:18.14.2-2.module_el9.2.0+29+de583a0b |
| AlmaLinux:9 | nodejs-docs | 0 | 1:18.14.2-2.module_el9.2.0+29+de583a0b |
| AlmaLinux:9 | nodejs-full-i18n | 0 | 1:18.14.2-2.module_el9.2.0+29+de583a0b |
| AlmaLinux:9 | nodejs-nodemon | 0 | 2.0.20-2.module_el9.2.0+29+de583a0b |
| AlmaLinux:9 | nodejs-packaging | 0 | 2021.06-4.module_el9.1.0+13+d9a595ea |
| AlmaLinux:9 | nodejs-packaging-bundler | 0 | 2021.06-4.module_el9.1.0+13+d9a595ea |
| AlmaLinux:9 | npm | 0 | 1:9.5.0-1.18.14.2.2.module_el9.2.0+29+de583a0b |
| Alpine:v3.15 | nodejs | 0 | 16.19.1-r0 |
| Alpine:v3.16 | nodejs | 0 | 16.19.1-r0 |
| Alpine:v3.17 | nodejs | 0 | 18.14.1-r0 |
| Alpine:v3.18 | nodejs | 0 | 18.14.1-r0 |
| Alpine:v3.19 | nodejs | 0 | 18.14.1-r0 |
| Alpine:v3.20 | nodejs | 0 | 18.14.1-r0 |
| Alpine:v3.21 | nodejs | 0 | 18.14.1-r0 |
| Alpine:v3.22 | nodejs | 0 | 18.14.1-r0 |
| Bitnami | node | 14.0.0 | 14.14.0 |
| Bitnami | node | 14.0.0 | 14.21.3 |
| Bitnami | node-min | 14.0.0 | 14.14.0 |
| Bitnami | node-min | 14.0.0 | 14.21.3 |
| Debian:12 | nodejs | 0 | 18.19.0+dfsg-6~deb12u1 |
| Debian:13 | nodejs | 0 | 18.13.0+dfsg1-1.1 |
| Red Hat:enterprise_linux:8::appstream | nodejs | 0 | 1:16.19.1-1.module+el8.7.0+18373+704f5cef |
| Red Hat:enterprise_linux:8::appstream | nodejs | 0 | 1:18.14.2-2.module+el8.7.0+18445+9493b6ea |
| Red Hat:enterprise_linux:8::appstream | nodejs-debuginfo | 0 | 1:16.19.1-1.module+el8.7.0+18373+704f5cef |
| Red Hat:enterprise_linux:8::appstream | nodejs-debuginfo | 0 | 1:18.14.2-2.module+el8.7.0+18445+9493b6ea |
| Red Hat:enterprise_linux:8::appstream | nodejs-debugsource | 0 | 1:16.19.1-1.module+el8.7.0+18373+704f5cef |
| Red Hat:enterprise_linux:8::appstream | nodejs-debugsource | 0 | 1:18.14.2-2.module+el8.7.0+18445+9493b6ea |
| Red Hat:enterprise_linux:8::appstream | nodejs-devel | 0 | 1:16.19.1-1.module+el8.7.0+18373+704f5cef |
| Red Hat:enterprise_linux:8::appstream | nodejs-devel | 0 | 1:18.14.2-2.module+el8.7.0+18445+9493b6ea |
| Red Hat:enterprise_linux:8::appstream | nodejs-docs | 0 | 1:16.19.1-1.module+el8.7.0+18373+704f5cef |
| Red Hat:enterprise_linux:8::appstream | nodejs-docs | 0 | 1:18.14.2-2.module+el8.7.0+18445+9493b6ea |
| Red Hat:enterprise_linux:8::appstream | nodejs-full-i18n | 0 | 1:16.19.1-1.module+el8.7.0+18373+704f5cef |
| Red Hat:enterprise_linux:8::appstream | nodejs-full-i18n | 0 | 1:18.14.2-2.module+el8.7.0+18445+9493b6ea |
| Red Hat:enterprise_linux:8::appstream | nodejs-nodemon | 0 | 0:2.0.20-3.module+el8.7.0+18373+704f5cef |
| Red Hat:enterprise_linux:8::appstream | nodejs-nodemon | 0 | 0:2.0.20-2.module+el8.7.0+18445+9493b6ea |
| Red Hat:enterprise_linux:8::appstream | nodejs-packaging | 0 | 0:25-1.module+el8.5.0+10992+fac5fe06 |
| Red Hat:enterprise_linux:8::appstream | nodejs-packaging | 0 | 0:2021.06-4.module+el8.7.0+15582+19c314fa |
| Red Hat:enterprise_linux:8::appstream | nodejs-packaging-bundler | 0 | 0:2021.06-4.module+el8.7.0+15582+19c314fa |
| Red Hat:enterprise_linux:8::appstream | npm | 0 | 1:8.19.3-1.16.19.1.1.module+el8.7.0+18373+704f5cef |
| Red Hat:enterprise_linux:8::appstream | npm | 0 | 1:9.5.0-1.18.14.2.2.module+el8.7.0+18445+9493b6ea |
| Red Hat:enterprise_linux:9::appstream | nodejs | 0 | 1:18.14.2-2.module+el9.2.0.z+18497+a402347c |
| Red Hat:enterprise_linux:9::appstream | nodejs-debuginfo | 0 | 1:18.14.2-2.module+el9.2.0.z+18497+a402347c |
| Red Hat:enterprise_linux:9::appstream | nodejs-debugsource | 0 | 1:18.14.2-2.module+el9.2.0.z+18497+a402347c |
| Red Hat:enterprise_linux:9::appstream | nodejs-devel | 0 | 1:18.14.2-2.module+el9.2.0.z+18497+a402347c |
| Red Hat:enterprise_linux:9::appstream | nodejs-docs | 0 | 1:18.14.2-2.module+el9.2.0.z+18497+a402347c |
| Red Hat:enterprise_linux:9::appstream | nodejs-full-i18n | 0 | 1:18.14.2-2.module+el9.2.0.z+18497+a402347c |
| Red Hat:enterprise_linux:9::appstream | nodejs-nodemon | 0 | 0:2.0.20-2.module+el9.2.0.z+18497+a402347c |
| Red Hat:enterprise_linux:9::appstream | nodejs-packaging | 0 | 0:2021.06-4.module+el9.1.0+15718+e52ec601 |
| Red Hat:enterprise_linux:9::appstream | nodejs-packaging-bundler | 0 | 0:2021.06-4.module+el9.1.0+15718+e52ec601 |
| Red Hat:enterprise_linux:9::appstream | npm | 0 | 1:9.5.0-1.18.14.2.2.module+el9.2.0.z+18497+a402347c |
| Rocky Linux:8 | nodejs | 0 | 1:16.19.1-1.module+el8.7.0+1178+d52dba78 |
| Rocky Linux:8 | nodejs-nodemon | 0 | 0:2.0.20-3.module+el8.7.0+1178+d52dba78 |
| Rocky Linux:8 | nodejs-packaging | 0 | 0:25-1.module+el8.6.0+1046+80feca58 |
| SUSE:Enterprise Storage 7.1 | nodejs16 | 0 | 16.19.1-150300.7.18.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP3-ESPOS | nodejs16 | 0 | 16.19.1-150300.7.18.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP3-LTSS | nodejs16 | 0 | 16.19.1-150300.7.18.1 |
| SUSE:Linux Enterprise Module for Web and Scripting 12 | nodejs16 | 0 | 16.19.1-8.24.1 |
| SUSE:Linux Enterprise Module for Web and Scripting 12 | nodejs18 | 0 | 18.14.2-8.6.2 |
| SUSE:Linux Enterprise Module for Web and Scripting 15 SP4 | nodejs16 | 0 | 16.19.1-150400.3.15.1 |
| SUSE:Linux Enterprise Module for Web and Scripting 15 SP4 | nodejs18 | 0 | 18.14.2-150400.9.6.2 |
| SUSE:Linux Enterprise Server 15 SP3-LTSS | nodejs16 | 0 | 16.19.1-150300.7.18.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP3 | nodejs16 | 0 | 16.19.1-150300.7.18.1 |
| SUSE:Manager Server 4.2 | nodejs16 | 0 | 16.19.1-150300.7.18.1 |
| Ubuntu:20.04:LTS | nodejs | 0 | 10.19.0~dfsg-3ubuntu1.5 |
| Ubuntu:22.04:LTS | nodejs | 0 | 12.22.9~dfsg-1ubuntu3.4 |
| Ubuntu:23.10 | nodejs | 0 | 18.13.0+dfsg1-1ubuntu2.1 |
| Ubuntu:24.04:LTS | nodejs | 0 | 18.19.1+dfsg-2ubuntu4 |
| openSUSE:Leap 15.4 | nodejs16 | 0 | 16.19.1-150400.3.15.1 |
| openSUSE:Leap 15.4 | nodejs18 | 0 | 18.14.2-150400.9.6.2 |
| openSUSE:Tumbleweed | nodejs18 | 0 | 18.14.2-1.1 |
| openSUSE:Tumbleweed | nodejs19 | 0 | 19.7.0-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-3277 An integer overflow can be triggered in SQLite’s `concat_ws()` function. Also affects nodejs
- CVE-2025-31498 c-ares is an asynchronous resolver library. 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-23083 With the aid of the diagnostics_channel utility, an event can be hooked into whenever 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