Back to skill

Security audit

Review Orchestrator

Security checks for vulnerabilities and agentic risk

Overview

This review-orchestration skill is mostly clear, but its quality-gate feature can run a workspace-supplied test command without defined validation or confirmation.

Install only if you are comfortable with /ro gate running test commands from the current workspace configuration. Review .openclaw/review-orchestrator.yaml and .claude/review-orchestrator.yaml before using /ro gate, especially in untrusted repositories, and prefer pinned or otherwise verified dependency versions where available.

Vulnerability Patterns
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:159
Finding
Workspace-Controlled Quality-Gate Configuration Enables Arbitrary Command Execution<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 159–216 **Vulnerability Type**: Command injection through an unrestricted configuration value **Risk Level**: High ### Complete Code Snippet ```markdown Configuration is loaded from (in order of precedence): 1. `.openclaw/review-orchestrator.yaml` (OpenClaw standard) 2. `.claude/review-orchestrator.yaml` (Claude Code compatibility) 3. Defaults (built-in) ``` ```yaml # .openclaw/review-orchestrator.yaml quality_gates: test_command: "npm test" # Node.js (default) # test_command: "go test ./..." # Go # test_command: "pytest" # Python # test_command: "cargo test" # Rust coverage_threshold: 5 # Max allowed coverage drop (%) require_docs: true # Require documentation updates ``` ```markdown ### Quality Gate Checks | Check | Condition | Severity | |-------|-----------|----------| | Tests pass | `{test_command}` exit 0 | Critical | | Coverage maintained | delta ≤ `{coverage_threshold}`% | Important | | No critical findings | review.critical == 0 | Critical | | Docs updated | changed files have docs (if `require_docs`) | Minor | > Checks use configured values from `quality_gates` section. Defaults: test_command=`npm test`, > coverage_threshold=5, require_docs=true. ``` ### Technical Analysis The skill instructs the agent to load `test_command` from configuration files located in the current workspace and execute that value as a quality-gate command. The documented interface represents the command as an unrestricted string rather than an allowlisted executable and structured argument array. A repository author can therefore supply a malicious `.openclaw/review-orchestrator.yaml` or `.claude/review-orchestrator.yaml` containing shell operators, command substitutions, pipelines, or an entirely different executable. If the underlying agent passes this string to a shell when `/ro gate` is invoked, the configuration becomes an arbitrary command-execution ...[truncated 1683 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace the unrestricted `test_command` string with a structured executable and argument list, for example: ```yaml quality_gates: test: executable: npm arguments: - test ``` 2. Execute the program directly without a shell, such as through an API equivalent to `execFile`, and never through `sh -c`, `bash -c`, or a similar shell interpreter. 3. Maintain an explicit allowlist of supported test executables and approved arguments. 4. Reject shell metacharacters, command substitutions, redirects, pipelines, and newline characters if backward compatibility temporarily requires a string field. 5. Treat workspace configuration as untrusted input and validate its schema before use. 6. Require explicit user confirmation before executing a non-default or repository-supplied command, displaying the exact executable and arguments. 7. Run quality-gate commands in a restricted sandbox with minimal filesystem access, no unnecessary credentials, and network access disabled by default. 8. Update the security documentation to disclose that quality gates execute local test programs and clearly state their permission boundaries. ]]>

T08 · Insecure Dependencies

Warning
Location
SKILL.md:40
Finding
External Skill Dependencies Are Installed Without Version or Integrity Pinning<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 40–46 **Vulnerability Type**: Unpinned third-party dependency installation **Risk Level**: Medium ### Complete Code Snippet ```markdown **Dependencies**: - `leegitw/failure-memory` (for context) - `leegitw/context-verifier` (for file verification) ```bash # Install with dependencies openclaw install leegitw/context-verifier openclaw install leegitw/failure-memory openclaw install leegitw/review-orchestrator ``` ``` ### Technical Analysis The installation instructions retrieve external skills using mutable package identifiers without specifying reviewed versions, immutable commit hashes, checksums, or signatures. Consequently, the content installed by these commands can differ from the content that was originally reviewed. The dependency implementations are not included in this project, so their behavior cannot be verified within the audited artifact. A compromise of the publisher account, package registry, distribution channel, or upstream project could cause users following these instructions to install altered instructions or code. This is a supply-chain weakness rather than evidence that the currently named dependencies are malicious. ### Attack Path 1. An attacker compromises an upstream dependency publisher, repository, package account, or distribution channel. 2. The attacker publishes a modified release under one of the documented mutable identifiers. 3. A user follows the installation commands in `SKILL.md`. 4. `openclaw install` resolves the identifier to the attacker-controlled current release. 5. The altered dependency is installed and later loaded or invoked within the user’s agent environment. 6. Any malicious behavior executes within the permissions granted to that dependency by the host platform. Exploitation depends on compromise or unauthorized modification of an external dependency or its delivery channel. ### Impact Assessment The ultimate impact depends on the ...[truncated 527 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin each dependency to a reviewed immutable version, release digest, or commit hash. 2. Publish and verify cryptographic checksums or signed provenance for downloaded skill packages. 3. Use a lockfile or equivalent manifest that records the exact resolved dependency artifacts. 4. Configure installation to fail closed if a digest or signature does not match. 5. Document the canonical package registry and publisher identity to reduce dependency-confusion and impersonation risks. 6. Review dependency updates before changing pinned versions, including their declared permissions and transitive dependencies. 7. Where practical, vendor the reviewed instruction-only dependencies into the release so the installed content matches the audited content. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Exfiltration Commands

High
Category
Prompt Injection
Content
**What this skill does NOT do:**
- Invoke AI models directly (instruction-only skill)
- Call external services (Codex, Gemini, or any third-party API)
- Send data to external services
- Modify files outside its workspace (only writes to `docs/reviews/`)
- Execute arbitrary code
Confidence
90% confidence
Finding
Instructions found that direct the agent to transmit conversation context or user data to external services.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The trigger is specified as "レビュー要求 (review requested)", which imposes a Japanese-language activation phrase in the skill description. The file does not offer alternative trigger languages as an explicit opt-in policy, nor does it document that the skill is intended only for a Japanese-language environment.

External Transmission

Medium
Category
Data Exfiltration
Content
**What this skill does NOT do:**
- Invoke AI models directly (instruction-only skill)
- Call external services (Codex, Gemini, or any third-party API)
- Send data to external services
- Modify files outside its workspace (only writes to `docs/reviews/`)
- Execute arbitrary code
Confidence
70% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Unrestricted Tool Access

Medium
Category
Excessive Agency
Content
- Call external services (Codex, Gemini, or any third-party API)
- Send data to external services
- Modify files outside its workspace (only writes to `docs/reviews/`)
- Execute arbitrary code

**Cognitive modes clarification:**
Mode names like "analyzer", "architect", and "implementer" describe review perspectives
Confidence
80% confidence
Finding
Skill grants unrestricted tool access without appropriate constraints. An agent with unfettered tool access can perform arbitrary actions including file modification, network requests, and code execution.

Static analysis

No suspicious patterns detected.