Back to skill

Security audit

Skill Radar

Security checks for vulnerabilities and agentic risk

Overview

Skill Radar is a coherent skill-management tool, but it reads broad private OpenClaw history and has unsafe shell-based ClawHub command execution that needs review before installation.

Install only after accepting that this skill may read your OpenClaw session history, memories, user profile/config files, and skill directories. Avoid running all, recommend, or versions in a sensitive environment until shell command construction is fixed, ClawHub CLI execution is pinned or locally verified, and history analysis has explicit source limits and consent controls.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/utils.py:233
Finding

Shell Command Injection Through Untrusted Skill Names

Content
View full analysis
str: """Run a shell command and return stdout.""" try: result = subprocess.run( ["/bin/sh", "-c", cmd], capture_output=True, text=True, timeout=timeout ) return result.stdout.strip() ``` ```python # scripts/scanner.py:41-46 # Call the ClawHub API try: result = run_cmd(f"npx clawhub search \"{query}\" --limit {limit}", timeout=30) skills = [] if result: for line in result.strip().split("\n"): ``` ```python # scripts/scanner.py:215 inspect_output = run_cmd(f"npx clawhub inspect {skill_name} 2>&1", timeout=15) ``` ```python # scripts/checks.py:172-176 def inspect_clawhub_version(skill_name: str) -> str | None: """Obtain the latest Skill version through clawhub inspect.""" output = run_cmd( f"npx clawhub inspect {skill_name} 2>/dev/null", timeout=15 ) ``` ### Technical Analysis The common `run_cmd` helper executes every supplied command through `/bin/sh -c`. Several callers construct command strings by interpolating `skill_name` without quoting, validation, or argument separation. In the recommendation flow, Skill names are parsed from ClawHub search output using `^(\S+)`, which permits shell metacharacters such as semicolons, pipes, command substitutions, and redirection operators. These remotely supplied names are subsequently passed to `security_scan_skill`, where they are interpolated directly into a shell command. The version-check path has the same defect for names parsed from `npx clawhub list`. The fixed recommendation queries currently limit exploitation through `query`, but the shared ...[truncated 1426 chars]
Remediation
View remediation
str: result = subprocess.run( args, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, text=True, timeout=timeout, check=False, shell=False, ) return result.stdout.strip() ``` 2. Invoke ClawHub with separated arguments: ```python run_cmd(["npx", "--no-install", "clawhub", "inspect", skill_name], timeout=15) run_cmd(["npx", "--no-install", "clawhub", "search", query, "--limit", str(limit)]) ``` 3. Validate every Skill name before use: ```python if not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9._-]*", skill_name): raise ValueError("Invalid Skill name") ``` 4. Require `limit` to be an integer within a small fixed range. 5. Replace shell redirections with `stderr=subprocess.DEVNULL`. 6. Treat registry and CLI output as untrusted, even when produced by an expected executable. 7. Add regression tests covering semicolons, pipes, backticks, `$()`, newlines, and redirection characters. ]]>

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/usage_analyzer.py:68
Finding

Excessive Collection of Private Agent Memories and Session History

Content
View full analysis
str: """ Load plain text from user messages in Session logs. Strictly filter system messages, metadata, and sub-agent messages. """ if not SESSIONS_DIR.is_dir(): return "" user_texts = [] for session_file in sorted(SESSIONS_DIR.glob("*.jsonl")): try: content = session_file.read_text(encoding="utf-8", errors="replace") ``` ```python # scripts/report.py:83-101 def _collect_user_context(session_files): """Collect user messages and workspace configuration.""" all_user_messages = _parse_user_messages_from_sessions(session_files) workspace_files = [ HOME / ".openclaw/workspace/MEMORY.md", HOME / ".openclaw/workspace/USER.md", HOME / ".openclaw/workspace/HEARTBEAT.md", ] for wf in workspace_files: if wf.is_file(): try: text = wf.read_text(encoding="utf-8", errors="replace") if len(text) > 10: all_user_messages.append(f"[config] {text}") except Exception: pass return all_user_messages ``` ```python # scripts/health_check.py:44-49 def main(): if len(sys.argv) < 2: cmd = "all" else: cmd = sys.argv[1].lower().strip() ``` ### Technical Analysis The Skill reads all main-Ag ...[truncated 2334 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
scripts/scanner.py:41
Finding

Unpinned Runtime Execution of the ClawHub Package Through npx

Content
View full analysis
&1", timeout=15) ``` ```python # scripts/checks.py:156-175 def parse_clawhub_list() -> dict[str, str]: """Parse `npx clawhub list` output and return {skill_name: version}.""" output = run_cmd("npx clawhub list 2>/dev/null", timeout=60) if not output: return {} versions = {} for line in output.split("\n"): line = line.strip() m = re.match(r'^(\S+)\s+(\d+\.\d+\.\d+)', line) if m: versions[m.group(1)] = m.group(2) return versions def inspect_clawhub_version(skill_name: str) -> str | None: """Obtain the latest Skill version through clawhub inspect.""" output = run_cmd( f"npx clawhub inspect {skill_name} 2>/dev/null", timeout=15 ) ``` ```bash # README.md:31-36 # Install via ClawHub (recommended) npx clawhub install skill-radar # Or install manually cp -r skill-radar ~/.openclaw/workspace/skills/ ``` ### Technical Analysis The project repeatedly invokes `npx clawhub` without pinning a package version or enforcing the use of an already installed, verified executable. `npx` can resolve packages through npm and, depending on the environment and cache state, may download and execute package code that is outside this audited repository. Consequently, the effective runtime dependency can change after the Skill has been reviewed. The repository includes no npm lockfile, i ...[truncated 1301 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (46)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

This variant of the mismatch explicitly notes access to user/session memory and logs that is more invasive than the broad description implies. Under-describing collection and analysis of conversation history can cause users to invoke the skill without understanding that sensitive records may be parsed, creating a transparency and privacy risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
89% confidence
Finding

This variant of the mismatch explicitly notes access to user/session memory and logs that is more invasive than the broad description implies. Under-describing collection and analysis of conversation history can cause users to invoke the skill without understanding that sensitive records may be parsed, creating a transparency and privacy risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

This variant of the mismatch explicitly notes access to user/session memory and logs that is more invasive than the broad description implies. Under-describing collection and analysis of conversation history can cause users to invoke the skill without understanding that sensitive records may be parsed, creating a transparency and privacy risk.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/scanner.py (reported line 103)May include surrounding context.

python
(r'~?/\.ssh', "访问SSH密钥目录"),
    (r'~?/\.aws', "访问AWS凭证目录"),
    (r'~?/\.config/(git|credentials)', "访问系统凭证配置"),
    (r'keychain|security\s+find', "访问系统钥匙串"),
    (r'os\.environ', "读取环境变量(可能包含密钥)"),
    (r'getenv\s*\(', "读取环境变量"),
    # 隐私文件访问

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

This utility file exposes a reusable arbitrary command-execution primitive that is broader than the skill's stated purpose of diagnostics, discovery, and optimization. Such a helper increases attack surface substantially because any present or future code path can invoke it to run unexpected shell commands under the user's privileges.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The README advertises recommendation and version-check features that rely on external tooling, but it does not clearly disclose that workspace-derived metadata or usage context may be exposed to those tools or their network interactions. Users may incorrectly assume all analysis is purely local and privacy-preserving.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README states that the skill analyzes session logs and conversation history, but it does not prominently warn users that these sources may contain sensitive or personal data. This can lead users to run the tool without understanding the privacy implications of local data inspection and possible downstream exposure through reports or integrations.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
80% 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 · README.md (reported line 105)May include surrounding context.

md
- **Installed Skills**: Code-level scan (25+ red flag rules)
- **Uninstalled Skills**: Metadata-level check (author, update time, etc.)
- 🔴 High-risk Skills automatically removed from recommendation list
- Scan results cached for 7 days, recommendation results cached for 24 hours

## Zero-Config Principle

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
84% confidence
Finding

The skill advertises capabilities that imply file access, shell execution, and network use, but it does not declare an explicit tool scope such as permissions or allowed-tools. That creates unnecessary ambiguity about what the skill may access at runtime and weakens least-privilege controls, especially for a skill that inspects logs, memory files, and version sources.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

Broad trigger phrases increase the chance that the skill activates on ordinary discussion about skills rather than an intentional request to run diagnostics. Because this skill may read logs, memory, and potentially invoke shell/network operations, accidental activation raises privacy and unintended-action risk.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger conditions include ambiguous examples such as general questions about unused skills or updates, which may match normal conversation. In a skill with diagnostic and data-reading behavior, ambiguous activation can lead to unrequested inspection of local context and external lookups.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill states it analyzes conversation history and session logs but provides no user-facing privacy warning or consent mechanism. Those data sources can contain sensitive prompts, credentials, business context, or personal information, so silent analysis meaningfully increases privacy and data-handling risk.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

Using 'npx clawhub' without pinning a specific version allows execution of whatever package version is current at invocation time. This introduces supply-chain risk because a compromised, malicious, or breaking upstream release could be fetched and executed automatically.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This code file contains natural-language documentation and output text exclusively in Chinese, including the module docstring and later generated report content. Under the policy, forcing a specific language without user opt-in is a locale/language policy violation unless the tool is clearly documented as region-specific, which is not indicated here.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding

The code invokes npx clawhub without pinning a specific package version, so execution behavior depends on whatever version NPX resolves at runtime. If the package is updated maliciously or unexpectedly, the skill could run unreviewed code during a diagnostic action, increasing supply-chain risk.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding

This runtime call relies on an unpinned npx clawhub package, which allows a different remote package version to be fetched or executed over time. In a skill-management tool that users may trust for diagnostics, that creates a realistic supply-chain execution path.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

The command npx clawhub inspect {skill_name} both uses an unpinned NPX package and interpolates skill_name directly into a shell command. Even aside from the static finding, this expands the risk: a malicious or malformed skill name could trigger shell injection if it originates from untrusted command output.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This code file includes user-facing natural-language descriptions and command help entirely in Chinese, presenting the skill interface in a fixed language. The policy requires flagging language or locale constraints when the skill forces a specific language without user opt-in or documented justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module header and user-facing strings are written entirely in Chinese, indicating the skill is designed around a fixed language/locale. There is no visible opt-in, language selection, or justification that this is a region-specific tool, which conflicts with the policy against forcing a specific language without user choice.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The code aggregates historical session logs plus workspace files such as MEMORY.md, USER.md, and HEARTBEAT.md to infer user needs, which materially expands data access beyond simple skill diagnostics. Even if intended for recommendations, this creates an undisclosed privacy-sensitive behavior because the skill analyzes broad user content that may contain secrets, personal data, or unrelated project information.

Content

No source excerpt is available for this finding.