Back to skill

Security audit

Essential Skills Installer

Security checks for vulnerabilities and agentic risk

Overview

This skill is an installer for other OpenClaw skills, but it can force-install multiple mutable third-party skills with limited provenance checks and some misleading scope documentation.

Review the exact skills before installing, especially memory, self-improvement, and Notion-related skills. Avoid running the script unless you are comfortable letting it replace existing installed skills, and prefer pinned, publisher-verified installs 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)

T08 · Insecure Dependencies

Error
Location
install.sh:11
Finding

Unverified and Unpinned Third-Party Skill Installation

Content
View full analysis
/dev/null; then echo " ✅ $skill 安装成功" ((SUCCESS++)) else echo " ❌ $skill 安装失败" ((FAILED++)) FAILED_LIST+=("$skill") fi done ``` ### Technical Analysis The installer retrieves and installs eight third-party skills using mutable package names. It does not pin package versions, verify checksums or signatures, validate the resolved publisher or source, or inspect the downloaded artifacts before installation. The `--force` option further increases risk because it may overwrite an existing trusted installation without preserving or comparing the installed version. Redirecting standard error to `/dev/null` also hides security-relevant package resolution and installation diagnostics. The project does not contain evidence that any listed package is currently malicious. The vulnerability is the unsafe trust model: the effective installed content is determined by external registry state at execution time and can differ from what was reviewed. ### Attack Path 1. An attacker compromises the package registry, a publisher account, or one of the named skill packages. 2. The attacker publishes a malicious release under an existing mutable skill name. 3. A user or agent executes `install.sh` and confirms installation. 4. The script invokes `skillhub install "$skill" --force`. 5. The external package is downloaded without version, signature, or checksum validation. 6. The malicious or compromised skill replaces any exist ...[truncated 1061 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
install.sh:63
Finding

Shell Error Handling Causes Premature Termination During Counter Updates

Content
View full analysis
/dev/null; then echo " ✅ $skill 安装成功" ((SUCCESS++)) else echo " ❌ $skill 安装失败" ((FAILED++)) FAILED_LIST+=("$skill") fi done ``` ### Technical Analysis Bash arithmetic commands return a success status when the resulting expression is nonzero and a failure status when it evaluates to zero. A post-increment expression evaluates to the variable's value before incrementing. Both counters are initialized to zero. Therefore, the first execution of either `((SUCCESS++))` or `((FAILED++))` evaluates to zero and returns exit status 1. Because the script enables `set -e`, that nonzero status can terminate the installer immediately. This means the script may stop after the first attempted installation, regardless of whether that installation succeeds or fails. The remaining skills may not be processed, and the final result summary may not be shown. ### Attack Path 1. A user launches `install.sh` and confirms installation. 2. The first `skillhub install` command either succeeds or fails. 3. The corresponding zero-valued counter is updated using post-increment. 4. The arithmetic command returns exit status 1 because its pre-increment value was zero. 5. `set -e` causes the shell to terminate the script. 6. The environment is left with only a partial set of requested skills, and the completion summary is skipped. An external attacker is not required to trigger this issue. A malicious or unreliable package source could nevertheless exploit the predictable early termination to disrupt deployment or leave an inconsistent installation state. ### Impact Assessment The primary impact ...[truncated 698 chars]
Remediation
View remediation
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 (6)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The trigger phrases are broad and generic enough to overlap with ordinary user requests such as installation or initialization. In a skill whose primary action is to run an installation script, broad triggering increases the chance of unintended activation that could cause unauthorized system changes or package installation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill instructs running a shell script and says the AI will automatically execute it, but it does not present warnings about system modification, package provenance, permissions, or user consent. In the context of an installer skill, omitting these safeguards is dangerous because it normalizes silent execution of code that can alter the system and potentially install risky downstream skills.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The example invocation '帮我安装必备技能' is highly generic and likely to match normal conversational requests. Because the skill is designed to invoke a shell installer, this broad activation pattern creates a realistic risk of accidental execution and unintended changes to the host environment.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

All user-facing strings in the script are in Chinese, including installation prompts, status messages, and configuration guidance. This imposes a specific language on users without offering opt-in, fallback, or documenting that the skill is intended only for a Chinese-speaking audience.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
98% confidence
Finding

L38 写明“全部安装 5 个必备技能”,但同一文档在 L22-L32 实际列出了 8 个将被“一键全部安装”的技能。这不是单纯信息缺失,而是安装范围说明彼此冲突,可能误导用户对脚本实际行为和安装规模的判断。

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

L50 明确表示“AI 会自动运行安装脚本”,这属于对实际执行行为的承诺;但本文件仅包含文档内容,没有任何可验证的自动执行实现。该表述会让用户误以为该技能本身具备直接触发脚本执行的代码能力,构成文档意图与可见实现之间的偏差。

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.