Back to skill

Security audit

skill-creator-canonical

Security checks for vulnerabilities and agentic risk

Overview

This is mostly a legitimate AgentSkill authoring tool, but its packaging and publishing path can expose local files from a skill folder if users rely on incomplete ignore rules.

Review this skill before installing if you will use packaging or publishing. Keep sensitive files out of skill directories, require a complete .clawhubignore before packaging, inspect the generated .skill archive before publishing, and verify or pin dual-thinking before installing it.

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)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/package_skill.py:31
Finding

Packaging Proceeds Without Mandatory Sensitive-File Exclusions

Content
View full analysis
list[str]: ignore_file = skill_root / ".clawhubignore" if not ignore_file.exists(): return [] patterns: list[str] = [] for raw_line in ignore_file.read_text(encoding="utf-8").splitlines(): line = raw_line.strip() if not line or line.startswith("#"): continue patterns.append(line) return patterns ``` ```python ignore_patterns = _load_ignore_patterns(skill_path) # Create the .skill file (zip format) try: with zipfile.ZipFile(skill_filename, "w", zipfile.ZIP_DEFLATED) as zipf: # Walk through the skill directory for file_path in skill_path.rglob("*"): # Security: never follow or package symlinks. if file_path.is_symlink(): print(f"[WARN] Skipping symlink: {file_path}") continue if _should_ignore(file_path, skill_path, ignore_patterns): continue if file_path.is_file(): resolved_file = file_path.resolve() if not _is_within(resolved_file, skill_path): print(f"[ERROR] File escapes skill root: {file_path}") return None ``` ### Technical Analysis The packager treats a missing `.clawhubignore` file as an empty exclusion list. It then recursively processes every regular, non-symlink file beneath the Skill root. The preceding validation only validates the structure and frontmatter of `SKILL.md`; it does not scan the package for credentials, environment files, private keys, tokens, logs, session data, or other sensitive artifacts. Although `init_skill.py` creates a default `.clawhubignore`, `package_skill.py` can package existing ...[truncated 1801 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:110
Finding

Deep Review Relies on an Unpinned External Skill Dependency

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • Rogue AgentSelf-Modification, Session Persistence
Findings (23)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill's stated purpose understates that it may run validation and packaging-related checks that exercise archive generation, ignore-file processing, metadata/version checks, and related release hygiene. Even if these are legitimate maintenance actions, hiding them behind a narrower description can cause operators to underestimate the skill's reach and side effects.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill's stated purpose understates that it may run validation and packaging-related checks that exercise archive generation, ignore-file processing, metadata/version checks, and related release hygiene. Even if these are legitimate maintenance actions, hiding them behind a narrower description can cause operators to underestimate the skill's reach and side effects.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Keep `SKILL.md` executable.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Keep `SKILL.md` executable.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Keep `SKILL.md` executable.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Keep `SKILL.md` executable.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Keep `SKILL.md` executable.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Keep `SKILL.md` executable.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Keep `SKILL.md` executable.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Keep `SKILL.md` executable.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Keep `SKILL.md` executable.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
Keep `SKILL.md` executable.

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

Scanner excerpt · references/output-patterns.md (reported line 5)May include surrounding context.

md
Use this reference when the skill must produce a specific artifact or report.

## Output rules
- Name the artifact explicitly.
- State where the artifact should be written.
- State what counts as complete.

Self-Modification

High
Category
Rogue Agent
Confidence
85% confidence
Finding

Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Content

Scanner excerpt · scripts/init_skill.py (reported line 324)May include surrounding context.

python
# Print next steps
    print(f"\n[OK] Skill '{skill_name}' initialized successfully at {skill_dir}")
    print("\nNext steps:")
    print("1. Edit SKILL.md to complete the TODO items and update the description")
    if resources:
        if include_examples:
            print("2. Customize or delete the example files in scripts/, references/, and assets/")

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/test_package_skill.py (reported line 97)May include surrounding context.

python
def test_skips_symlink_to_external_file(self):
        skill_dir = self.create_skill("symlink-file-skill")
        outside = self.temp_dir / "outside-secret.txt"
        outside.write_text("super-secret\n")
        link = skill_dir / "loot.txt"
        out_dir = self.temp_dir / "out"

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/test_package_skill.py (reported line 122)May include surrounding context.

python
def test_skips_symlink_to_external_file(self):
        skill_dir = self.create_skill("symlink-file-skill")
        outside = self.temp_dir / "outside-secret.txt"
        outside.write_text("super-secret\n")
        link = skill_dir / "loot.txt"
        out_dir = self.temp_dir / "out"

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/test_package_skill.py (reported line 139)May include surrounding context.

python
def test_skips_symlink_to_external_file(self):
        skill_dir = self.create_skill("symlink-file-skill")
        outside = self.temp_dir / "outside-secret.txt"
        outside.write_text("super-secret\n")
        link = skill_dir / "loot.txt"
        out_dir = self.temp_dir / "out"

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · scripts/test_package_skill.py (reported line 227)May include surrounding context.

python
".env*\n*.skill\n.daemon-ws-endpoint\n",
            encoding="utf-8",
        )
        (skill_dir / ".env.local").write_text("SECRET=1\n")
        (skill_dir / "draft.skill").write_text("archive\n")
        (skill_dir / ".daemon-ws-endpoint").write_text("ws://127.0.0.1\n")
        out_dir = self.temp_dir / "out"

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

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

Content

Scanner excerpt · scripts/test_package_skill.py (reported line 241)May include surrounding context.

python
".env*\n*.skill\n.daemon-ws-endpoint\n",
            encoding="utf-8",
        )
        (skill_dir / ".env.local").write_text("SECRET=1\n")
        (skill_dir / "draft.skill").write_text("archive\n")
        (skill_dir / ".daemon-ws-endpoint").write_text("ws://127.0.0.1\n")
        out_dir = self.temp_dir / "out"

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill instructs the agent to read and write files, run Python scripts, package archives, and publish releases, but it declares no explicit tool scope such as permissions or allowed-tools. That makes the effective authority implicit and environment-dependent, which increases the risk of unintended filesystem or shell access when the skill is invoked.

Content

No source excerpt is available for this finding.

Unbounded Resource Access

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill allows unbounded resource consumption (API calls, storage, compute). Without rate limits or quotas, a compromised or misbehaving agent can cause denial-of-service or cost overruns.

Content

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

md
3. Fix every validation error, then re-run validation and output the new validator state.
4. Review warnings and either fix them or record why the warning is acceptable, then output that warning decision.
5. Re-run both validators after each fix cycle and output the latest results.
6. If either validator fails twice consecutively, output the raw error log, mark validation as blocked, and stop the entire skill execution. Do not proceed to Step 8. Do not loop indefinitely.
Output: validation results for both scripts.
Stop when both validators succeed, the remaining warnings are explicitly accepted, or the 2-cycle retry limit is hit.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The publish step includes a command that can distribute the skill externally, but the instructions do not require a prominent user-facing warning about that consequence before execution. In an agent setting, this can lead to accidental disclosure or irreversible external release of code or metadata when the user asked for help but did not fully appreciate that publication would occur.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The fallback instructs the agent to write to skill_output.txt in the current working directory when output expectations are unclear. Even though this is framed as a safety fallback, it can still cause unintended modification of the user's workspace, overwrite or append to files unexpectedly, and create side effects in contexts where read-only behavior was expected.

Content

No source excerpt is available for this finding.