Back to skill

Security audit

Distill Skill Builder

Security checks for vulnerabilities and agentic risk

Overview

The skill has a coherent skill-building purpose, but it gives broad instructions to fetch remote content, modify evaluators, and copy generated skills into active assistant folders without enough scoping or approval safeguards.

Review before installing. Use this only in a staging workspace, approve each URL and destination path, do not crawl untrusted or internal URLs, do not deploy generated skills into active assistant directories until their contents are reviewed for prompt injection, and avoid evaluator patches unless you maintain that evaluator under normal code review.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T09 · Insecure Skill Coding Practices

Warning
Location
references/crawling-guide.md:110
Finding

Unrestricted URL Fetching Enables Server-Side Request Forgery and Unsafe Browser Navigation

Content
View full analysis
str: headers = {"User-Agent": "Mozilla/5.0"} resp = requests.get(url, headers=headers, timeout=30) soup = BeautifulSoup(resp.text, "html.parser") elem = soup.select_one(selector) or soup.body return elem.get_text(separator="\n", strip=True) ``` From `references/crawling-guide.md:205-215`: ```javascript // Node.js playwright path (built into Hermes Agent) const {chromium} = require('/home/yhongm/.hermes/hermes-agent/node_modules/playwright'); const browser = await chromium.launch({ headless: true, args: ['--no-sandbox', '--disable-gpu'] }); const page = await browser.newPage(); await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 }); await page.waitForTimeout(8000); const text = await page.innerText('body'); ``` ### Technical Analysis The crawling examples accept a URL and pass it directly to `requests.get()` or `page.goto()` without enforcing a trusted scheme, host, port, or resolved-address policy. There is no protection against URLs resolving to: - Loopback addresses such as `127.0.0.1` or `::1` - RFC 1918 private networks - Link-local addresses - Cloud instance metadata services - Internal DNS names - Redirects from a public host to an internal address If an untrusted user can influence the documentation source URL, these examples create a server-side request forgery primitive from the environment running the Skill. The browser example also launches Chromium with `--no-sandbox`, unnecessarily weakening process isolation when visiting potentially hostile pages. Time ...[truncated 1660 chars]
Remediation
View remediation

T01 · Skill Instruction Hijacking

Error
Location
SKILL.md:192
Finding

Untrusted Crawled Content Can Be Deployed as Persistent Agent Skill Instructions

Content
View full analysis
Source: {url}\n") f.write(f"> Crawl time: {datetime.now().strftime('%Y-%m-%d')}\n\n") f.write(content) return filepath ``` From `SKILL.md:901-929`: ```bash SKILL_NAME="" # When used from Hermes, synchronize the new Skill to Claude and OpenClaw. if [ -d "$HOME/.claude/skills/${SKILL_NAME}" ]; then mkdir -p "$HOME/.claude/skills/${SKILL_NAME}" cp /${SKILL_NAME}/SKILL.md \ "$HOME/.claude/skills/${SKILL_NAME}/SKILL.md" cp /${SKILL_NAME}/references/*.md \ "$HOME/.claude/skills/${SKILL_NAME}/references/" fi if [ -d "$HOME/.openclaw/skills/${SKILL_NAME}" ]; then mkdir -p "$HOME/.openclaw/skills/${SKILL_NAME}" cp /${SKILL_NAME}/SKILL.md \ "$HOME/.openclaw/skills/${SKILL_NAME}/SKILL.md" cp /${SKILL_NAME}/references/*.md \ "$HOME/.openclaw/skills/${SKILL_NAME}/references/" fi # When used from Claude or OpenClaw, synchronize the new Skill to Hermes. if [ -d "$HOME/.hermes/skills/${SKILL_NAME}" ]; then mkdir -p "$HOME/.hermes/skills/${SKILL_NAME}" cp /${SKILL_NAME}/SKILL.md \ "$HOME/.hermes/skills/${SKILL_NAME}/SKILL.md" cp /${SKILL_NAME}/references/*.md \ "$HOME/.hermes/skills/${SKILL_NAME}/references/" fi ``` From `references/crawling-guide.md:577-609`: ```py ...[truncated 3903 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (32)

Vague Triggers

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger list includes broad phrases like '创建 skill', '整理 skill', and '提升 skill 质量', which can match many ordinary requests and cause the skill to activate unexpectedly. Over-broad activation is dangerous here because the skill contains instructions for network probing, file copying, evaluator patching, and cross-platform sync, so accidental invocation can expose users to higher-risk behaviors than they requested.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The top-level description is presented in Chinese and the rest of the README continues in Chinese, with no indication that users may choose another language or that the locale is intentionally restricted. Under the policy, forcing a specific language without user opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
79% confidence
Finding

The skill contains operational instructions involving local file access and modification workflows, but its metadata does not declare any explicit tool scope such as allowed tools or permissions. That mismatch increases the chance an agent may infer broader authority than intended and perform file reads/writes implicitly during execution.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
72% confidence
Finding

文件的核心描述与触发词全部固定为中文,且未说明这是仅面向中文用户的区域化技能,也未提供用户可选择语言的机制。按自然语言策略,这种默认强制单一语言而无显式选择,可能构成语言/locale 约束不透明的问题。

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The skill prescribes outbound network probing and content fetching, including ping tests and crawling external URLs, without clear consent, privacy notice, or constraints on destinations. This can leak environment metadata, create unexpected network traffic, or interact with untrusted sites under the guise of normal skill execution.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill instructs users to patch a centralized evaluator script to change scoring behavior for sources, dates, and accepted domains. Because that evaluator is shared infrastructure, modifying it can affect unrelated skills and weaken integrity guarantees, enabling score inflation or trust bypass beyond the scope of a single distillation task.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The documented workflow performs directory creation and file copy operations into local skill paths, but it does not require explicit confirmation or describe the consequences of overwriting or populating those directories. In a skill context, unattended write operations can alter local agent behavior or deploy unreviewed content.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill directs synchronization of generated artifacts into multiple assistant platforms' local skill directories, expanding its effect from content creation into multi-environment deployment. This broadens blast radius: a mistaken or maliciously influenced generated skill could be propagated across several agent runtimes without platform-specific review.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
85% confidence
Finding

The skill checks for and references platform-specific local skill directories such as ~/.claude, ~/.openclaw, and ~/.hermes, effectively enumerating installed assistant environments. In isolation this is modest, but combined with its copy/sync instructions it helps target modifications toward discovered agent installations.

Content

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

md
# 情况 1:在 Hermes 中使用 distill-skill-builder
# → 同步新技能到 Claude 和 OpenClaw 的同名目录
if [ -d "$HOME/.claude/skills/${SKILL_NAME}" ]; then
    mkdir -p "$HOME/.claude/skills/${SKILL_NAME}"
    cp <skill_dir>/${SKILL_NAME}/SKILL.md \
       "$HOME/.claude/skills/${SKILL_NAME}/SKILL.md"
    cp <skill_dir>/${SKILL_NAME}/references/*.md \

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This section provides ready-to-run code that fetches remote content and writes it to local files, but it does not prominently warn that executing it will contact external hosts and persist downloaded data. In an agent skill context, omission of these side effects can lead to unreviewed network access, accidental collection of untrusted content, and local file creation without explicit user awareness.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The headless-browser workflow accesses remote pages, executes page JavaScript, extracts content, and saves results locally, yet the documentation does not clearly surface these behaviors as potentially sensitive side effects. In a skill setting, that increases the risk of users or downstream agents invoking networked browsing and local persistence without informed consent or environment-specific safeguards.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This GitHub API section describes batch retrieval from external APIs and bulk local file writes, but it does not explicitly warn about the scale of external access, API rate-limit implications, or the persistence of downloaded content. In an automation-oriented skill, that omission can cause unintended bulk data transfer and storage activity without adequate user review.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

返回 <1000 字节 → SPA,需要 GitHub API 方案

但 GitHub API 可达

curl -s --max-time 10 "https://api.github.com/repos/cfug/flutter.cn" | head -c 200

返回 JSON → GitHub API 可用

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

返回 <1000 字节 → SPA,需要 GitHub API 方案

但 GitHub API 可达

curl -s --max-time 10 "https://api.github.com/repos/cfug/flutter.cn" | head -c 200

返回 JSON → GitHub API 可用

text

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest describes a pipeline for analyzing, crawling, distilling, structuring, and evaluating knowledge-skill content. In contrast, this section instructs launching a separate Python process and forcibly killing it based on file-progress heuristics, which is an operational process-control capability rather than a direct or necessary part of knowledge distillation itself.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

文件标题及全文说明均以中文固定呈现,未见任何允许用户选择语言/地区的说明,也没有表明该技能仅面向特定中文区域场景。根据语言/locale 政策,若技能强制特定语言而无用户 opt-in,应视为自然语言策略违规。

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The file is framed as a methodology reference, but it contains concrete shell commands that create directories and mutate files on the local filesystem. In an agent skill context, operational commands can expand the skill from advisory content into actionable environment-modifying behavior, which increases the risk of unintended writes, misuse in the wrong workspace, or automated execution by downstream tooling.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The synchronization section instructs copying files into a Hermes skills directory under the user's home environment, introducing deployment behavior tied to a specific runtime. In a skill artifact, this creates a capability for cross-directory propagation and persistent installation beyond simple content distillation, which is risky if followed automatically or without path validation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document is written entirely in Chinese, including the title, instructions, checklist, and examples, with no indication that users may choose another language. Under the policy, a skill that imposes a specific language without user opt-in is a natural-language policy violation unless the locale restriction is explicitly justified.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

This guide explicitly instructs users to modify a centralized evaluator script so the skill can score better, rather than improving the skill within its stated scope. That crosses from content authoring into tampering with an external trust/scoring mechanism, which can undermine evaluation integrity and enable broader abuse if the evaluator is shared across skills.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document explicitly states that trigger quantity should be maximized because it affects scoring, which creates an incentive to overfit for activation rather than relevance. This can lead to ambiguous matching, excessive invocation, and skill hijacking of requests better handled by other skills or baseline behavior.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The guidance recommends broad trigger coverage for common scenarios without emphasizing precision, negative constraints, or disambiguation. In a skill-routing system, this can cause unintended activation, shadowing of more appropriate skills, and increased exposure of downstream instructions or behaviors to unrelated user requests.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This markdown file is written entirely in Chinese and presents normative naming and classification requirements for skills, but it does not indicate that Chinese is optional or that the policy is region-specific. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The title and all guidance in this markdown file are written exclusively in Chinese, presenting the quality standard in a single language with no indication that users may choose another language. Under the policy for natural-language violations, this is a locale/language constraint unless the file explicitly offers opt-in or documents a justified region-specific scope.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The title and introductory instructions prescribe the checklist content in Chinese and present it as applicable to all skills created by the builder. There is no indication that users may choose another language or that the Chinese-only requirement is justified by a region-specific use case, which creates a natural-language locale policy concern.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.