CVE-2024-22017
High · 7.3CVSS
7.3
EPSS
0.9%
Published
Mar 19, 2024
CISA due date
—
Cloudanix analysis
A flaw lets programs keep special access rights even after trying to give them up, potentially allowing unauthorized actions on affected systems.
- Exploitation
- Local Privilege
- Attacker needs
- High Privilege
- Complexity
- Low
- Impact
- Privilege Gain
- Component
- Library
- Class
- Privilege Escalation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
setuid() does not affect libuv's internal io_uring operations if initialized before the call to setuid(). This allows the process to perform privileged operations despite presumably having dropped such privileges through a call to setuid().
Why it matters to the business
Attackers may retain elevated privileges after a process attempts to drop them, enabling unauthorized privileged operations on systems using the affected packages; high ecosystem prevalence increases exposure across many deployments with no ransomware association or active KEV listing.
How an attack unfolds
An attacker with initial high privileges initializes io_uring operations prior to a setuid() call that drops privileges, allowing subsequent privileged io_uring actions to bypass the intended privilege reduction on affected Node.js versions.
How to fix it
Upgrade all affected packages to the listed fixed versions: openblas-Rblas (AlmaLinux:8), openblas-devel (AlmaLinux:8), openblas-openmp (AlmaLinux:8), openblas-openmp64 (AlmaLinux:8), openblas-openmp64_ (AlmaLinux:8), openblas-serial64 (AlmaLinux:8), openblas-serial64_ (AlmaLinux:8), openblas-static (AlmaLinux:8), openblas-threads64 (AlmaLinux:8), openblas-threads64_ (AlmaLinux:8), openblas (AlmaLinux:8), and openblas-threads (AlmaLinux:8) each fixed in 0.3.15-3.el8. Apply updates immediately given the 939 days since publication.
How to confirm the fix worked
Confirm package versions match or exceed the fixed releases listed for each AlmaLinux 8 openblas variant and verify setuid behavior no longer permits privileged io_uring operations post-upgrade through targeted testing.
Typical attack path
- Obtain initial privileged access to the target process
- Initialize libuv io_uring before any setuid() call
- Invoke setuid() to drop privileges
- Perform privileged operations via the pre-initialized io_uring
How to detect it
Review process initialization logs and privilege transition events for io_uring setup occurring before setuid calls; no specific threat actor context available.
What your security team should do
- Prioritize immediate upgrade of all listed openblas packages to 0.3.15-3.el8 across AlmaLinux 8 environments
- Audit processes using setuid() combined with io_uring for privilege handling
- Monitor EPSS trend (stable at 0.0089) and re-evaluate if exploit maturity changes
The record
setuid() does not affect libuv's internal io_uring operations if initialized before the call to setuid(). This allows the process to perform privileged operations despite presumably having dropped such privileges through a call to setuid(). This vulnerability affects all users using version greater or equal than Node.js 18.18.0, Node.js 20.4.0 and Node.js 21.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| AlmaLinux:8 | nodejs | 0 | 1:20.11.1-1.module_el8.9.0+3775+d8460d35 |
| AlmaLinux:8 | nodejs-devel | 0 | 1:20.11.1-1.module_el8.9.0+3775+d8460d35 |
| AlmaLinux:8 | nodejs-docs | 0 | 1:20.11.1-1.module_el8.9.0+3775+d8460d35 |
| AlmaLinux:8 | nodejs-full-i18n | 0 | 1:20.11.1-1.module_el8.9.0+3775+d8460d35 |
| AlmaLinux:8 | nodejs-nodemon | 0 | 3.0.1-1.module_el8.9.0+3731+490e3ce5 |
| AlmaLinux:8 | nodejs-packaging | 0 | 2021.06-4.module_el8.9.0+3684+11b9e959 |
| AlmaLinux:8 | nodejs-packaging-bundler | 0 | 2021.06-4.module_el8.9.0+3684+11b9e959 |
| AlmaLinux:8 | npm | 0 | 1:10.2.4-1.20.11.1.1.module_el8.9.0+3775+d8460d35 |
| AlmaLinux:9 | nodejs | 0 | 1:20.11.1-1.module_el9.3.0+88+29afeaa2 |
| AlmaLinux:9 | nodejs-devel | 0 | 1:20.11.1-1.module_el9.3.0+88+29afeaa2 |
| AlmaLinux:9 | nodejs-docs | 0 | 1:20.11.1-1.module_el9.3.0+88+29afeaa2 |
| AlmaLinux:9 | nodejs-full-i18n | 0 | 1:20.11.1-1.module_el9.3.0+88+29afeaa2 |
| AlmaLinux:9 | nodejs-nodemon | 0 | 3.0.1-1.module_el9.3.0+47+c33bc288 |
| AlmaLinux:9 | nodejs-packaging | 0 | 2021.06-4.module_el9.3.0+48+1cf146a1 |
| AlmaLinux:9 | nodejs-packaging-bundler | 0 | 2021.06-4.module_el9.3.0+48+1cf146a1 |
| AlmaLinux:9 | npm | 0 | 1:10.2.4-1.20.11.1.1.module_el9.3.0+88+29afeaa2 |
| Bitnami | node | 20.0.0 | 20.11.1 |
| Bitnami | node-min | 20.0.0 | 20.11.1 |
| Red Hat:enterprise_linux:8::appstream | nodejs | 0 | 1:20.11.1-1.module+el8.9.0+21380+12032667 |
| Red Hat:enterprise_linux:8::appstream | nodejs-debuginfo | 0 | 1:20.11.1-1.module+el8.9.0+21380+12032667 |
| Red Hat:enterprise_linux:8::appstream | nodejs-debugsource | 0 | 1:20.11.1-1.module+el8.9.0+21380+12032667 |
| Red Hat:enterprise_linux:8::appstream | nodejs-devel | 0 | 1:20.11.1-1.module+el8.9.0+21380+12032667 |
| Red Hat:enterprise_linux:8::appstream | nodejs-docs | 0 | 1:20.11.1-1.module+el8.9.0+21380+12032667 |
| Red Hat:enterprise_linux:8::appstream | nodejs-full-i18n | 0 | 1:20.11.1-1.module+el8.9.0+21380+12032667 |
| Red Hat:enterprise_linux:8::appstream | nodejs-nodemon | 0 | 0:3.0.1-1.module+el8.9.0+20473+c4e3d824 |
| Red Hat:enterprise_linux:8::appstream | nodejs-packaging | 0 | 0:2021.06-4.module+el8.9.0+19519+e25b965a |
| Red Hat:enterprise_linux:8::appstream | nodejs-packaging-bundler | 0 | 0:2021.06-4.module+el8.9.0+19519+e25b965a |
| Red Hat:enterprise_linux:8::appstream | npm | 0 | 1:10.2.4-1.20.11.1.1.module+el8.9.0+21380+12032667 |
| Red Hat:enterprise_linux:9::appstream | nodejs | 0 | 1:20.11.1-1.module+el9.3.0+21385+bac43d5a |
| Red Hat:enterprise_linux:9::appstream | nodejs-debuginfo | 0 | 1:20.11.1-1.module+el9.3.0+21385+bac43d5a |
| Red Hat:enterprise_linux:9::appstream | nodejs-debugsource | 0 | 1:20.11.1-1.module+el9.3.0+21385+bac43d5a |
| Red Hat:enterprise_linux:9::appstream | nodejs-devel | 0 | 1:20.11.1-1.module+el9.3.0+21385+bac43d5a |
| Red Hat:enterprise_linux:9::appstream | nodejs-docs | 0 | 1:20.11.1-1.module+el9.3.0+21385+bac43d5a |
| Red Hat:enterprise_linux:9::appstream | nodejs-full-i18n | 0 | 1:20.11.1-1.module+el9.3.0+21385+bac43d5a |
| Red Hat:enterprise_linux:9::appstream | nodejs-nodemon | 0 | 0:3.0.1-1.module+el9.3.0.z+20478+84a9f781 |
| Red Hat:enterprise_linux:9::appstream | nodejs-packaging | 0 | 0:2021.06-4.module+el9.3.0+19518+63aad52d |
| Red Hat:enterprise_linux:9::appstream | nodejs-packaging-bundler | 0 | 0:2021.06-4.module+el9.3.0+19518+63aad52d |
| Red Hat:enterprise_linux:9::appstream | npm | 0 | 1:10.2.4-1.20.11.1.1.module+el9.3.0+21385+bac43d5a |
| Rocky Linux:8 | nodejs | 0 | 1:20.11.1-1.module+el8.9.0+1776+addd4aec |
| Rocky Linux:8 | nodejs-nodemon | 0 | 0:3.0.1-1.module+el8.8.0+1459+02651ab6 |
| Rocky Linux:8 | nodejs-packaging | 0 | 0:2021.06-4.module+el8.7.0+1072+5b168780 |
| Rocky Linux:9 | nodejs-nodemon | 0 | 0:3.0.1-1.module+el9.2.0+15226+de336927 |
| 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.2.0+15226+de336927 |
| Rocky Linux:9 | nodejs-packaging | 0 | 0:2021.06-4.module+el9.5.0+31770+0da7192d |
| SUSE:Linux Enterprise Module for Web and Scripting 15 SP5 | nodejs20 | 0 | 20.11.1-150500.11.6.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 | 20.18.1+dfsg-1ubuntu2 |
| 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 |
| openSUSE:Leap 15.5 | nodejs20 | 0 | 20.11.1-150500.11.6.1 |
| openSUSE:Tumbleweed | nodejs-electron | 0 | 29.4.0-1.1 |
| openSUSE:Tumbleweed | nodejs20 | 0 | 20.11.1-1.1 |
| openSUSE:Tumbleweed | nodejs21 | 0 | 21.6.2-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-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
- 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