Back to skill

Security audit

Spec Kit

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent developer workflow guide, but it tells users to run mutable remote Git code that can modify projects and Git history without enough scoping or provenance controls.

Install only if you are comfortable trusting the live github/spec-kit repository at run time. Prefer pinning the Git URL to a reviewed commit or release, run initialization in a disposable or isolated repository first, inspect generated scripts and .speckit files, and review Git changes before accepting commits or using --ignore-agent-tools.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T03 · Remote Payload Retrieval and Execution

Warning
Location
SKILL.md:43
Finding

Execution of Unpinned Code from a Mutable Remote Git Repository

Content
View full analysis
# Initialize in current directory uvx --from git+https://github.com/github/spec-kit.git specify init . uvx --from git+https://github.com/github/spec-kit.git specify init --here ``` A related example permits execution from a mutable, user-selected branch: ```bash # Push branch first git push origin your-feature-branch # Test via uvx uvx --from git+https://github.com/github/spec-kit.git@your-feature-branch \ specify init demo-branch-test --script ps ``` ### Technical Analysis The documented installation workflow instructs users to invoke `uvx` with a Git repository URL. `uvx` retrieves the Python project from the remote repository, resolves or builds it, and executes its `specify` entry point with the invoking user's privileges. The main commands do not pin the source to an immutable, reviewed commit hash or cryptographically verified release. Consequently, the effective code executed by users can change after this Skill has been audited. The branch-testing example is more exposed because it explicitly executes code from a mutable branch selected by the user. This creates a remote payload substitution risk. If the upstream repository, its default branch, a referenced feature branch, or a maintainer account is compromised, an attacker can alter the package executed by otherwise unchanged instructions. Although the URL points to the declared official GitHub organization and no present upstream compromise is established, the instructions lack controls that bind execution to reviewed content. ### Attack Path 1. An attacker compromises an upstream maintainer account, repository workflow, default b ...[truncated 1363 chars]
Remediation
View remediation
\ specify init ``` 2. Prefer a trusted, versioned package release with locked transitive dependencies and hash verification where the package-distribution mechanism supports it. 3. Record the expected release version, commit hash, and verification procedure directly in `SKILL.md` so users can confirm the retrieved source matches the reviewed artifact. 4. Remove the arbitrary feature-branch execution example from general user instructions. If branch testing is required for contributors, clearly state that it executes unreviewed code and restrict it to branches controlled and reviewed by the user. 5. Perform remote tooling execution in an isolated environment with minimal filesystem access, no unnecessary credentials, and no elevated privileges. 6. Periodically review and deliberately update the pinned revision rather than silently tracking mutable upstream content. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (13)

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The skill instructs users to execute code directly from a remote Git repository via uvx --from git+https://github.com/github/spec-kit.git without pinning to a specific commit, tag, or version. This creates a supply-chain risk: if the upstream repository is compromised or changes unexpectedly, users may run unreviewed code with local filesystem and Git access.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This command again pulls and executes code from a live Git repository without an immutable version pin. Because the tool initializes projects and writes files, an attacker controlling or tampering with the upstream source could achieve arbitrary code execution or persistent project compromise.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The skill recommends running a remote Git-sourced package with no version pin, which means behavior can change between runs and can be weaponized through upstream compromise. In this skill's context, that remote code is used to scaffold projects and may modify local repositories, increasing the blast radius.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This line repeats the unsafe pattern of executing directly from an unpinned remote Git repository. The risk is amplified because the command configures AI tooling and project scaffolding, so a compromised upstream could inject unsafe templates, scripts, or hooks into the user's environment.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

Running uvx --from git without version pinning exposes users to arbitrary upstream changes and repository compromise. Since this is framed as a normal setup step, users may execute it without understanding they are trusting mutable remote code.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This command continues the same supply-chain pattern: execute code fetched from a mutable Git source at runtime. In a developer skill, such code often runs with access to source trees, credentials, and Git configuration, making compromise materially dangerous.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The skill instructs users to execute an unpinned Git-based package for the codebuddy variant as well, preserving the same supply-chain attack surface. Any malicious update upstream would be inherited by all users following the documentation.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This example uses the same unpinned uvx --from git pattern while also controlling script type, so fetched code may install or generate platform-specific shell/PowerShell artifacts. That combination can facilitate local execution of attacker-controlled scripts if the source repository is tampered with.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

Like the other setup commands, this fetches executable code from a mutable upstream Git repository with no version pinning. Because it is positioned as a standard initialization command, it normalizes insecure execution practices in sensitive developer environments.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The --ignore-agent-tools example still executes unpinned remote code and additionally bypasses some safety/tool validation checks, which can make misuse harder to detect. If the upstream source is compromised, users may suppress relevant checks while running attacker-controlled initialization logic.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

This initialization example again relies on direct execution from an unpinned Git repository. Given that initialization creates repository structure and templates, compromise here can establish persistence through generated files, scripts, or configuration committed into downstream projects.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation states that /speckit.build generates code, creates files incrementally, runs tests, and commits progress to Git, but it does not prominently warn users that project files and repository history may be modified automatically. In the context of an AI-driven development tool, silent or under-disclosed write/commit behavior can lead to unintended code changes, unsafe generated artifacts, or unexpected Git history alterations.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The branch-testing example explicitly runs code from a user-controlled branch via git+https://github.com/github/spec-kit.git@your-feature-branch, which is mutable and especially risky because branch names are not immutable trust anchors. This encourages executing unpublished branch code that may not have undergone review and can change after documentation is written.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.