Back to skill

Security audit

Ultrawork — Parallel AI Task Execution

Security checks for vulnerabilities and agentic risk

Overview

This skill is mostly a disclosed parallel-agent runner, but it also automatically runs repository-controlled npm build and test scripts without clear user approval or containment.

Review before installing. Use this only in trusted repositories, and expect it to delegate work to multiple agents/models and possibly modify files through those agents. Do not rely on the advertised cancellation behavior, and avoid letting it run automatic npm build/test verification unless you have reviewed the repository scripts or can run them in a contained environment.

Vulnerability Patterns
  • 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
  • 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)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:217
Finding

Automatic Execution of Repository-Controlled npm Scripts

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 217–234
Vulnerability Type: Automatic, unsandboxed execution of untrusted package scripts
Risk Level: Medium

Vulnerable Code

bash
# Check build if applicable
if [[ -f "package.json" ]]; then
  if npm run build > /dev/null 2>&1; then
    echo "✅ Build passes"
  else
    echo "⚠️  Build has errors"
  fi
fi

# Check for new errors
if [[ -f "package.json" ]]; then
  if npm test > /dev/null 2>&1; then
    echo "✅ Tests pass"
  else
    echo "⚠️  Tests have failures"
  fi
fi

Technical Analysis

The skill treats the presence of package.json as sufficient authorization to execute npm run build and npm test. npm scripts are repository-controlled shell commands and can perform arbitrary actions with the privileges and environment of the OpenClaw process.

The implementation does not inspect the selected scripts, verify that the repository is trusted, request user confirmation, restrict filesystem or network access, or run the commands in a sandbox. Redirecting both standard output and standard error to /dev/null further reduces visibility into malicious behavior.

Attack Path

  1. An attacker creates or modifies a repository containing a package.json.
  2. The attacker defines a malicious build, test, prebuild, pretest, or related npm lifecycle script.
  3. A user opens the repository and invokes Ultrawork for an otherwise legitimate task.
  4. After the delegated tasks finish, the verification phase detects package.json.
  5. The skill automatically invokes npm run build and npm test.
  6. npm executes the attacker-controlled scripts and applicable lifecycle hooks without requesting confirmation.
  7. The malicious commands run with the invoking process's permissions while their output is suppressed.

Impact Assessment

Successful exploitation permits arbitrary command execution under the operatin ...[truncated 631 chars]

Remediation
View remediation

Remediation Suggestions

  1. Require explicit user approval before running any repository-defined package script, showing the exact script name and resolved command.
  2. Inspect package.json for build, test, and associated lifecycle hooks such as prebuild, postbuild, pretest, and posttest.
  3. Provide a default-safe mode that skips repository-controlled verification commands unless the repository has been explicitly trusted.
  4. Execute verification inside a restricted container or sandbox with a read-only source mount, minimal environment variables, no sensitive host mounts, limited process privileges, and network access disabled unless required.
  5. Do not suppress all output. Preserve command, exit status, standard output, and standard error in an auditable log while applying secret redaction where necessary.
  6. Support an allowlist of approved verification commands rather than assuming every package.json is trustworthy.
  7. Enforce time, process, filesystem, and resource limits on verification commands.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The skill description emphasizes speed and parallelism but does not clearly warn users that their requests will be delegated to multiple subagents/models. This matters because delegation changes the execution and data-exposure boundary: prompts, repository context, and task contents may be sent to several models at once, amplifying privacy, cost, and unintended-action risks.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger phrases include broad natural-language aliases like 'run in parallel', which can cause the skill to activate in situations where the user did not intend to delegate work to multiple subagents. In this skill's context, unintended invocation is more dangerous because activation can spawn parallel agents and execute follow-on build/test commands, increasing the risk of unreviewed actions and resource use.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documentation presents Ultrawork as providing only parallelism, contrasting it with higher-level skills that add verification. But the implementation includes post-run verification via npm run build and npm test, which goes beyond 'just parallelism' and overlaps with the described role of other skills.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The SKILL.md text states that Ultrawork stops when the user says "cancel," implying interactive cancellation support. However, the provided implementation only spawns background jobs and waits on their PIDs; there is no signal handling, input polling, or process termination logic to honor cancellation.

Content

No source excerpt is available for this finding.