Back to skill

Security audit

agentskills-io

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a coherent Agent Skills authoring guide, but it includes user-run scripts and commands that can execute unpinned remote code and can be exploited through unsafe version parsing.

Review carefully before installing or using this in a trusted repository. Pin the validator source to a reviewed commit or release, avoid running the validation script with CI secrets exposed, and do not run the version-bump script on untrusted plugin metadata until the SemVer parsing is fixed.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T03 · Remote Payload Retrieval and Execution

Error
Location
scripts/validate-skills-repo.sh:23
Finding

Unpinned Remote Payload Retrieval and Execution Through uvx

Content
View full analysis
&1 | grep -q "Valid skill"; then echo "✓ $skill_name" ``` The same unpinned command is also recommended in the project documentation: ```bash uvx --from git+https://github.com/agentskills/agentskills#subdirectory=skills-ref skills-ref validate ./skill ``` ### Technical Analysis The script instructs `uvx` to retrieve and execute the `skills-ref` package directly from a Git repository without specifying an immutable commit hash or signed release. Consequently, the code executed by this command can change after the Skill has been reviewed. Although the URL points to the declared upstream Agent Skills repository and no malicious upstream content was identified during this audit, the absence of an immutable revision creates a remote-payload and supply-chain trust boundary. A compromise of the repository, its maintainers, the referenced branch, or the dependency build process could cause arbitrary replacement code to execute the next time validation runs. The invocation is particularly sensitive in automated CI environments, where the process may have access to repository write tokens, release credentials, signing material, cloud environment variables, or other workflow secrets. ### Attack Path 1. An attacker compromises the upstream repository, a maintainer account, or another mechanism capable of changing the Git revision resolved by the unpinned URL. 2. The attacker modi ...[truncated 1240 chars]
Remediation
View remediation
" uvx --from \ "git+https://github.com/agentskills/agentskills@${SKILLS_REF_COMMIT}#subdirectory=skills-ref" \ skills-ref validate "$skill_dir" ``` 2. Prefer a signed, versioned release with locked transitive dependencies when the upstream project provides one. 3. Record and verify package hashes where the installation mechanism supports hash verification. 4. Update the pinned revision only through a reviewed dependency-update process. 5. Run validation in an isolated environment with: - No production deployment credentials. - Read-only repository access where possible. - Minimal filesystem permissions. - Restricted outbound network access. - Short-lived, least-privilege CI tokens. 6. Update every documented command in `SKILL.md` and `references/validation.md` so users are not encouraged to bypass the pinned invocation. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
scripts/bump-changed-plugins.sh:88
Finding

Command Execution Through Unvalidated Version Components in Bash Arithmetic Expansion

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Rogue AgentSelf-Modification, Session Persistence
  • 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
Findings (10)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description centers on Agent Skills specification work: creating skills, validating structure/metadata, publishing skills, converting documentation, and ensuring compatibility across agent tools. The supplied code does none of that. Instead, it performs release-maintenance automation for plugins by scanning git diffs, identifying changed plugin folders, incrementing version numbers, and updating JSON metadata files. This is a materially different primary purpose and introduces undeclared capabilities involving git inspection and file mutation of plugin/marketplace metadata. Therefore the description does not accurately represent the code.

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 67)May include surrounding context.

md
| Missing SKILL.md | Filename must be exactly `SKILL.md` |

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding

The skill instructs users to install and run code directly from a GitHub repository via uv tool install git+https://... without pinning to a specific commit, tag, or trusted release. This creates a supply-chain risk: if the upstream repository changes or is compromised, later executions may fetch and run unexpected code.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding

Using uvx --from git+https://github.com/agentskills/agentskills#subdirectory=skills-ref executes code fetched from a remote Git repository without version pinning. Because this is a one-shot execution path, users may run whatever code exists upstream at invocation time, increasing exposure to repository compromise or malicious updates.

Content

No source excerpt is available for this finding.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

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

md
| Dir name mismatch | Directory name must match `name:` field |

## Quick Workflow
1. Create: `mkdir skill-name && touch skill-name/SKILL.md`
2. Add frontmatter (name, description with "Use when...")
3. Write instructions (bullets, not prose); validate: `skills-ref validate ./skill-name`
4. Test with AI agent, iterate; add LICENSE, push to repository

Skill Enumeration

Medium
Category
Agent Snooping
Confidence
80% confidence
Finding

Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Content

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

plugin-name/ ├── .claude-plugin/plugin.json ├── README.md, LICENSE, CHANGELOG.md # CHANGELOG.md tracks versions ├── skills/skill-name/SKILL.md ├── agents/ # Optional: subagents (.md files) └── examples/ # Optional: full demo projects

text

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The documentation instructs users to execute uvx --from git+https://github.com/agentskills/agentskills#subdirectory=skills-ref, which fetches and runs code directly from a moving Git repository state rather than a pinned commit or immutable release. If the upstream repository is compromised, force-pushed, or maliciously modified, users validating skills could execute attacker-controlled code.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The CI example also pulls and executes skills-ref directly from an unpinned GitHub repository, creating a supply-chain risk in automation. In CI/CD this is more dangerous because compromise of the referenced repository could lead to arbitrary code execution in build pipelines, access to repository secrets, and tampering with validation results.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The script executes code fetched directly from a GitHub repository at runtime via uvx --from git+https://github.com/agentskills/agentskills#subdirectory=skills-ref without pinning to an immutable commit or version. If that upstream repo is compromised, force-pushed, or unexpectedly changed, anyone running this validator could execute attacker-controlled code, which is especially risky because this script is meant to be used on local repositories and may run in trusted developer or CI environments.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest description lists several wide-ranging triggers such as 'understanding the Agent Skills specification' and 'ensuring cross-platform compatibility,' which could match many general-purpose requests beyond a narrowly scoped skill invocation. It does not provide explicit exclusions or negative examples to clarify when the skill should not activate.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.