Back to skill

Security audit

Auto Skill Loader

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed automatic skill router, but it can automatically load and follow other local skill instructions with broad triggers and limited user confirmation.

Install only in environments where you trust the local skill directories it scans. Prefer explicit confirmation before loading any newly discovered or changed skill, disable routing unless needed, and use a pinned installer version rather than @latest for higher assurance.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T01 · Skill Instruction Hijacking

Error
Location
SKILL.md:101
Finding
Automatic Loading of Untrusted Skill Instructions## Vulnerability Details **File Location**: `SKILL.md`, lines 101-105 **Vulnerability Type**: Untrusted instruction loading and execution **Risk Level**: High ### Vulnerable Code Snippet ```markdown ### Step 5: Load and Execute After finding a matching Skill: 1. Read the complete `SKILL.md` 2. Execute the task according to its instructions 3. Load resources under `scripts/` or `references/` when needed ``` ### Technical Analysis The loading process directs the Agent to read and follow the complete instructions of a dynamically discovered Skill. Skills are discovered from several local directories, and undeclared protection levels default to `dynamic`. There is no required signature verification, integrity validation, trusted-source allowlist, instruction isolation, or security review before a matching Skill is loaded. An attacker who can place or modify a Skill in one of the scanned directories can provide benign-looking frontmatter metadata while embedding malicious instructions in the body of `SKILL.md`. The attacker can craft the description to increase the likelihood that a particular user request selects the malicious Skill. Although `scripts/auto-skill-loader.js` only enumerates and parses Skill metadata, the governing instructions explicitly direct the Agent to load the complete Skill and act according to its contents. This crosses a trust boundary by treating dynamically discovered local instructions as executable Agent guidance. ### Attack Path 1. An attacker gains the ability to install, replace, or modify a Skill beneath a scanned Skill directory. 2. The attacker creates a `SKILL.md` with a plausible name and description that matches expected user requests. 3. The Skill is assigned `dynamic`, either explicitly or through the default classification. 4. A user submits a request matching the malicious Skill metadata. 5. The loader identifies the malicious Skill as a candidate. 6. Following Step 5, the ...[truncated 1145 chars]
Remediation
## Remediation Suggestions 1. Restrict automatic loading to Skills from an explicit trusted allowlist. 2. Require cryptographic signature and integrity verification before loading a Skill. 3. Treat all loaded Skill text as untrusted data that cannot override system instructions, user intent, tool policies, or safety constraints. 4. Require explicit user confirmation before the first execution of each newly discovered or modified Skill. 5. Record and verify a content hash for approved `SKILL.md`, `scripts/`, and `references/` files. 6. Perform a separate authorization check for every requested tool call, filesystem path, network destination, and subprocess operation. 7. Do not automatically load executable resources merely because a Skill references them. 8. Display the selected Skill, source path, requested capabilities, and integrity status before execution. 9. Prefer least-privilege sandboxing for third-party Skills, with network and sensitive-file access disabled by default.

T08 · Insecure Dependencies

Warning
Location
README.md:35
Finding
Mutable Unpinned Package Executed During Installation## Vulnerability Details **File Location**: `README.md`, line 35 **Vulnerability Type**: Unpinned package execution through `npx` **Risk Level**: Medium ### Vulnerable Code Snippet ```bash npx clawhub@latest install auto-skill-loader ``` ### Technical Analysis The documented installation command instructs users to retrieve and execute the mutable `latest` release of the `clawhub` package. The effective installer code can therefore change after this project has been reviewed. `npx` may download and execute package code from the configured package registry. If the upstream package, publisher account, registry resolution, or latest release is compromised, the installation command can execute code that was not included in this audit. No exact package version or integrity value is provided to bind installation to a reviewed artifact. ### Attack Path 1. An attacker compromises the upstream package publisher, package contents, registry account, or release process. 2. The attacker publishes a malicious version and causes it to resolve through the `latest` distribution tag. 3. A user follows the installation command from the README. 4. `npx` retrieves the current package associated with `clawhub@latest`. 5. The package or its installation logic executes with the permissions of the user running the command. 6. The malicious installer can perform any operation allowed to that user before installing, replacing, or impersonating the intended Skill. ### Impact Assessment A compromised installer can execute arbitrary code with the invoking user's privileges. Depending on those privileges, the impact can include: - Modification or theft of user-accessible files. - Installation of malicious or altered Skills. - Access to credentials available in files or environment variables. - Modification of the Agent environment or configuration. - Additional package retrieval or persistent compromise. The project does not itself c ...[truncated 155 chars]
Remediation
## Remediation Suggestions 1. Replace `@latest` with an exact reviewed package version. 2. Publish and verify the package integrity hash or signed provenance for the pinned artifact. 3. Document the expected publisher identity and trusted registry. 4. Prefer an installation workflow backed by a lockfile or immutable artifact. 5. Disable package lifecycle scripts where compatible with the installer. 6. Review a new installer version before updating the documented pin. 7. For high-assurance deployments, download the package without executing it, verify its signature and contents, and then install it in a restricted environment.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • 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
Findings (17)

Vague Triggers

High
Confidence
96% confidence
Finding
Saying the skill can activate when the user 'directly describes a task' makes the invocation boundary extremely broad. In an auto-loading skill, this can cause unintended activation on ordinary conversation, which may then load or route other skills without clear user consent, increasing the chance of prompt/skill confusion and privilege expansion.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The description claims an automatic skill loader that detects task type, matches the best skill, and auto-loads it. However, the code is primarily a discovery/classification CLI utility: it scans directories, parses SKILL.md frontmatter, resolves protection levels, deduplicates by priority, and prints categorized skill lists or metadata. In dry-run mode it explicitly says intent matching is performed by the Agent and that it only provides a candidate pool. There is no implementation that analyzes incoming tasks, scores skills against task intent, or loads/enables a selected skill. The protection-level behavior is broadly aligned with the description, but the core promised functionality—automatic intent-based matching and loading—is absent, making this a material description/behavior mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The description presents a high-level automatic skill router/loader that analyzes incoming tasks and dynamically selects and loads skills. The actual code chunk does none of that. It is a standalone utility for parsing and serializing a limited YAML format, likely usable as a helper for reading metadata, but it does not inspect tasks, choose skills, enforce protection levels, or load anything. This is a material description-behavior mismatch, not merely an implementation detail.

Vague Triggers

High
Confidence
96% confidence
Finding
The trigger condition is extremely broad, including effectively any situation where the agent might decide which skill to use. In practice this can cause unsolicited activation of a skill that scans directories, reads metadata, and potentially routes tasks, expanding its influence across ordinary conversations without clear user intent.

Ae1

High
Category
analysis-evasion
Content
1. 读取完整 `SKILL.md`
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding
The installation command uses `npx clawhub@latest`, which pulls the newest package version at execution time rather than a reviewed, fixed version. This creates a supply-chain risk: a compromised upstream release or breaking change could cause users to install and run unexpected code when following the README.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The trigger phrase '动态加载' is generic everyday language and is likely to appear in benign discussion unrelated to invoking this skill. Because this skill dynamically selects and loads other skills, accidental triggering can have outsized consequences by changing the agent's behavior unexpectedly.

Lp3

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding
The skill instructs the agent to inspect environment-dependent locations and infer installation paths, but it declares no tool scope or permissions boundaries. In a loader skill that scans the workspace, home directory, and installation tree, missing explicit scope increases the chance of unintended file access and overbroad capability use.

Vague Triggers

Medium
Confidence
86% confidence
Finding
Marketing the skill as zero-configuration and universally compatible encourages deployment with minimal review while leaving activation scope underconstrained. In context, this makes broad automatic behavior more dangerous because operators may assume it is safe everywhere despite scanning and routing semantics that vary by environment.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The file's human-readable comments are written entirely in Chinese, which imposes a specific language on users and maintainers without any opt-in or indication that the skill is region-specific. Under the policy, language constraints are only acceptable when they are optional or clearly justified.

Natural-Language Policy Violations

Medium
Confidence
84% confidence
Finding
The package description is written entirely in Chinese and states the skill behavior in that language, with no indication that users can choose their preferred language or locale. Under the policy for natural-language violations, forcing or assuming a specific language without opt-in can be a locale-policy issue.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
This JavaScript file contains natural-language comments and user-facing console output in Chinese, including usage/help text and status messages. Because the skill does not offer any language or locale selection and is not clearly documented as region-specific, it violates the policy against forcing a specific language without user opt-in.

Intent-Code Divergence

Medium
Confidence
91% confidence
Finding
The usage comments present the script as an 'Auto Skill Loader' and describe '--dry-run' as simulating matching, but the actual runtime behavior only prints discovered skills. The code later explicitly says matching is done by the agent and this script merely lists candidates, which contradicts the stated operational intent of automatic loading.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The manifest describes a skill that detects task type, matches the best skill, and automatically loads it. In this implementation, the CLI only lists skills, checks protection levels, and performs a dry-run that explicitly states '意图匹配由 Agent 完成,此处仅列出候选池', meaning matching is not done here and no loading occurs.

Natural-Language Policy Violations

Low
Confidence
72% confidence
Finding
All user-facing instructions, trigger descriptions, and configuration guidance are presented only in Chinese, which can amount to an implicit language constraint. The file does not indicate that other languages are supported or that Chinese-only behavior is an intentional, documented locale limitation.

Intent-Code Divergence

Low
Confidence
86% confidence
Finding
Lines L132-L145 state that when routing fails, the skill should directly reply to the user explaining the failure. However, the same prescribed message explicitly offers option 2: '让我在当前 Agent 尝试处理', which contradicts the stated 'directly reply ... routing failed' behavior by presenting a local fallback path after saying silent fallback should be avoided.

Natural-Language Policy Violations

Low
Confidence
93% confidence
Finding
The natural-language comments and description are entirely in Chinese, including the primary file description and usage notes. Under the stated policy, forcing a specific language without user opt-in or documented regional justification is a language/locale policy violation.

Static analysis

No suspicious patterns detected.