Back to skill

Security audit

Workhorse Duo

Security checks for vulnerabilities and agentic risk

Overview

The skill is a disclosed two-agent workflow, but its setup can persistently broaden local agent access and session visibility beyond the two named workers.

Install only in a local or isolated OpenClaw profile where you are comfortable enabling cross-agent communication and wider session visibility. Avoid AutoFixConfig on shared or production-like environments unless you review the exact config change, keep a recoverable backup, and tighten the allow policy and session visibility after validation.

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

Error
Location
references/published-bootstrap-helper.md:107
Finding

Overly Broad Cross-Agent Permissions and Global Session Visibility

Content
View full analysis

Vulnerability Details

File Location: references/published-bootstrap-helper.md:107-125
Vulnerability Type: Excessive cross-agent authorization and session visibility
Risk Level: High

Vulnerable Code

powershell
if ((-not $hasAgentToAgent -or -not $hasEnabled -or -not $hasSessionsAll -or -not $hasAllow) -and $AutoFixConfig) {
  Write-Step "Config is incomplete. Applying bootstrap-safe config and restarting gateway..."
  $config = Get-Content $configPath -Raw | ConvertFrom-Json -Depth 100
  if (-not $config.tools) {
    $config | Add-Member -NotePropertyName tools -NotePropertyValue ([pscustomobject]@{})
  }
  if (-not $config.tools.agentToAgent) {
    $config.tools | Add-Member -NotePropertyName agentToAgent -NotePropertyValue ([pscustomobject]@{})
  }
  $config.tools.agentToAgent.enabled = $true
  $config.tools.agentToAgent.allow = @("*")
  if (-not $config.tools.sessions) {
    $config.tools | Add-Member -NotePropertyName sessions -NotePropertyValue ([pscustomobject]@{})
  }
  $config.tools.sessions.visibility = "all"
  $json = $config | ConvertTo-Json -Depth 100
  Copy-Item $configPath "$configPath.bak" -Force
  Set-Content -Path $configPath -Value $json -Encoding UTF8
  openclaw gateway restart | Out-Host
}

The same insecure bootstrap policy is explicitly recommended in references/local-bootstrap.md:44-67:

json
{
  "tools": {
    "agentToAgent": {
      "enabled": true,
      "allow": ["*"]
    },
    "sessions": {
      "visibility": "all"
    }
  }
}

Technical Analysis

The workflow needs cross-agent communication for only two named agents, xiaoma and xiaoniu. However, the auto-fix helper replaces the authorization policy with the wildcard allow = @("*") and changes session visibility to "all".

This violates least privilege in two ways:

  1. The wildcard authorization can permit agents unrelated to Workhorse Duo to participate in cross-agent communication.
  2. Global session visibility can expose sessions ...[truncated 1942 chars]
Remediation
View remediation

Remediation Suggestions

  1. Replace the wildcard agentToAgent.allow value with an explicit allowlist containing only the agents and communication directions required by the workflow.
  2. Use the narrowest session visibility supported by OpenClaw instead of "all". Prefer visibility limited to the current task, session tree, or explicitly selected worker sessions.
  3. Preserve existing stricter policies. The helper should merge only the minimum required entries rather than overwrite the entire allow policy.
  4. Before writing the configuration, display an exact policy diff and require explicit operator confirmation for global authorization or visibility changes.
  5. Treat broad bootstrap permissions as temporary. Wrap smoke testing in try/finally logic that restores the original configuration and restarts the gateway even if validation fails.
  6. Retain a uniquely named, timestamped backup rather than overwriting a single .bak file.
  7. Validate the effective parsed configuration after the restart and confirm that only the intended agents can access only the required sessions.
  8. Make the least-privilege setup the documented default. If a broad diagnostic mode remains available, clearly label it as an exceptional, time-limited troubleshooting option.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (15)

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% 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 90)May include surrounding context.

md
Not responsible for:
- final user-facing reporting
- final acceptance decision
- changing the task goal without approval

Required output format:
- 已完成

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The required output format for Xiaoma is specified entirely in Chinese, making the language effectively mandatory for that worker's responses. Because the file does not offer the user or operator a language/locale choice or justify a Chinese-only constraint, this is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The pass/fail output format requires Chinese text such as 验收没问题, which imposes a specific language on the interaction. There is no documented user opt-in or language selection mechanism, so this may violate language/locale policy expectations.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill goes beyond simple orchestration and instructs operators to perform bootstrap actions, create agents, modify local cross-agent configuration, and run smoke tests. Expanding a workflow skill into environment setup and system configuration increases attack surface and can normalize privileged changes that are not strictly required for every use of the skill.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This line explicitly recommends an auto-fix flow that patches local configuration and restarts the gateway, which are system-impacting actions unrelated to the narrow task of dispatching work between two agents. Even if intended for convenience, such guidance can lead an agent or operator to make privileged changes without sufficient review or change-control.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The bootstrap guidance allows local config patching and gateway restarts without an in-band warning about service interruption, configuration drift, or the risks of modifying agent communication policy. This can cause unexpected availability or security-impacting changes, especially in shared or production-like environments.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The bootstrap instructs operators to enable unrestricted cross-agent communication (allow: ["*"]) and global session visibility (visibility: "all") as an acceptable runtime state. In an orchestration skill, this expands the blast radius of any compromised, misrouted, or over-privileged agent and may expose unrelated session data or permit unintended agent interactions without explicit scoping.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The sample command packets and required outputs are written in Chinese and instruct exact Chinese responses such as '验收没问题' and 'PONG' workflows framed around Chinese role labels. This imposes a language choice in natural-language instructions without any opt-in or justification that the skill is region-specific.

Content

No source excerpt is available for this finding.

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 · references/risk-and-rollback.md (reported line 23)May include surrounding context.

md
The published helper flow in `references/published-bootstrap-helper.md` will:
- modify `~/.openclaw/openclaw.json`
- create a backup beside that file
- set bootstrap-safe cross-agent config values
- restart the gateway

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The sample packets require interactions and fixed output formats in Chinese, including exact Chinese response text for QA. This imposes a specific language on operators and downstream agents without documenting user choice, opt-in, or a justified locale-specific constraint.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The sample main-session-to-worker packet is written in Chinese and specifies Chinese-only section headings for the response. This reinforces a fixed language workflow without indicating that the language can be adapted to user preference.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The QA packet template requires Chinese wording, including the exact pass response 验收没问题. Because the file does not provide a language-selection path, the template appears to enforce a specific language by default.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The text references specific Chinese role names ("小马 / 小牛") as shared terminology and expects the skill description to be understandable to someone unfamiliar with them. This can impose a particular language/locale-specific vocabulary without offering a user opt-in or alternative terminology, which fits the language/locale policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file requires agents to process Chinese-language instructions and later expects the Chinese phrase 验收没问题, which imposes a specific language behavior. There is no user opt-in or explanation that this skill is intentionally Chinese-only or region-specific.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

Line L03 instructs reviewers to use the role names '小牛' and references the same naming scheme throughout the document. This imposes a specific language/locale convention in the skill content without any opt-in or justification, which can violate language-choice policy for general-use skills.

Content

No source excerpt is available for this finding.