{"id":"CVE-2025-52573","aliases":["EUVD-2025-19229","GHSA-6f6r-m9pv-67jw"],"status":"published","title":"Command Injection in MCP Server ios-simulator-mcp","description":"iOS Simulator MCP Server (ios-simulator-mcp) is a Model Context Protocol (MCP) server for interacting with iOS simulators. Versions prior to 1.3.3 are written in a way that is vulnerable to command injection vulnerability attacks as part of some of its MCP Server tool definition and implementation. The MCP Server exposes the tool `ui_tap` which relies on Node.js child process API `exec` which is an unsafe and vulnerable API if concatenated with untrusted user input. LLM exposed user input for `duration`, `udid`, and `x` and `y` args can be replaced with shell meta-characters like `;` or `\u0026\u0026` or others to change the behavior from running the expected command `idb` to another command. 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;#` 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. Version 1.3.3 contains a patch for the issue.","severity":{"version":"3.1","score":6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:U/C:N/I:H/A:H","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-10","score":0.00656,"percentile":0.51746,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-78"],"published":"2025-06-26T14:08:56Z","modified":"2026-10-28T02:31:06Z","fixes":[{"ecosystem":"npm","package":"ios-simulator-mcp","fixed_in":["1.3.3"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"npm","package":"ios-simulator-mcp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.3.3"}]}]},{"source":"osv","ecosystem":"npm","package":"ios-simulator-mcp","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"1.3.3"}]}]}],"products":[{"vendor":"joshuayoes","product":"ios-simulator-mcp"}],"references":[{"url":"https://github.com/joshuayoes/ios-simulator-mcp/security/advisories/GHSA-6f6r-m9pv-67jw","tags":["x_refsource_CONFIRM","advisory","web"]},{"url":"https://github.com/joshuayoes/ios-simulator-mcp/commit/eb53a4f2cc8bbeb13e8d6d930f00167befcdb809","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/joshuayoes/ios-simulator-mcp/blob/main/src/index.ts#L166-L207","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/joshuayoes/ios-simulator-mcp/releases/tag/v1.3.3","tags":["x_refsource_MISC","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2025-52573","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-6f6r-m9pv-67jw"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2025/52xxx/CVE-2025-52573.json","tags":["advisory"]},{"url":"https://github.com/joshuayoes/ios-simulator-mcp","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2025-52573","title":"Command Injection in MCP Server ios-simulator-mcp","description":"iOS Simulator MCP Server (ios-simulator-mcp) is a Model Context Protocol (MCP) server for interacting with iOS simulators. Versions prior to 1.3.3 are written in a way that is vulnerable to command injection vulnerability attacks as part of some of its MCP Server tool definition and implementation. The MCP Server exposes the tool `ui_tap` which relies on Node.js child process API `exec` which is an unsafe and vulnerable API if concatenated with untrusted user input. LLM exposed user input for `duration`, `udid`, and `x` and `y` args can be replaced with shell meta-characters like `;` or `\u0026\u0026` or others to change the behavior from running the expected command `idb` to another command. 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;#` 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. Version 1.3.3 contains a patch for the issue.","status":"published","published":"2025-06-26T14:08:56.1Z","modified":"2025-06-26T17:37:56.901Z","cvss":[{"version":"3.1","score":6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:U/C:N/I:H/A:H","level":"medium","assessor":"cna"}],"cwes":["CWE-78"],"updated_at":"2026-11-02T14:32:31.309974Z"}],"euvd":[{"id":"EUVD-2025-19229","description":"iOS Simulator MCP Server (ios-simulator-mcp) is a Model Context Protocol (MCP) server for interacting with iOS simulators. Versions prior to 1.3.3 are written in a way that is vulnerable to command injection vulnerability attacks as part of some of its MCP Server tool definition and implementation. The MCP Server exposes the tool `ui_tap` which relies on Node.js child process API `exec` which is an unsafe and vulnerable API if concatenated with untrusted user input. LLM exposed user input for `duration`, `udid`, and `x` and `y` args can be replaced with shell meta-characters like `;` or `\u0026\u0026` or others to change the behavior from running the expected command `idb` to another command. 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;#` 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. Version 1.3.3 contains a patch for the issue.","status":"published","published":"2025-06-26T14:08:56Z","modified":"2025-06-26T17:37:56Z","cvss":[{"version":"3.1","score":6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:U/C:N/I:H/A:H","level":"medium"}],"updated_at":"2026-11-02T20:32:16.171648Z"}],"ghsa":[{"id":"GHSA-6f6r-m9pv-67jw","title":"iOS Simulator MCP Command Injection allowed via exec API","description":"# Command Injection in MCP Server\n\nThe MCP Server at https://github.com/joshuayoes/ios-simulator-mcp/ 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.\n\n## Vulnerable tool\n\nThe MCP Server exposes the tool `ui_tap` which relies on Node.js child process API `exec` which is an unsafe and vulnerable API if concatenated with untrusted user input.\n\nLLM exposed user input for `duration`, `udid`, and `x` and `y` args can be replaced with shell meta-characters like `;` or `\u0026\u0026` or others to change the behavior from running the expected command `idb` to another command.\n\nVulnerable line of code: https://github.com/joshuayoes/ios-simulator-mcp/blob/main/src/index.ts#L166-L207\n\n```js\n  server.tool(\n    \"ui_tap\",\n    \"Tap on the screen in the iOS Simulator\",\n    {\n      duration: z.string().optional().describe(\"Press duration\"),\n      udid: z\n        .string()\n        .optional()\n        .describe(\"Udid of target, can also be set with the IDB_UDID env var\"),\n      x: z.number().describe(\"The x-coordinate\"),\n      y: z.number().describe(\"The x-coordinate\"),\n    },\n    async ({ duration, udid, x, y }) =\u003e {\n      try {\n        const actualUdid = await getBootedDeviceId(udid);\n        const durationArg = duration ? `--duration ${duration}` : \"\";\n        const { stderr } = await execAsync(\n          `idb ui tap --udid ${actualUdid} ${durationArg} ${x} ${y}  --json`\n        );\n\n```\n\n## Exploitation\n\nWhen 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;#` 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.\n\nReference example from prior security research on this topic:\n\n![Cursor defined MCP Server vulnerable to command injection](https://res.cloudinary.com/snyk/image/upload/f_auto,w_2560,q_auto/v1747081395/Screenshot_2025-05-07_at_9.22.11_AM_d76kvm.png)\n\n## Impact\n\nUser initiated and remote command injection on a running MCP Server.\n\n## References and Prior work\n\n1. [Exploiting MCP Servers Vulnerable to Command Injection](https://snyk.io/articles/exploiting-mcp-servers-vulnerable-to-command-injection/)\n2. Liran's [Node.js Secure Coding: Defending Against Command Injection Vulnerabilities](https://www.nodejs-security.com/book/command-injection)\n\n##\n\nDisclosed by [Liran Tal](https://lirantal.com)","status":"published","published":"2025-06-26T21:20:37Z","modified":"2025-06-26T21:21:02Z","cvss":[{"version":"3.1","score":6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:U/C:N/I:H/A:H","level":"medium"}],"cwes":["CWE-78"],"updated_at":"2026-11-02T14:38:47.835488Z"}],"nvd":[{"id":"CVE-2025-52573","description":"iOS Simulator MCP Server (ios-simulator-mcp) is a Model Context Protocol (MCP) server for interacting with iOS simulators. Versions prior to 1.3.3 are written in a way that is vulnerable to command injection vulnerability attacks as part of some of its MCP Server tool definition and implementation. The MCP Server exposes the tool `ui_tap` which relies on Node.js child process API `exec` which is an unsafe and vulnerable API if concatenated with untrusted user input. LLM exposed user input for `duration`, `udid`, and `x` and `y` args can be replaced with shell meta-characters like `;` or `\u0026\u0026` or others to change the behavior from running the expected command `idb` to another command. 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;#` 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. Version 1.3.3 contains a patch for the issue.","status":"published","published":"2025-06-26T14:15:30.577Z","modified":"2026-06-17T09:36:42.28Z","cvss":[{"version":"3.1","score":6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:U/C:N/I:H/A:H","level":"medium","assessor":"secondary"}],"cwes":["CWE-78"],"updated_at":"2026-11-02T14:11:14.781314Z"}],"osv":[{"id":"CVE-2025-52573","title":"Command Injection in MCP Server ios-simulator-mcp","description":"iOS Simulator MCP Server (ios-simulator-mcp) is a Model Context Protocol (MCP) server for interacting with iOS simulators. Versions prior to 1.3.3 are written in a way that is vulnerable to command injection vulnerability attacks as part of some of its MCP Server tool definition and implementation. The MCP Server exposes the tool `ui_tap` which relies on Node.js child process API `exec` which is an unsafe and vulnerable API if concatenated with untrusted user input. LLM exposed user input for `duration`, `udid`, and `x` and `y` args can be replaced with shell meta-characters like `;` or `\u0026\u0026` or others to change the behavior from running the expected command `idb` to another command. 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;#` 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. Version 1.3.3 contains a patch for the issue.","status":"published","published":"2025-06-26T14:08:56.1Z","modified":"2026-10-28T02:31:06.010817698Z","cvss":[{"version":"3.1","score":6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:U/C:N/I:H/A:H","level":"medium"}],"cwes":["CWE-78"],"updated_at":"2026-11-02T15:44:50.45326Z"},{"id":"GHSA-6f6r-m9pv-67jw","title":"iOS Simulator MCP Command Injection allowed via exec API","description":"# Command Injection in MCP Server\n\nThe MCP Server at https://github.com/joshuayoes/ios-simulator-mcp/ 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.\n\n## Vulnerable tool\n\nThe MCP Server exposes the tool `ui_tap` which relies on Node.js child process API `exec` which is an unsafe and vulnerable API if concatenated with untrusted user input.\n\nLLM exposed user input for `duration`, `udid`, and `x` and `y` args can be replaced with shell meta-characters like `;` or `\u0026\u0026` or others to change the behavior from running the expected command `idb` to another command.\n\nVulnerable line of code: https://github.com/joshuayoes/ios-simulator-mcp/blob/main/src/index.ts#L166-L207\n\n```js\n  server.tool(\n    \"ui_tap\",\n    \"Tap on the screen in the iOS Simulator\",\n    {\n      duration: z.string().optional().describe(\"Press duration\"),\n      udid: z\n        .string()\n        .optional()\n        .describe(\"Udid of target, can also be set with the IDB_UDID env var\"),\n      x: z.number().describe(\"The x-coordinate\"),\n      y: z.number().describe(\"The x-coordinate\"),\n    },\n    async ({ duration, udid, x, y }) =\u003e {\n      try {\n        const actualUdid = await getBootedDeviceId(udid);\n        const durationArg = duration ? `--duration ${duration}` : \"\";\n        const { stderr } = await execAsync(\n          `idb ui tap --udid ${actualUdid} ${durationArg} ${x} ${y}  --json`\n        );\n\n```\n\n## Exploitation\n\nWhen 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;#` 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.\n\nReference example from prior security research on this topic:\n\n![Cursor defined MCP Server vulnerable to command injection](https://res.cloudinary.com/snyk/image/upload/f_auto,w_2560,q_auto/v1747081395/Screenshot_2025-05-07_at_9.22.11_AM_d76kvm.png)\n\n## Impact\n\nUser initiated and remote command injection on a running MCP Server.\n\n## References and Prior work\n\n1. [Exploiting MCP Servers Vulnerable to Command Injection](https://snyk.io/articles/exploiting-mcp-servers-vulnerable-to-command-injection/)\n2. Liran's [Node.js Secure Coding: Defending Against Command Injection Vulnerabilities](https://www.nodejs-security.com/book/command-injection)\n\n##\n\nDisclosed by [Liran Tal](https://lirantal.com)","status":"published","published":"2025-06-26T21:20:37Z","modified":"2025-06-26T21:44:42.182968Z","cvss":[{"version":"3.1","score":6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:U/C:N/I:H/A:H","level":"medium"}],"cwes":["CWE-78"],"updated_at":"2026-11-02T15:46:39.618611Z"}]}}
