Back to skill

Security audit

high perf orchestration a la oh my codex & gastown

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent for multi-agent coding orchestration, but it recommends broad unattended worker permissions and service-level API-key exposure without enough scoping guidance.

Install only if you are prepared to run ACP workers in a tightly isolated account or sandbox. Before use, replace blanket approve-all behavior with task-scoped permissions where possible, limit workers to the intended repository/worktree and artifact directories, protect any API key as a secret, and define cleanup rules for persistent sessions and run-state files.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
docs/reproduction.md:26
Finding

Gateway-Wide Blanket Approval Policy for Unattended Coding Agents

Content
View full analysis

Vulnerability Details

File Location: docs/reproduction.md, lines 26-39
Vulnerability Type: Excessive agent permissions and violation of least privilege
Risk Level: Medium

Vulnerable Configuration:

json
{
  "plugins": {
    "entries": {
      "acpx": {
        "enabled": true,
        "config": {
          "permissionMode": "approve-all",
          "nonInteractivePermissions": "deny"
        }
      }
    }
  }
}

Technical Analysis

The setup guide recommends configuring the gateway-side ACPX plugin with permissionMode: "approve-all". This is a broad permission policy applied at the plugin level rather than a task-scoped grant limited to a worker's assigned repository, worktree, commands, and artifact directories.

The package also instructs the orchestrator to read a handoff Markdown file and pass it directly to sessions_spawn as the worker's task prompt. Persistent ACP workers then perform coding operations based on that file and repository context. Consequently, attacker-controlled content in a task specification, handoff, repository instruction file, or other worker-readable project file may influence a broadly authorized coding agent.

The accompanying nonInteractivePermissions: "deny" setting may provide partial protection, but the package does not define its precedence or effective interaction with permissionMode: "approve-all". It therefore does not establish that unattended agents are consistently denied excessive operations. The blanket approval recommendation violates least-privilege principles even if some noninteractive requests are ultimately blocked.

Attack Path

  1. An attacker introduces malicious instructions into a repository file, task specification, shared handoff, or other content that an ACP worker is directed to read.
  2. The OpenClaw orchestrator reads the referenced handoff and supplies it to sessions_spawn as the worker prompt.
  3. A pers ...[truncated 1782 chars]
Remediation
View remediation

Remediation Suggestions

  1. Replace permissionMode: "approve-all" with deny-by-default, task-scoped authorization.
  2. Restrict each worker to its assigned repository or Git worktree and explicitly designated artifact directories.
  3. Allowlist only the commands required for the current task; deny arbitrary shell execution and access to service-management commands.
  4. Run ACP workers under a dedicated, unprivileged operating-system identity with no access to unrelated repositories, home-directory secrets, SSH material, or gateway configuration.
  5. Isolate credentials from worker processes. Use narrowly scoped, short-lived credentials and separate service identities for different ACP backends.
  6. Treat handoffs, repository instructions, issue descriptions, and generated context as untrusted input. Delimit them clearly and validate them before incorporating them into worker prompts.
  7. Add explicit controls preventing worker instructions from expanding filesystem scope or changing permission policy.
  8. Document and test the precedence between permissionMode and nonInteractivePermissions, including negative tests proving that unattended workers cannot obtain out-of-scope access.
  9. Prefer ephemeral workers where persistence is unnecessary, and terminate sessions when their assigned workstream is complete.
  10. Record permission requests and worker actions in an audit log so anomalous access can be detected and investigated.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (6)

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · README.md (reported line 115)May include surrounding context.

md
1. Keep OpenClaw as the control plane
2. Spawn Claude Code ACP sessions for actual implementation
3. Use one persistent thread/session per workstream
4. Store state in files, not in session memory
5. Keep the main session lightweight during orchestration

### Phase 2, when needed

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The documentation instructs users to place an OpenAI API key directly into a systemd service environment, but it does not warn about the sensitivity of the credential, least-privilege handling, file permissions, rotation, or safer secret-management options. This can lead operators to store long-lived credentials in plaintext configuration or logs, increasing the risk of accidental disclosure to other local users, backups, support artifacts, or misconfigured repositories.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The trigger condition "items can be reviewed or revised independently" is a very general description that could match many ordinary workflows without clearly defining when this skill should or should not be used. The file does not provide narrower scope constraints, explicit trigger phrases, or exclusion conditions to reduce unintended invocation.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The activation condition 'question is broad enough to split into angles' is subjective and does not define clear thresholds or examples for when this workflow should run. In a manifest file, this kind of vague trigger can cause inconsistent or unintended invocation because different agents or systems may interpret 'broad enough' differently.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The workflow can be invoked whenever a 'project goal is defined' and deliverables are 'explicit enough to plan', which are subjective and weakly bounded conditions. In an orchestration/control-plane skill, ambiguous triggers increase the chance of launching broad end-to-end execution on repositories or tasks that have not been sufficiently authorized, scoped, or safety-checked, leading to unintended code changes or resource use.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

This manifest describes the skill's purpose and best-fit use cases, but it does not define any explicit trigger phrases, activation conditions, or exclusion examples beyond broad suitability notes. In a manifest file, that can make it unclear when the skill should activate versus when another writing or analysis skill should be used.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.