T03 · Remote Payload Retrieval and Execution
- Location
check_skills.md:69- Finding
Remote Installer Content Is Piped Directly into Shell Interpreters
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This health-check skill mostly matches its purpose, but it collects sensitive local data, contacts external registries despite saying it will not, and recommends risky forced installs and persistent automation.
Review carefully before installing. This skill should only be used if you are comfortable with broad local inspection of your OpenClaw home, logs, config, workspace identity files, and secret-adjacent files. Do not approve forced package installs, pipe-to-shell commands, cron creation, report cleanup, or .env edits unless you have separately reviewed the command, source, rollback, and exact files affected. Treat generated HTML reports as untrusted until dynamic output is escaped.
check_skills.md:69Remote Installer Content Is Piped Directly into Shell Interpreters
check_skills.md:190Unpinned Third-Party Skills Are Installed with Security Prompts Disabled
check_skills.md:153Health Scoring Is Manipulated to Promote Vendor-Specific Packages
scripts/generate-report.sh:137Persistent HTML Reports Render Diagnostic Data Without Escaping
data_collect.md:79Raw Secret-Bearing Configuration Is Loaded into Agent Context
data_collect.md:197Full Personal Workspace Identity Files Are Collected Beyond Diagnostic Need
scripts/collect-skills.sh:204Collection Performs Undisclosed External Registry Requests
fix_cases.md:995Health Workflow Encourages Installation of Persistent Autonomous Scheduled Tasks
fix_cases.md:1120Persistent Environment Modification Has an Incomplete Rollback
The declared description promises a comprehensive OpenClaw health inspector spanning hardware, config, security, skills, and autonomy, with broad diagnostic and troubleshooting behavior. The supplied code only invokes openclaw channels list and parses the textual output into structured JSON. It gathers channel status, auth providers, plugin registration, config warnings, usage text, and version/commit info. While some of this loosely overlaps with config/security/skills metadata, the code does not examine hardware, general system state, or autonomy, and it does not perform remediation. Its actual scope is much narrower and centered on channel-related CLI output parsing, so the description materially overstates the behavior.
The description claims a comprehensive health inspector spanning hardware, config, security, skills, and autonomy for OpenClaw instances. The provided code only reads and validates the OpenClaw configuration file and optionally invokes openclaw config validate. Its analysis is confined to config sections such as gateway, agents, tools, messages, and session, with a few cross-field checks that touch on security exposure and heartbeat behavior. It does not inspect hardware, system status, runtime health, installed skills behavior, or general troubleshooting state. While the code does cover part of the declared config/security/autonomy scope, the declared primary purpose is materially broader than the actual implementation, so this is a mismatch.
The code is related to system health collection, so it partially aligns with the declared health-check theme, especially the hardware/domain inventory aspect. However, the declared description promises a broader autonomous health inspector across five domains including config, security, skills, and autonomy, and suggests diagnostic/troubleshooting behavior. The supplied code only gathers environment metadata and resource stats, plus versions of relevant tools. It performs no checks, scoring, validation, remediation, or domain-specific inspection for security, skills, or autonomy. Therefore the description materially overstates the actual behavior.
The declared description promises a comprehensive autonomous health inspector spanning five domains, but the supplied code implements a much narrower gateway/CLI health collection utility. Its primary behaviors are: run openclaw health --json, parse openclaw.json for gateway settings, probe localhost gateway endpoints (/, /openclaw, /hooks) via curl, and report versions for clawhub and openclaw. This supports a partial configuration/connectivity check, but not the advertised hardware, skills, autonomy, or substantive security diagnostics. Additionally, while permission declarations are empty, the script reads a local config file and performs local network probing; that inconsistency strengthens the mismatch, though the main issue is the materially narrower purpose than declared.
The declared description promises a comprehensive health inspector spanning five domains (hardware, config, security, skills, autonomy) for OpenClaw instances. The supplied code does something narrower: it only inspects files in the OpenClaw logs directory and derives diagnostics from log contents. It does not check hardware resources, configuration files, security settings, installed skills, or autonomy subsystems directly. While log analysis is relevant to diagnostics and health reporting, the actual behavior is only one slice of the declared scope, making the description materially broader than what this code chunk actually does.
The declared description presents a broad autonomous health inspector spanning five domains (hardware, config, security, skills, autonomy). The supplied code chunk, however, implements only the security portion: platform security audit ingestion, sensitive file permission checks, secret/credential scanning in files, and gateway exposure analysis. That is a materially narrower and different actual behavior than the declared multi-domain healthcheck. The triggers for diagnostics/health checks are broadly compatible, but the code does not support most of the promised domains. Therefore this is a description-behavior mismatch.
The code is narrowly focused on skill inventory and tooling/ecosystem discovery, not a general system health inspector across the five declared domains. While it does partially relate to the 'skills' domain, it does not implement hardware checks, substantive config diagnostics, security checks, or autonomy analysis. It also performs undeclared capability checks against the local gateway /tools endpoint and clawhub/registry availability, plus BotLearn package discovery. Therefore the declared description materially overstates and misrepresents the code's actual primary behavior.
The declared description presents the skill as an autonomous health inspector/doctor for OpenClaw instances. However, the provided code only formats existing analysis data from a JSON input into Markdown and HTML reports. It reads a file, builds status summaries and issue tables, and writes report files. There is no evidence of collecting system state, running checks across the claimed domains, inspecting security/configuration/hardware, or fixing issues. While report generation could be a supporting part of a healthcheck skill, this chunk’s actual primary behavior is reporting, not inspection. Therefore the description does not accurately represent this code chunk.
The trigger set includes broad conversational phrases such as 'diagnose', 'doctor', 'what's wrong', and 'fix my setup', which can activate the skill during unrelated conversations. Because activation leads to autonomous system inspection and data collection, accidental invocation can expose local configuration, logs, identity listings, and security-relevant metadata without the user intending a deep audit.
The command chains curl output directly into sudo bash, combining network retrieval, shell execution, and privilege escalation in one step. In the context of a diagnostic skill that may be used operationally, this pattern is especially risky because it lowers friction for dangerous execution and could be adopted verbatim by users or downstream automation.
| < 16 | ❌ | -40 | Unsupported — OpenClaw will not run |
**Fix (darwin):** `brew install node` or `nvm install --lts`
**Fix (linux):** `curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo bash -`
---
The command curl -fsSL https://clawhub.io/install | bash executes remote script content directly in a shell without prior verification. This is a well-known dangerous pattern because compromise of the endpoint, transport, or served content can lead to arbitrary code execution on the host.
| `clawhub_available = true`, `registry_reachable = false` | ⚠️ | -10 — clawhub present but offline |
| `can_install = true` | ✅ | 0 — self-improvement is fully enabled |
**Fix (clawhub missing):** `npm install -g clawhub` or `curl -fsSL https://clawhub.io/install | bash`
**Fix (registry unreachable):** Check internet connectivity; try `clawhub ping`
---
ls ... | tail ... | xargs rm -f is a brittle deletion pipeline that can mis-handle filenames with whitespace/newlines and can behave unexpectedly when globs do not match. In an autonomous healthcheck/fix workflow, destructive one-liners are more dangerous because users may execute them during routine maintenance with limited review.
find $OPENCLAW_HOME/logs/ -name "*.log" -mtime +7 -exec gzip {} \;
# 3. Clean old health reports (keep last 10)
ls -t $OPENCLAW_HOME/memory/health-reports/*.md | tail -n +11 | xargs rm -f
ls -t $OPENCLAW_HOME/memory/health-reports/*.html | tail -n +11 | xargs rm -f
# 4. Prune npm cache if skills use node_modules
This second xargs rm -f cleanup command has the same risk profile: unsafe filename handling and potentially destructive bulk deletion in a maintenance context. Because it targets generated reports, mistakes may erase diagnostic history needed for incident response or troubleshooting.
# 3. Clean old health reports (keep last 10)
ls -t $OPENCLAW_HOME/memory/health-reports/*.md | tail -n +11 | xargs rm -f
ls -t $OPENCLAW_HOME/memory/health-reports/*.html | tail -n +11 | xargs rm -f
# 4. Prune npm cache if skills use node_modules
npm cache clean --force
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
Rollback:
rm $OPENCLAW_HOME/cron/<task>.json
openclaw cron reload
The assessment cleanup command again chains ls, tail, and xargs rm -f, creating the same unsafe bulk-deletion pattern. Within a self-managing skill, this is particularly risky because it normalizes destructive maintenance actions that could delete the wrong files or important audit artifacts.
# 2. Archive old assessment results (keep last 20)
cd $OPENCLAW_HOME/memory/
ls -t assessments/*.md | tail -n +21 | xargs rm -f
# 3. Compress old health reports (keep last 10 uncompressed)
cd $OPENCLAW_HOME/memory/health-reports/
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
export NODE_OPTIONS="--max-old-space-size=4096"
# 3. Add to openclaw startup config
echo 'export NODE_OPTIONS="--max-old-space-size=4096"' >> $OPENCLAW_HOME/.env
# 4. If segfault from native module: rebuild
cd $OPENCLAW_HOME
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
const sensitiveTargets = [
HOME + "/openclaw.json",
HOME + "/identity",
HOME + "/.env"
];
// Find auth-profiles.json in agent dirs
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
const sensitiveTargets = [
HOME + "/openclaw.json",
HOME + "/identity",
HOME + "/.env"
];
// Find auth-profiles.json in agent dirs
This code explicitly includes configuration files and .env files in a credential exposure scan, meaning the skill reads potentially secret-bearing files from the user's OpenClaw home and processes their contents. Although values are redacted in output, the agent still gains access to the plaintext secrets during scanning, which increases privacy risk and could expose credentials if the process, logs, or downstream handling are compromised.
// Scan: config files, .env, log files (limited)
const scanDirs = [
{ dir: HOME, exts: [".json", ".yaml", ".yml", ".toml", ".env", ".conf"], depth: 1 },
{ dir: HOME + "/config", exts: ["*"], depth: 2 },
{ dir: HOME + "/logs", exts: [".log", ".err.log"], depth: 1 }
];
This line adds ~/.env to the scan target set, causing the script to open and inspect a common secret store for API keys, passwords, and tokens. In the context of an autonomous health-check skill, reading such files is sensitive behavior because it broadens the agent's access to credentials beyond what's needed for a basic system check.
collect(dir, depth);
}
// Also check .env at home level
const envFile = HOME + "/.env";
if (fs.existsSync(envFile)) scanTargets.add(envFile);
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
if clawhub ping 2>/dev/null || { clawhub info --json 2>/dev/null | grep -q '"registry"'; }; then
registry_reachable="true"
can_install="true"
elif curl -s --connect-timeout 5 --max-time 8 "https://registry.clawhub.io" &>/dev/null; then
registry_reachable="true"
can_install="true"
fi
The README describes broad autonomous collection of system data, direct reading of config/state files, and writing reports to disk, but it does not present a prominent upfront warning about the sensitivity of the data being gathered and persisted. Users may invoke the skill without realizing it can inspect secrets-adjacent files, logs, and configuration and store reports under a predictable path, increasing privacy and data exposure risk.
The trigger set includes very broad phrases such as "doctor," "diagnose," "check system," and "what's wrong," which can match ordinary user requests and cause the skill to activate unexpectedly. In this skill's context, unintended activation is more dangerous because the skill is designed to collect wide-ranging system, configuration, log, and security data and may later guide remediation actions.
The skill explicitly instructs the agent to read local files, inspect environment data, and invoke shell/CLI commands, but it declares no tool scope or permission boundaries. That creates hidden capability expansion: a user invoking a benign-sounding health check could cause broad host inspection without clear authorization controls.
The description frames activation around broad diagnostics and system-health requests without clear boundaries, increasing the chance that users invoke it without understanding its invasive collection scope. In this skill, that matters because activation can cascade into shell execution, filesystem inspection, log access, and persistent report generation.
No suspicious patterns detected.