Back to skill

Security audit

OMC/OMX 编码任务编排器

Security checks for vulnerabilities and agentic risk

Overview

The skill is a disclosed task orchestrator, but it asks agents to run coding tasks with sandbox and approval controls disabled and recommends persistent recovery/cleanup automation.

Install only if you intentionally want a Chinese-language async coding orchestrator that can launch external Claude/Codex-style agents, write persistent task files, and run local coding work with reduced safeguards. Review spec.md contents for secrets before dispatch, avoid the sandbox-bypass path unless you trust the task and repository, and do not add the cron/startup cleanup commands unless you understand their persistent deletion and tmux-kill behavior.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • 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 (3)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
SKILL.md:175
Finding

Mandatory Disabling of Sandbox and Approval Controls

Content
View full analysis
~/.openclaw/workspace/tasks/TASK_ID/log.txt ; \ OMX_EXIT=$? ; \ echo $OMX_EXIT > ~/.openclaw/workspace/tasks/TASK_ID/exit_code ; \ tmux ls 2>/dev/null | grep 'omx-.*-detached-' | cut -d: -f1 | xargs -r tmux kill-session -t 2>/dev/null ; \ exit $OMX_EXIT ``` The accompanying instructions state that `--dangerously-bypass-approvals-and-sandbox`, or its `--madmax` alias, must always be used to disable sandboxing. ### Technical Analysis The Skill deliberately disables both execution sandboxing and interactive approval controls for Codex tasks. A delegated coding agent consequently operates with the full filesystem, process, network, and credential access available to the user who invoked the Skill. This violates least-privilege principles. A coding task ordinarily requires write access only to a specific project and permission to execute a limited set of build or test tools. Disabling all containment is substantially broader than that legitimate requirement. The task description is supplied to the agent through `spec.md`. If that description contains malicious instructions, or if the target project includes hostile prompt-like content that the delegated agent follows, there is no remaining approval boundary to prevent destructive or sensitive operations. ### Attack Path 1. An attacker influences the task description, project files, issue text, or other content processed by the delegated agent. 2. The Skill stores the content in `spec.md`. 3. The Skill invokes `omx exec` with `--dangerously-bypass-approvals-and-sandbox`. 4. The delegated agent ...[truncated 948 chars]
Remediation
View remediation

T06 · System Persistence

Error
Location
references/recovery-guide.md:113
Finding

Cross-Session Persistence Through Cron and Startup Hooks

Content
View full analysis
/dev/null | grep 'omx-.*-detached-' | cut -d: -f1 | xargs -r tmux kill-session -t 2>/dev/null # Every week, clean up expired tasks 0 2 * * 0 cd ~/.openclaw/workspace && python3 ~/.openclaw/workspace/skills/omc-omx-orchestrator/scripts/task-recovery.py cleanup --days 7 ``` ```bash #!/bin/bash # Automatically recover task state at startup python3 ~/.openclaw/workspace/skills/omc-omx-orchestrator/scripts/task-recovery.py recover ``` The Skill also recommends placing the latter command in: ```text ~/.openclaw/workspace/hooks/startup.sh ``` ### Technical Analysis The deployment guidance establishes recurring cron execution and startup-hook execution that survive the original Skill invocation. These mechanisms cause the bundled script and associated shell pipelines to run in future sessions without further interactive approval. The hourly tmux cleanup is also overly broad. It discovers sessions by matching a naming pattern rather than consulting task metadata and validating ownership. As a result, it can terminate unrelated tmux sessions whose names happen to match `omx-.*-detached-`. Although the documented purpose is task recovery and cleanup, the proposed deployment changes cross-session execution state and therefore creates a persistence mechanism. Future modifications to files at the referenced paths would also be executed automatically by the installed cron entries or startup hook. ### Attack Path 1. A user follows the Skill's automated deployment instructions. 2. The user adds the supplied entries to cron and the ...[truncated 1169 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/task-recovery.py:142
Finding

Sensitive Task Content Printed to Standard Output Without Redaction

Content
View full analysis
1000 else content) # Show result file if exists result_file = task_dir / task.get("result_file", "result.txt") if result_file.exists(): content = result_file.read_text(encoding="utf-8") print(f"\n--- {result_file.name} (last 500 chars) ---") print(content[-500:] if len(content) > 500 else content) ``` ### Technical Analysis The `show_task` function prints portions of `spec.md` and the task result directly to standard output. Task prompts and generated results may contain proprietary source code, filesystem paths, credentials, tokens, personal data, or sensitive operational details. There is no content redaction, secret detection, output confirmation, or metadata-only default. Standard output may be captured by terminal logging, CI systems, support tooling, shell history wrappers, monitoring agents, or messaging integrations. The fixed character limits reduce output volume but do not provide confidentiality. Secrets commonly fit within the first 1,000 characters of a task specification or the last 500 characters of a result. ### Attack Path 1. A task specification or result contains a secret or other sensitive content. 2. The content is persisted in `spec.md` or the configured result file. 3. A user or automated process runs `task-recovery.py show `. 4. The function reads the file and prints the selected content without redaction. 5. A terminal recorder, CI log, monitoring system, or downstream integration captures standard output. 6. A party with access to that output obtains the disclosed content. ### Impact Assessment The dir ...[truncated 490 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (20)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared purpose says the skill asynchronously dispatches tasks, but the documented behavior also includes recovering state, listing and displaying task contents, cleaning task directories, reading persisted metadata, and checking OS process liveness. This mismatch can cause users or supervising agents to invoke the skill under a narrower trust assumption than its actual capabilities, enabling unintended local inspection or mutation.

Content

No source excerpt is available for this finding.

External Model or Provider Selection

High
Category
Excessive Agency
Confidence
90% confidence
Finding

The skill explicitly routes task content to an external model/provider via claude CLI, which can transmit locally collected specs and project context outside the current trust boundary. In this skill's context, that is security-relevant because the same document also encourages embedding extensive repository data into spec.md, amplifying third-party data exposure.

Content

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

bash
# 轻中型任务(stream-json + max-turns 限制)
python3 -c "import json; print(json.dumps({'type':'user','message':{'role':'user','content':open('spec.md').read()}}))" | \
claude -p --input-format stream-json --output-format stream-json --verbose \
  --model claude-opus-4-6 --tools default --max-turns 30 - \
  > result.txt 2> log.txt ; echo $? > exit_code

External Model or Provider Selection

High
Category
Excessive Agency
Confidence
90% confidence
Finding

This command template sends spec.md to an external Claude model in text mode, creating the same outbound data-transfer risk as the stream-json variant. Because the skill recommends rich, self-contained specs with embedded local data, this behavior can expose more information than users may expect from a 'task orchestrator'.

Content

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

result.txt 2> log.txt ; echo $? > exit_code

复杂任务(text 模式,不设 max-turns)

cat spec.md | claude -p --output-format text --model claude-sonnet-4-20250514 -

text

### 选择指南

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
85% confidence
Finding

The skill performs sensitive operations involving environment variables, filesystem reads/writes, and background task persistence, but it declares no explicit tool scope or permission boundary. That increases the chance of overbroad execution and makes it harder for a host agent or reviewer to enforce least privilege.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The trigger list includes generic phrases like '派任务' and '后台编码', which are common enough to collide with natural conversation. In this skill's context, mistaken activation is more dangerous because it can initiate background execution and persistent local state changes.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Loading the skill whenever a message merely mentions OMC/OMX keywords is overly broad for a skill that can write files, spawn detached processes, inspect task artifacts, and disable sandboxing in downstream tools. Accidental activation could dispatch unintended background jobs or expose local task contents from ordinary conversation.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

Instructing the system to preserve all user content verbatim in spec files risks persisting secrets, credentials, tokens, proprietary source excerpts, or personal data to disk and forwarding them unchanged to downstream model CLIs. Because this skill is explicitly designed to write long-lived task artifacts and pass them to external engines, the exposure risk is materially higher than in transient prompting.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

L171-L172 明确说明 cat spec.md | claude -p - < /dev/null 会因为同时提供 stdin 管道和重定向而冲突;但 L492-L493 又写成“必须加 < /dev/null”并继续给出基于管道传递 spec 的做法。两段说明对同一类调用方式给出互相矛盾的操作指令,属于文档意图与实际命令语义冲突。

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill normalizes high-risk behaviors such as background execution, persistent file writes, direct code modification, and explicit sandbox bypass for OMX, but it does not provide a centralized, prominent risk warning or consent checkpoint. Users may authorize actions without understanding that code will run locally with reduced safeguards and continue independently after the parent agent exits.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The guidance to include all collected data and complete context in spec files encourages broad local persistence and downstream disclosure of repository data, configuration snapshots, file paths, and potentially confidential business logic. Since the skill then feeds those specs into external model providers, this can become an unnecessary data exfiltration channel rather than simple local storage.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill manifest describes an orchestrator for asynchronously dispatching coding tasks to OMC/OMX. This guide documents additional operational capabilities such as deleting task records, forcibly removing tasks, importing/exporting task metadata, and killing tmux sessions, which are not directly justified by the stated dispatch-oriented purpose.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The guide presents cleanup, remove, and kill-session operations without prominent warnings that they delete task data or terminate running sessions. Operators may run these commands assuming routine maintenance and unintentionally destroy recoverable state or interrupt active work.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The documented cron job kills tmux sessions matching a broad name pattern, which is an operational process-control capability not reflected in the skill metadata. If session naming collides or the pattern is too broad, legitimate unrelated tmux work could be terminated, causing denial of service or data loss.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · references/recovery-guide.md (reported line 178)May include surrounding context.

  1. 任务目录权限问题
    bash
    # 修复权限
    chmod 755 ~/.openclaw/workspace/tasks/
    chmod 644 ~/.openclaw/workspace/tasks/*/task.json
    

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · references/recovery-guide.md (reported line 179)May include surrounding context.

bash
   # 修复权限
   chmod 755 ~/.openclaw/workspace/tasks/
   chmod 644 ~/.openclaw/workspace/tasks/*/task.json

数据一致性检查

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The cleanup command performs irreversible deletion via shutil.rmtree on task directories older than the cutoff. Although the docstring says 'Remove completed/failed tasks older than N days,' there is no confirmation prompt and no stronger user-facing warning that this action permanently removes task data.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

文件中的触发词、命令格式和用户交互描述均固定为中文,没有说明是否支持其他语言或允许用户选择语言。对于通用编排技能,这种默认强制单一语言而无用户 opt-in 可能构成语言/locale 策略问题。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The natural-language instructions, headings, and command descriptions consistently force a specific language context for users. Per SQP-3, a skill should not impose a language or locale without user opt-in unless the constraint is clearly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

This markdown template forces a specific language/locale for the skill content and instructions, which can violate language-choice policy when no user opt-in or justification is provided. The file contains only Chinese headings and guidance, with no indication that users may choose another language or that the template is intended only for a Chinese-language context.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

Line L43 specifies that timestamps must use ISO 8601 in East Asia Standard Time (UTC+8/东八区时间). This is a natural-language locale policy constraint, and the document does not offer opt-in, alternatives, or a clear region-specific justification for requiring that timezone.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.