GitHub Advisoryadvisory · npm

GHSA-3ch2-jxxc-v4xf @akoskm/create-mcp-server-stdio is vulnerable to MCP Server Command Injection through `exec` API

CRITICAL Published 2025-09-08 Modified 2025-09-10 Official page ↗
Aliases
CVE-2025-54994
Ecosystem
npm
Packages
@akoskm/create-mcp-server-stdio
Severity
Critical
CVSS vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Weaknesses
CWE-77, CWE-78
Reviewed
2025-09-08

Affected packages

• npm @akoskm/create-mcp-server-stdio: < 0.0.13 → fixed in 0.0.13

Description

Command Injection in MCP Server The MCP Server at https://github.com/akoskm/create-mcp-server-stdio is written in a way that is vulnerable to command injection vulnerability attacks as part of some of its MCP Server tool definition and implementation. Vulnerable tool The MCP Server exposes the tool `which-app-on-port` which relies on Node.js child process API `exec` which is an unsafe and vulnerable API if concatenated with untrusted user input. Vulnerable line of code: https://github.com/akoskm/create-mcp-server-stdio/blob/main/src/index.ts#L24-L40 ```js server.tool("which-app-on-port", { port: z.number() }, async ({ port }) => { const result = await new Promise((resolve, reject) => { exec(`lsof -t -i tcp:${port}`, (error, pidStdout) => { if (error) { reject(error); return; } const pid = pidStdout.trim(); exec(`ps -p ${pid} -o comm=`, (error, stdout) => { if (error) { reject(error); return; } resolve({ command: stdout.trim(), pid }); }); }); }); ``` Exploitation When LLMs are tricked through prompt injection (and other techniques and attack vectors) to call the tool with input that uses special shell characters such as `; rm -rf /tmp;#` (be careful actually executing this payload) and other payload variations, the full command-line text will be interepted by the shell and result in other commands except of `ps` executing on the host running the MCP Server. Reference example from prior security research on this topic: Impact User initiated and remote command injection on a running MCP Server. Recommendation • Don't use `exec`. Use `execFile` instead, which pins the command and provides the arguments as array elements. • If the user input is not a command-line flag, use the `--` notation to terminate command and command-line flag, and indicate that the text after the `--` double dash notation is benign value. References and Prior work 1. Exploiting MCP Servers Vulnerable to Command Injection 2. Liran's Node.js Secure Coding: Defending Against Command Injection Vulnerabilities Disclosed by Liran Tal

Related

Alias · CVE (1)

  • CVE-2025-54994 @akoskm/create-mcp-server-stdio is an MCP server starter kit that uses the StdioServerTransport. vulnerability

Weakness · CWE (2)

  • CWE-77 Improper Neutralization of Special Elements used in a Command weakness
  • CWE-78 Improper Neutralization of Special Elements used in an OS Command weakness

References