Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Network-reachable endpoint requires low-privilege authentication; trivial shell injection yields complete host-level command execution with no scope change.
Primary rating from Vendor (TuranSec).
CVSS VectorVendor: TuranSec
Lifecycle Timeline
2DescriptionCVE.org
An OS command injection vulnerability in 4xmen/pm2panel (all versions) allows an authenticated remote attacker to execute arbitrary system commands on the host. The pm2panel.js handler at line 188 passes the unsanitized req.query.id parameter directly to exec('pm2 restart ' + id) without input validation or shell escaping, enabling command chaining via semicolons or other shell metacharacters.
AnalysisAI
OS command injection in 4xmen/pm2panel (all versions) allows an authenticated remote attacker to execute arbitrary system commands on the underlying host with the privileges of the web server process. The root cause is unsanitized user input concatenated directly into a Node.js exec() call in pm2panel.js at line 188, where the query parameter 'id' is appended to 'pm2 restart' without any shell escaping or allowlisting. No public exploit code has been identified at time of analysis, and this CVE is not listed in the CISA KEV catalog, but the attack is trivially reproducible given the straightforward nature of the injection point.
Technical ContextAI
pm2panel is a web-based management interface for PM2, the popular Node.js process manager, maintained by the GitHub project 4xmen/pm2panel. The vulnerability resides in the HTTP request handler in pm2panel.js at line 188, where the application constructs a shell command by string-concatenating an unvalidated user-supplied query parameter: exec('pm2 restart ' + req.query.id). This pattern is a textbook CWE-78 (Improper Neutralization of Special Elements used in an OS Command) flaw. Because Node.js's child_process.exec() passes the command string to the system shell (e.g., /bin/sh), an attacker can inject shell metacharacters such as semicolons, pipes, backticks, or $() subshells to chain additional commands. The affected CPE is cpe:2.3:a:4xmen:pm2panel:*:*:*:*:*:*:*:*, confirming all published versions are affected with no version bound from the upstream project.
RemediationAI
No vendor-released patch has been identified at time of analysis - the fix version is not confirmed by any upstream release or advisory. Organizations running pm2panel should immediately restrict access to the interface to trusted internal networks or VPN-only segments, reducing the exploitable attack surface. As a direct code-level compensating control, the exec() call in pm2panel.js line 188 should be replaced with a child_process.execFile() or spawn() call using an allowlist of valid numeric or string process IDs, preventing shell interpretation entirely. Alternatively, input validation rejecting any characters outside [a-zA-Z0-9_-] on the 'id' parameter would block the known injection vectors, though this is less robust than eliminating shell interpretation. If pm2panel cannot be immediately patched, consider replacing it with a maintained alternative PM2 management UI. Monitor https://github.com/4xmen/pm2panel for upstream commits that address line 188.
Same weakness CWE-78 – OS Command Injection
View allSame technique Command Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-55233
GHSA-m6fq-fq43-f9v8