Back to skill

Security audit

acp-router

Security checks for vulnerabilities and agentic risk

Overview

The skill has a coherent ACP routing purpose, but it can run local harness commands, install packages, and change persistent ACP configuration without enough user confirmation.

Use this only if you intentionally want an agent to manage ACP harness sessions. Before installing, require explicit approval for npm installs, gateway restarts, session cancellation/closure, and any edit or deletion of ~/.acpx/config.json; prefer pinned, locked adapter binaries and safe argument-array execution instead of shell command templates.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
Findings (4)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:153
Finding

Shell Command Injection Through Unescaped Runtime Values

Content
View full analysis
\ || ${ACPX_CMD} codex sessions new --name oc-codex- ${ACPX_CMD} codex -s oc-codex- --cwd --format quiet "" ``` One-shot: ```bash ${ACPX_CMD} codex exec --cwd --format quiet "" ``` ### Technical Analysis The command templates interpolate `conversationId`, `workspacePath`, and `prompt` directly into command strings intended for an `exec` shell interface. The workspace path and session identifier are not quoted or validated. Although the prompt is surrounded by double quotes, an attacker can potentially terminate the quoted argument with another double quote and introduce shell metacharacters, command substitutions, or additional commands. Quoting alone is not a reliable defense when untrusted values are concatenated into a shell command. The vulnerability becomes exploitable if any of these values can contain attacker-controlled characters and the resulting string is interpreted by a shell rather than passed directly to the executable as an argument array. ### Attack Path 1. An attacker supplies a crafted prompt, workspace path, or conversation identifier. 2. The value includes shell syntax such as a closing quote, command separator, command substitution, or redirection operator. 3. The Agent substitutes the value into one of the documented command templates. 4. The Agent invokes the resulting string through the `exec` shell interface. 5. The shell parses the injected syntax and executes the attacker's additional command with the Agent process's operating-system privileges. ### Impact Assessment Successful exploitation could permit arbitrary command execution under the account running the Agent. The attacker could potentially: - Read or ...[truncated 424 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
SKILL.md:183
Finding

Execution of Unpinned Third-Party ACP Adapter Packages

Content
View full analysis
npx pi-acp` - `claude -> npx -y @zed-industries/claude-agent-acp` - `codex -> npx @zed-industries/codex-acp` - `opencode -> npx -y opencode-ai acp` - `gemini -> gemini` - `kimi -> kimi acp` ``` ### Technical Analysis The documented adapter commands use `npx` without exact package versions. When the requested package is not already available locally, `npx` may retrieve and execute the current registry version. Consequently, the code that runs can change after the skill has been reviewed. The `-y` option used for some adapters also suppresses the normal installation confirmation. No lockfile, package-integrity validation, trusted artifact digest, or reviewed local installation is required by this adapter configuration. This creates a supply-chain execution boundary in which registry compromise, maintainer-account compromise, malicious updates, or unexpected package changes could result in arbitrary third-party code execution. ### Attack Path 1. A user requests a harness whose adapter is defined through an unpinned `npx` command. 2. `acpx` invokes the adapter command. 3. If the package is not cached or installed locally, `npx` resolves it from the configured npm registry. 4. The registry supplies the latest matching package rather than a previously reviewed immutable release. 5. Package lifecycle or runtime code executes with the permissions of the Agent account. 6. A compromised or malicious package can access the Agent's files, environment, network, and working directory within the limits of that account. ### Impact Assessment A compromised adapter package could execute arbitrary code with the Agent's privileges. Potential consequences include: - Theft of source code, environment variables, tokens, or configuration. - Modific ...[truncated 346 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:91
Finding

Automatic Package Installation and Gateway Restart Without Prior Approval

Content
View full analysis
` 4. Verify before use: - `./extensions/acpx/node_modules/.bin/acpx --version` 5. If install/repair changed ACPX artifacts, restart the gateway and offer to run the restart. ``` ```text - `acpx: command not found`: - for thread-spawn ACP requests, install plugin-local pinned acpx in `extensions/acpx` immediately - restart gateway after install and offer to run the restart automatically - then retry once - do not ask for install permission first unless policy explicitly requires it - do not install global `acpx` unless explicitly requested ``` ### Technical Analysis A normal harness request can cause the Agent to run `npm install` automatically when the ACP backend is unavailable or the binary is missing. The instructions expressly state that installation permission should not be requested first unless another policy requires it. Although the requested `acpx` version is derived from extension metadata, the instructions do not require a committed lockfile, package-integrity verification, installation-script restrictions, or explicit validation of the pa ...[truncated 1563 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:202
Finding

Automatic Removal of User-Level ACP Agent Overrides

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (8)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The trigger conditions are broad enough to match common routing or conversation-management requests, which can cause this high-privilege skill to activate unexpectedly. In context, accidental activation matters because the skill can route into command execution paths, session spawning, installation, and restart behavior that the user may not have intended.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · SKILL.md (reported line 70)May include surrounding context.

md
3. For ACP harness thread creation, do not use `message` with `action=thread-create`; `sessions_spawn` is the only thread-create path.
4. Put requested work in `task` so the ACP session gets it immediately.
5. Set `agentId` explicitly unless ACP default agent is known.
6. Do not ask user to run slash commands or CLI when this path works directly.

Example:

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill directs the agent to perform installation, repair, and gateway restart actions automatically and even says not to ask for install permission first unless policy requires it. That is dangerous because it authorizes system-changing operations based on inferred routing intent, increasing the risk of unauthorized software changes, service disruption, or attacker-induced environment manipulation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The direct acpx section instructs shell execution that can create, cancel, prompt, and close external sessions, but it does not prominently warn that these are consequential command executions. This lack of warning increases the chance that an agent relays or performs state-changing operations without meaningful user awareness or consent.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The skill documents npx pi-acp as a built-in adapter command without pinning a version or integrity source. Unpinned npx execution can fetch and run whatever package version is current at execution time, creating a supply-chain execution path where compromised or unexpectedly updated packages are run in the local environment.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The documented default npx -y @zed-industries/claude-agent-acp runs a remote package without an explicit version pin. In this skill, those commands are part of the harness control flow, so an attacker who compromises the package or benefits from an unsafe upstream release could achieve arbitrary code execution on the host that runs the skill.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

npx @zed-industries/codex-acp is another unpinned remote package execution path. Because the skill encourages automatic repair and direct command execution, this is more dangerous than a mere example: it normalizes executing mutable third-party code to satisfy user requests.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The npx -y opencode-ai acp adapter mapping is unpinned and may download and execute code from the package registry at runtime. In the context of a router skill that can automatically install, restart services, and drive external sessions, this creates a credible supply-chain and arbitrary-execution risk.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.