Back to skill

Security audit

CTO & Engineering Excellence Playbook

Security checks for vulnerabilities and agentic risk

Overview

The skill is not plainly malicious, but it overreaches by applying itself to all coding work and repeatedly recommends running an unpinned external scanner in local and CI environments.

Install only if you want a broad CTO-style engineering standards skill and are comfortable with it affecting many coding tasks. Do not copy the scanner commands as written for CI, hooks, or home-directory scans; pin and vet the scanner version, run it with least privilege, and scope scans to files you intend to inspect.

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:7
Finding
Global Agent Role and Instruction Hijacking<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:7-18` and `SKILL.md:299` **Vulnerability Type**: T01: Skill Instruction Hijacking **Risk Level**: High ### Vulnerable Code ```markdown Trigger for ANY coding task to enforce CTO-grade standards — code review, tests, docs, deployment. Also trigger when installing, creating, or reviewing skills or MCP servers. If in doubt, use this skill. --- # CTO & Engineering Excellence Playbook You are operating as a world-class CTO and principal engineer. Every decision, every line of code, every architecture choice must meet the standard of a top-tier engineering organisation. This is not optional — it is the baseline. ``` Additional instruction at `SKILL.md:299`: ```markdown **Remember: You are the CTO. Every output must be production-grade, well-documented, tested, secure, and built to scale. No shortcuts. No excuses. Ship excellence.** ``` ### Technical Analysis The skill does not limit its instructions to explicitly requested CTO advisory tasks. Instead, it claims activation for **any coding task**, directs the agent to use the skill whenever uncertain, replaces the agent's active role with a mandatory CTO persona, and imposes requirements on **every output**. This constitutes instruction hijacking because loading the skill can alter the goals and response constraints of the agent's current session beyond the legitimate scope of the skill. Statements such as “This is not optional” and “Every output must” attempt to give skill-level content unconditional authority. No persistent-memory write or operating-system compromise was identified. The affected boundary is the agent's active instruction context. ### Attack Path 1. A user or agent framework installs or loads the skill. 2. A coding, code-review, deployment, skill-review, or MCP-related request activates the broad trigger. 3. The agent processes the skill's mandatory role-replacement instructions. 4. The agent adopts the imposed CTO pers ...[truncated 958 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove universal activation language such as “ANY coding task” and “If in doubt, use this skill.” 2. Replace role-replacement instructions with narrowly scoped advisory language. For example: ```markdown When the user explicitly requests CTO, architecture, or engineering-management guidance, provide recommendations using this playbook. ``` 3. Remove coercive statements such as “This is not optional” and requirements governing “Every output.” 4. Explicitly preserve instruction precedence: ```markdown Apply these recommendations only when relevant and consistent with system, developer, and user instructions. ``` 5. Restrict the skill trigger description to clearly enumerated CTO and engineering-governance use cases. 6. Ensure output requirements apply only to deliverables explicitly requested under this playbook. 7. Add regression tests or policy checks that reject skill text containing global role replacement, universal activation, or attempts to override higher-priority instructions. ]]>

T08 · Insecure Dependencies

Warning
Location
SKILL.md:113
Finding
Execution of an Unpinned Third-Party Package Through uvx<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:110-151`, `SKILL.md:184-197`, `SKILL.md:206`; `references/full-playbook.md:226` and `references/full-playbook.md:274` **Vulnerability Type**: T08: Insecure Dependencies **Risk Level**: Medium ### Vulnerable Code Primary dependency declaration and mandatory commands from `SKILL.md:110-151`: ```markdown ### Required Tool - **Snyk Agent Scan** — `uvx snyk-agent-scan@latest` - Requires `uv` installed via a trusted package manager or official binary release for your OS. ### Mandatory Scan Commands ```bash # Full machine scan — agents, MCP servers, and skills uvx snyk-agent-scan@latest --skills # Scan Claude Code skills uvx snyk-agent-scan@latest --skills ~/.claude/skills # Scan Codex CLI skills uvx snyk-agent-scan@latest --skills ~/.codex/skills # Scan a specific skill before installing uvx snyk-agent-scan@latest --skills /path/to/skill/SKILL.md # Scan project-level skills uvx snyk-agent-scan@latest --skills .claude/skills/ uvx snyk-agent-scan@latest --skills .agents/skills/ # Inspect MCP tool descriptions without verification uvx snyk-agent-scan@latest inspect # JSON output for CI/CD integration uvx snyk-agent-scan@latest --skills --json ``` ``` CI and local hook execution from `SKILL.md:184-197`: ```yaml - name: Scan agent skills run: uvx snyk-agent-scan@latest --skills .claude/skills/ --json - name: Scan MCP configs run: uvx snyk-agent-scan@latest --json ``` ```bash if [ -d ".claude/skills" ] || [ -d ".agents/skills" ]; then echo "Scanning agent skills for security vulnerabilities..." uvx snyk-agent-scan@latest --skills --json ``` Repeated instruction in `references/full-playbook.md:226`: ```markdown | Snyk Agent Scan | Security scanner for AI agent skills, MCP servers, and agent configs. Detects prompt injections, tool poisoning, malware payloads, hard-coded secrets, toxic flows, and rug pull attacks. Install: `uvx snyk-agent-scan@latest --skills`. Sca ...[truncated 2669 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace `@latest` with a specific, reviewed version: ```bash uvx snyk-agent-scan@<audited-version> --skills ``` 2. Pin the package artifact using a lock file and verified cryptographic hashes where supported. 3. Retrieve packages only from an approved registry or internal mirror with provenance and integrity controls. 4. Verify package ownership, release signatures, source repository, build provenance, and published checksums before adoption. 5. Update versions through a controlled review process rather than resolving mutable releases during each run. 6. Run the scanner in a restricted environment with: - Read-only repository mounts. - No unnecessary home-directory access. - Minimal CI token permissions. - No production credentials. - Restricted outbound network access. - An unprivileged user account. 7. Separate full-machine scans from routine pre-commit execution; do not grant a dependency broader filesystem access than required. 8. Pin the `uv` runtime itself to an approved release and verify its installation source. 9. Apply the same pinned command consistently throughout `SKILL.md` and `references/full-playbook.md`. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
Findings (25)

Vague Triggers

High
Confidence
98% confidence
Finding
The skill description claims it should trigger for architecture, hiring, security, product planning, any coding task, and even installing or reviewing other skills or MCP servers. Such broad activation criteria create overreach and prompt-surface expansion, increasing the chance the skill influences unrelated tasks and overrides narrower, safer context-specific instructions.

Chaining Abuse

High
Category
Tool Misuse
Content
- name: Install uv
        run: |
          # Install uv using your platform package manager or approved internal image.
          # Example (Ubuntu): sudo apt-get update && sudo apt-get install -y uv
          uv --version
      - name: Scan agent skills
        run: uvx snyk-agent-scan@latest --skills .claude/skills/ --json
Confidence
75% confidence
Finding
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Natural-Language Policy Violations

Medium
Confidence
88% confidence
Finding
The skill imposes a mandatory technology/language policy ('TypeScript for all JS/TS work... No exceptions') without user opt-in. This can distort user intent, force toolchain choices, and cause the agent to disregard project constraints or safer alternatives in environments where different languages, standards, or compliance requirements apply.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding
The skill repeatedly instructs users to execute `uvx snyk-agent-scan@latest`, which pins only to the moving `latest` tag rather than an immutable version or digest. That creates a supply-chain risk: a future compromised or malicious release would be automatically trusted and executed during security scanning workflows, including CI environments.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding
Using `uvx snyk-agent-scan@latest --skills` for a full scan implicitly downloads and runs the newest package version at execution time. In a security-sensitive workflow, that undermines trust by making the scanner itself a mutable dependency that could become the attack vector.

Skill Enumeration

Medium
Category
Agent Snooping
Content
# Full machine scan — agents, MCP servers, and skills
uvx snyk-agent-scan@latest --skills

# Scan Claude Code skills
uvx snyk-agent-scan@latest --skills ~/.claude/skills

# Scan Codex CLI skills
Confidence
85% 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.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding
The command shown for scanning Claude Code skills relies on `@latest`, so the exact code executed is not stable or reviewable over time. That is especially risky because the skill presents this as a mandatory security control, increasing the likelihood of repeated execution in trusted contexts.

Skill Enumeration

Medium
Category
Agent Snooping
Content
# Scan Claude Code skills
uvx snyk-agent-scan@latest --skills ~/.claude/skills

# Scan Codex CLI skills
uvx snyk-agent-scan@latest --skills ~/.codex/skills

# Scan a specific skill before installing
Confidence
85% 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.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding
The Codex CLI skill scan example also uses a mutable `latest` dependency. Because the command is meant to inspect local skill directories, a compromised scanner could gain access to sensitive local configuration and metadata while appearing to perform a defensive action.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding
The example for scanning a specific skill before install still fetches `@latest`, so the recommended safety check itself is untrusted. This is dangerous because users are likely to run it precisely when evaluating whether content is safe, which can invert the trust boundary.

Skill Enumeration

Medium
Category
Agent Snooping
Content
# Scan a specific skill before installing
uvx snyk-agent-scan@latest --skills /path/to/skill/SKILL.md

# Scan project-level skills
uvx snyk-agent-scan@latest --skills .claude/skills/
uvx snyk-agent-scan@latest --skills .agents/skills/
Confidence
85% 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.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding
The project-level scan example uses `@latest`, introducing a mutable execution path into repository workflows. In teams adopting this skill broadly, that can propagate a supply-chain weakness across many developer environments and automation pipelines.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding
This second project-level scan command repeats the same unpinned package execution pattern. Repetition in multiple examples increases the chance that users copy the unsafe form into scripts and CI, turning documentation into durable insecure automation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
uvx snyk-agent-scan@latest --skills .claude/skills/
uvx snyk-agent-scan@latest --skills .agents/skills/

# Inspect MCP tool descriptions without verification
uvx snyk-agent-scan@latest inspect

# JSON output for CI/CD integration
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding
Even the `inspect` example uses `@latest`, meaning metadata-inspection workflows also trust mutable remote code. While the immediate privileges may be lower than a full CI run, it still expands the supply-chain attack surface and normalizes unsafe package execution.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding
The JSON-output example is positioned for CI/CD integration, so `@latest` here is especially risky: automated pipelines would repeatedly execute a moving target in privileged, networked environments. Attackers often target build and scanning infrastructure because it has broad access and high trust.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
- name: Install uv
        run: |
          # Install uv using your platform package manager or approved internal image.
          # Example (Ubuntu): sudo apt-get update && sudo apt-get install -y uv
          uv --version
      - name: Scan agent skills
        run: uvx snyk-agent-scan@latest --skills .claude/skills/ --json
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Skill Enumeration

Medium
Category
Agent Snooping
Content
# Install uv using your platform package manager or approved internal image.
          # Example (Ubuntu): sudo apt-get update && sudo apt-get install -y uv
          uv --version
      - name: Scan agent skills
        run: uvx snyk-agent-scan@latest --skills .claude/skills/ --json
      - name: Scan MCP configs
        run: uvx snyk-agent-scan@latest --json
Confidence
85% 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.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding
The GitHub Actions example directly embeds `uvx snyk-agent-scan@latest`, which is a classic pipeline supply-chain weakness. Because this is copy-paste-ready automation, it materially increases the chance of insecure adoption at scale.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding
The MCP config scan step also uses the mutable `latest` tag in CI. This broadens risk across both skill and MCP scanning and could allow a malicious package update to exfiltrate repository or environment data from automation runners.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding
The pre-commit hook invokes `uvx snyk-agent-scan@latest --skills --json`, so every developer commit may execute freshly resolved remote code. That creates a high-frequency supply-chain exposure on developer endpoints, not just in CI.

Skill Enumeration

Medium
Category
Agent Snooping
Content
```

### Rules for Skill Installation
1. **Never install a skill without scanning it first.** Run `uvx snyk-agent-scan@latest --skills /path/to/SKILL.md` before copying to `~/.claude/skills/` or `~/.codex/skills/`.
2. **Review the SKILL.md manually.** Read the file. Check for suspicious instructions, external URLs, or encoded content.
3. **Check bundled scripts.** If the skill includes `scripts/` or executable code, audit every file.
4. **Verify the source.** Only install skills from trusted repositories. Check stars, contributors, and commit history.
Confidence
85% 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.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding
The installation rules explicitly instruct users to run `@latest` before trusting a skill. Because this is framed as mandatory security hygiene, it can strongly encourage execution of an unpinned third-party package at the exact moment users are trying to reduce risk.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The playbook instructs users to run `uvx snyk-agent-scan@latest --skills`, which fetches and executes the latest package version at runtime rather than a pinned, reviewed release. That creates a supply-chain risk: if the package is compromised, typo-squatted, or updated with breaking or malicious behavior, users following the guidance may execute untrusted code on their systems.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
This line repeats the same unsafe installation guidance, telling users to run `uvx snyk-agent-scan@latest --skills /path/to/skill`. Using `@latest` in a security-sensitive context is especially risky because this skill is explicitly meant to be used when installing or reviewing other agent components, so it can normalize execution of an unpinned third-party package during a trust decision.

Static analysis

No suspicious patterns detected.