Back to skill

Security audit

skill-kit

Security checks across malware telemetry and agentic risk

Overview

This is a broad skill-management toolkit, but it ships and can register persistent hook behavior that is wider and more environment-specific than a typical user would expect.

Install only if you want a powerful local skill-management toolkit and are comfortable reviewing commands before execution. Be especially careful with /skill-kit trigger compile, dedup cleanup, convert, merge, and upgrade workflows because they can modify persistent Claude settings, hooks, installed skills, backups, and git state. Prefer dry-run or single-skill scopes where available, and inspect generated hook scripts before registering them.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
Findings (35)

Lp3

Medium
Category
MCP Least Privilege
Confidence
79% confidence
Finding
The skill advertises operational capabilities that imply shell and environment access, but the manifest shown does not declare permissions or otherwise make those capabilities explicit. In a skill-management package that can generate hooks, install skills, and invoke external CLIs, undeclared execution capability reduces user visibility and can enable unexpected command execution paths.

Tp4

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding
The documented purpose is skill management, but the observed behavior includes unrelated auto-triggered suggestions, session-stop cleanup injection, environment-specific operational detection, and persistent logging under the user's home directory. That mismatch is dangerous because users may grant trust based on the benign description while the skill performs broader monitoring, persistence, and workflow interference than disclosed.

Natural-Language Policy Violations

Medium
Confidence
70% confidence
Finding
Mandatory language-consistency enforcement without opt-in can override user intent and silently alter content or block edits. While not typically a direct security exploit, it is a coercive policy mechanism that can be abused to manipulate outputs or introduce unauthorized changes in mixed-language repositories.

Natural-Language Policy Violations

Medium
Confidence
74% confidence
Finding
The command description presents description-language enforcement as mandatory behavior rather than a user-selected policy. In a tool that performs Edit/Write pre-checks, mandatory enforcement can become an unexpected gatekeeper and may be used to constrain or alter user-authored content without consent.

Vague Triggers

Medium
Confidence
77% confidence
Finding
The template explicitly encourages adding generic trigger phrases to skill descriptions without requiring boundaries, disambiguation, or negative examples. In a skill-routing system, broad triggers can cause unintended auto-selection of this skill for loosely related user requests, increasing the chance of mis-execution, over-broad context loading, or accidental invocation of sensitive workflows.

Vague Triggers

Medium
Confidence
84% confidence
Finding
The description-format guidance permits free-form trigger definitions such as short topical phrases without any requirement to define scope, collisions, or non-matching cases. This can make the skill easier to invoke accidentally or to overshadow more appropriate skills, especially in ecosystems that rely on trigger text for discovery or dispatch.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill instructs moving the original agent file into a backup location as part of the conversion workflow, but it presents this destructive state-changing step without any confirmation, rollback guidance, or warning about overwriting existing backups. In a skill-management context, users may follow these commands directly, causing accidental loss of working agent definitions or confusion if the backup path is missing or already contains files.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill recommends deleting all contents of ~/.claude/skills/.bak/* as a cleanup option but does not explicitly warn that this is a permanent destructive action. In an agent skill context, users may treat recommended options as safe defaults, so presenting 'Delete All (Recommended)' without a strong confirmation and recovery warning increases the chance of accidental irreversible data loss.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The trigger examples are very broad help-seeking phrases such as 'how do I do X' and 'can you do X', which can cause this skill to auto-activate in many ordinary conversations. That increases the chance the agent will invoke external package-search/install guidance when the user only wanted general assistance, expanding exposure to unneeded third-party skill discovery and possible downstream supply-chain risk.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The skill explicitly instructs the user to run an interactive shell script via `! bash <script-path> <args>` without requiring any validation of the script path, script contents, or expected side effects beforehand. In a skill-management context, this is more dangerous than generic documentation because it operationalizes shell execution as the preferred path and can normalize running repository- or skill-supplied scripts that may modify files, delete content, exfiltrate data, or perform other privileged actions.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The skill includes filesystem-modifying commands that move skill directories and later suggests deleting backups, but it does not clearly warn about the destructive nature of these operations or require explicit confirmation immediately before execution. In a tool-using agent context, insufficient guardrails around file moves and cleanup can lead to accidental data loss or modification of persistent user configuration.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The skill instructs the agent to perform remote ecosystem searches via external tools/services before adding a topic, but it does not require notifying the user that capability names, prompts, or other context may be transmitted outside the local environment. In a skill-management context, this can leak project intentions or internal terminology during autonomous operation, especially because the search is marked as mandatory.

Agent Config Directory Access

High
Category
Agent Snooping
Content
find ~/.claude/skills -name "SKILL.md" ! -path "*.bak*" -exec sh -c \
  'head -10 "$1" | grep -q "^name:" || echo "name missing: $1"' _ {} \;

find ~/.claude/skills -name "SKILL.md" ! -path "*.bak*" -exec sh -c \
  'head -10 "$1" | grep -q "^description:" || echo "description missing: $1"' _ {} \;

# Invalid fields
Confidence
95% confidence
Finding
The skill instructs broad filesystem scanning of `~/.claude/skills` using `find`, which traverses a sensitive agent configuration area and can enumerate or expose local skill metadata without narrowing scope to a user-approved target. In the context of an agent skill, this is dangerous because it normalizes unrestricted access to personal configuration content and can leak names, paths, and structural information about installed skills.

Agent Config Directory Access

High
Category
Agent Snooping
Content
'head -10 "$1" | grep -q "^description:" || echo "description missing: $1"' _ {} \;

# Invalid fields
grep -r "^triggers:" ~/.claude/skills --include="SKILL.md" | grep -v ".bak"
grep -r "^tools:" ~/.claude/skills --include="SKILL.md" | grep -v ".bak"

# Frontmatter position (must start on line 1)
Confidence
95% confidence
Finding
This command recursively greps `~/.claude/skills` for `triggers:` entries, again operating over a sensitive config directory without per-target consent. Even though it looks read-only, it enables bulk discovery of installed skill structure and content patterns, which is unnecessary for many tasks and increases the blast radius of accidental data exposure.

Agent Config Directory Access

High
Category
Agent Snooping
Content
# Invalid fields
grep -r "^triggers:" ~/.claude/skills --include="SKILL.md" | grep -v ".bak"
grep -r "^tools:" ~/.claude/skills --include="SKILL.md" | grep -v ".bak"

# Frontmatter position (must start on line 1)
find ~/.claude/skills -name "SKILL.md" ! -path "*.bak*" -exec sh -c \
Confidence
95% confidence
Finding
Recursive grep over `~/.claude/skills` for `tools:` performs another unrestricted read against agent configuration data. In an agent-skill context, repeated guidance to crawl the user's personal skill directory increases the chance of unintended disclosure of local setup details and normalizes overbroad access patterns.

Skill Enumeration

Medium
Category
Agent Snooping
Content
## Scan Paths

1. `~/.claude/skills/` - Personal skills
2. `~/.claude/plugins/marketplaces/*/plugins/*/skills/` - Plugin skills
3. `.claude/skills/` - Project skills

## Validation Rules
Confidence
90% confidence
Finding
The declared scan paths explicitly include personal, plugin, and project skill stores, enabling broad enumeration of the user's installed skills and plugin inventory. Enumeration is sensitive in this context because skill names, plugin origins, and layout can reveal workflows, tooling choices, and possibly security-relevant capabilities present on the system.

Skill Enumeration

Medium
Category
Agent Snooping
Content
# Single skill
skills-ref validate ~/.claude/skills/<skill-name>

# All personal skills
for d in ~/.claude/skills/*/; do
  [ -f "$d/SKILL.md" ] || continue
  echo "=== $(basename "$d") ==="
Confidence
93% confidence
Finding
The loop over `~/.claude/skills/*/` enumerates all personal skills and validates each one, exposing a complete inventory of installed skills. In a local agent environment, that inventory can reveal user behavior, internal tooling, or installed marketplace components beyond what is necessary for a single lint request.

Skill Enumeration

Medium
Category
Agent Snooping
Content
find ~/.claude/skills -name "SKILL.md" ! -path "*.bak*" -exec sh -c \
  'head -10 "$1" | grep -q "^name:" || echo "name missing: $1"' _ {} \;

find ~/.claude/skills -name "SKILL.md" ! -path "*.bak*" -exec sh -c \
  'head -10 "$1" | grep -q "^description:" || echo "description missing: $1"' _ {} \;

# Invalid fields
Confidence
94% confidence
Finding
Using `find ~/.claude/skills` for issue scanning enumerates the full skill tree and all matching `SKILL.md` files. While this is framed as linting, the capability still exposes the existence and organization of all local skills, which is more dangerous in an agent skill because it may be invoked casually without the user realizing the breadth of inspection.

Skill Enumeration

Medium
Category
Agent Snooping
Content
# VENDOR_PAT escapes the leading dot so the bare `grep -nE "$VENDOR_PAT"` body scan matches `.ralph/` etc.
VENDOR_PAT='\.ralph/|\.omc/|\.codex/|\.ai/'

for skill_dir in ~/.claude/skills/*/ ~/.agents/skills/*/; do
  skill_name=$(basename "$skill_dir")
  skill_md="$skill_dir/SKILL.md"
  [ -f "$skill_md" ] || continue
Confidence
92% confidence
Finding
The dependency-coupling scan iterates through all skills in `~/.claude/skills` and `~/.agents/skills`, creating a broad inventory of local capabilities and references. In context, this is more than benign bookkeeping because it encourages cross-skill inspection of potentially private internal tooling relationships.

Agent Config Directory Access

High
Category
Agent Snooping
Content
bash -n ~/.claude/hooks/trigger-*.sh

# Check settings.json parsing
jq . ~/.claude/settings.json > /dev/null

# Print trigger list
/skill-kit trigger list
Confidence
95% confidence
Finding
The skill explicitly operates on ~/.claude/settings.json and ~/.claude/hooks, which are agent configuration and execution paths. A skill that modifies persistent hook registration can change future agent behavior across sessions, creating a high-risk persistence and trust-boundary issue if trigger content or generated scripts are unsafe, overly broad, or attacker-influenced.

Agent Config Directory Access

High
Category
Agent Snooping
Content
**Before (manual):**
1. Add trigger keywords to cleanup/SKILL.md description
2. Write a separate script in ~/.claude/hooks/
3. Manually register in ~/.claude/settings.json

**After (declarative):**
1. Add triggers to cleanup/SKILL.md:
Confidence
94% confidence
Finding
This example instructs users to manually write scripts into ~/.claude/hooks and register them in ~/.claude/settings.json, again targeting persistent agent configuration. Even as documentation, it normalizes installation of executable hooks in a trusted location, which can enable durable behavior changes or abuse if a malicious or careless skill author supplies unsafe trigger logic.

Agent Config Directory Access

High
Category
Agent Snooping
Content
#### Self-check (before entering Step 6)

1. Run the `jq` published.json query for `<skill-name>` — was it present?
2. **If jq returned empty: verify the path itself**. Run `[ -f "$PUB_JSON" ] && echo OK || echo MISSING`. If `MISSING`, run `find ~/.claude/skills/es6kr ~/.agents/skills/es6kr -name "published.json"` to relocate. **Do not classify as "Not in published.json" until you have confirmed the file actually exists at the queried path.**
3. Run `git -C ~/.agents ls-files skills/<skill-name>/` — was there at least one tracked file?
4. If jq returned empty but the file is missing/unreachable AND the skill is tracked AND `git -C ~/.agents remote get-url origin` matches the canonical public repo (`es6kr/skills`) → apply the **Public-repo fallback** row → classify as **Public**.
5. Map the answers onto the scope matrix
Confidence
84% confidence
Finding
The skill directs enumeration of `~/.claude` and related local agent configuration paths to locate publication metadata. Accessing agent config directories can expose installed skills, workspace layout, and other sensitive local configuration unrelated to the requested task, and the instructions normalize this access as part of routine execution.

Skill Enumeration

Medium
Category
Agent Snooping
Content
#### Self-check (before entering Step 6)

1. Run the `jq` published.json query for `<skill-name>` — was it present?
2. **If jq returned empty: verify the path itself**. Run `[ -f "$PUB_JSON" ] && echo OK || echo MISSING`. If `MISSING`, run `find ~/.claude/skills/es6kr ~/.agents/skills/es6kr -name "published.json"` to relocate. **Do not classify as "Not in published.json" until you have confirmed the file actually exists at the queried path.**
3. Run `git -C ~/.agents ls-files skills/<skill-name>/` — was there at least one tracked file?
4. If jq returned empty but the file is missing/unreachable AND the skill is tracked AND `git -C ~/.agents remote get-url origin` matches the canonical public repo (`es6kr/skills`) → apply the **Public-repo fallback** row → classify as **Public**.
5. Map the answers onto the scope matrix
Confidence
80% confidence
Finding
The `find ~/.claude/skills ... -name "published.json"` step enables broad enumeration of installed skills and surrounding filesystem structure. In a skill whose purpose is upgrade automation, this increases risk because discovery is performed by default and may collect more environment metadata than needed for the specific user request.

Unrestricted Tool Access

Medium
Category
Excessive Agency
Content
|-----------|-----------|
| `name` | Keep as-is (suffix removal recommended) |
| `description` | Add triggers keywords |
| `tools` | Remove (skills use all tools by default) |
| `model` | Keep (optional) |
| Script references | Copy to `scripts/` folder, change to relative paths |
Confidence
83% confidence
Finding
The conversion rule explicitly removes the `tools` restriction because skills 'use all tools by default,' which broadens the privileges of the converted artifact without requiring review. In this context, converting an agent into a more broadly empowered skill can unintentionally grant filesystem, network, or execution capabilities beyond the original design, increasing blast radius if the skill is invoked improperly or contains unsafe instructions.

Self-Modification

High
Category
Rogue Agent
Content
Follow the [writer.md](./writer.md) guide to create the skill structure:

1. Create folder: `mkdir -p ~/.claude/skills/<skill-name>/scripts`
2. Write SKILL.md (frontmatter + body)
3. Copy scripts and `chmod +x`

### 4. Move Original
Confidence
90% confidence
Finding
The skill directs the agent to create and write a new persistent skill file under the user's Claude skills directory, which is a form of self-modification or environment modification that can survive the current session. In a skill-management package this behavior is expected, but it is still security-relevant because writing trusted executable instructions into the persistent skill store can install unsafe behavior that will be available to future sessions.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: suspicious.dangerous_exec

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/trigger-compile.sh:360