Back to skill

Security audit

VibeSafe — Security Pre-Flight for AI Coding Agents

Security checks for vulnerabilities and agentic risk

Overview

The skill has a legitimate dependency-security purpose, but it includes under-scoped instructions to install or run unverified tooling that users should review carefully.

Install only if you are comfortable with the agent performing network dependency lookups and writing audit reports. Do not let it run ./tools scripts from an untrusted project, and prefer a pinned, reviewed release with checksums plus explicit approval before installing pip-audit or adding anything to PATH.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Tool Hijacking and SpoofingModifies or replaces tools so legitimate-looking calls execute attacker logic
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (3)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:83
Finding

Automatic Installation of an Unpinned Third-Party Audit Package

Content
View full analysis
/dev/null 2>&1 || pip install pip-audit --quiet pip-audit --format=json 2>/dev/null | python3 -c " import json, sys d = json.load(sys.stdin) deps = d.get('dependencies', []) critical = [v for dep in deps for v in dep.get('vulns', []) if v.get('severity', '').lower() == 'critical'] high = [v for dep in deps for v in dep.get('vulns', []) if v.get('severity', '').lower() == 'high'] print(f'Critical: {len(critical)}, High: {len(high)}, Packages checked: {len(deps)}') " 2>/dev/null || echo "pip-audit not available — install: pip install pip-audit" ``` ### Technical Analysis The Skill directs the agent to install `pip-audit` automatically whenever it is absent. The package version is not pinned, package hashes are not verified, and installation is not constrained to an isolated virtual environment. The command also uses the active Python package index configuration, which may point to an untrusted or organization-specific mirror. Python package installation can execute build-system logic when wheels are unavailable or when a malicious distribution is selected. Consequently, this instruction creates a supply-chain code-execution boundary despite the package installation being ancillary to the Skill's core dependency-auditing function. Automatically modifying the host Python environment exceeds the minimum privilege needed. The Skill can instead use the documented OSV API fallback or require a trusted scanner to be installed explicitly by the user. ### Attack Path 1. A dependency-related task activates the Skill's audit phase. 2. `pip show pip-audit` determines that the package is not installed. 3. The agent executes `pip install pip-audit --quiet` against the active package index. 4. A compromised rel ...[truncated 858 chars]
Remediation
View remediation

T07 · Tool Hijacking and Spoofing

Error
Location
SKILL.md:180
Finding

Execution of Unverified Project-Local Scripts Through Relative Paths

Content
View full analysis
.vibesafe/post-summary.json ./tools/stay-safe-gen.sh .vibesafe/post-summary.json --template=risk-report ``` ### Technical Analysis The Skill tells the agent to execute scripts through relative `./tools/...` paths. These paths resolve inside the agent's current working directory rather than an immutable, trusted Skill installation directory. The audited artifact contains only `README.md` and `SKILL.md`; it does not contain the referenced scripts. Their provenance and implementation therefore cannot be verified from the supplied project. In a target repository controlled by an attacker, files named `tools/audit.sh`, `tools/audit.py`, or `tools/stay-safe-gen.sh` can contain arbitrary commands while appearing to be the legitimate VibeSafe tooling described by the Skill. This behavior crosses a significant trust boundary. Auditing an untrusted repository should not require executing executable content supplied by that same repository. It also exceeds least privilege because generating a report or certificate can be implemented using bundled, verified tooling without invoking target-controlled programs. ### Attack Path 1. An attacker creates or modifies a repository containing a malicious `tools/audit.sh`, `tools/audit.py`, or `tools/stay-safe-gen.sh`. 2. The repository otherwise appears to be an ordinary project requiring a dependency audit. 3. A victim opens the repository and activates the VibeSafe Skill. 4. During certification or post-coding reporting, the agent follows the Skill instructions and resolves `./tools/...` against the attacker-controlled repository. 5. The malicious script executes under the identity and permi ...[truncated 713 chars]
Remediation
View remediation

T03 · Remote Payload Retrieval and Execution

Warning
Location
README.md:101
Finding

Execution of Code Retrieved from a Mutable Remote Repository

Content
View full analysis
Remediation
View remediation
printf '%s %s\n' '' 'tools/audit.sh' | sha256sum --check - bash tools/audit.sh /path/to/your/project ``` - Replace placeholders in published instructions with an actual reviewed commit and checksum maintained as part of a signed release process. ]]>
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
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (12)

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 · SKILL.md (reported line 49)May include surrounding context.

|------|-----------|--------|------------| | Supply chain attack via malicious package | Low | Critical | Pin exact versions, use lockfile | | CVE in outdated dep | Medium | High | Audit before code | | Secrets leaked to git | Medium | Critical | .env + .gitignore policy | | Unmaintained lib breaks in 6 months | Medium | Medium | Check last commit < 12 months |

text

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 · SKILL.md (reported line 291)May include surrounding context.

|------|-----------|--------|------------| | Supply chain attack via malicious package | Low | Critical | Pin exact versions, use lockfile | | CVE in outdated dep | Medium | High | Audit before code | | Secrets leaked to git | Medium | Critical | .env + .gitignore policy | | Unmaintained lib breaks in 6 months | Medium | Medium | Check last commit < 12 months |

text

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

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

For each planned library, query the open vulnerability database:

bash
# Replace LIBRARY_NAME and ECOSYSTEM (npm, PyPI, Go, crates.io, RubyGems, Maven, NuGet)
curl -s -X POST https://api.osv.dev/v1/query \
  -H "Content-Type: application/json" \
  -d '{"package":{"name":"LIBRARY_NAME","ecosystem":"npm"}}' \
  | python3 -c "

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

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

bash
# For npm packages (URL-encode as needed)
PKGNAME="express"
curl -s "https://api.deps.dev/v3alpha/packages/npm/${PKGNAME}" \
  | python3 -c "
import json, sys
d = json.load(sys.stdin)

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 · README.md (reported line 112)May include surrounding context.

md
- Detect your package ecosystem (`package.json`, `requirements.txt`, `Pipfile`, `pyproject.toml`, `go.mod`)
- Run the appropriate auditor(s)
- Pull CVE data from [OSV.dev](https://osv.google.com/) for any library not covered by native tooling
- Write `stay_safe.md` to your project root if clean
- Print a BLOCKED report if anything critical or high is found

---

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest trigger says 'Before writing any code that installs or uses external packages/libraries,' which is expansive and lacks explicit boundaries or negative examples in the trigger field itself. Although the body later adds some scope detail, the top-level activation condition is still broad enough to match many ordinary coding tasks involving dependencies.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The examples 'use X library' and 'install Y' are generic phrases that can occur in routine conversation and may over-trigger the skill. The file does not pair these examples with negative examples or stricter context constraints at that point.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The embedded direct reference to the OSV endpoint reinforces that the skill depends on live outbound calls to a third-party service. In a sensitive environment, even metadata-only requests can leak internal dependency choices or reveal unreleased work.

Content

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

For each planned library, query the open vulnerability database:

bash
# Replace LIBRARY_NAME and ECOSYSTEM (npm, PyPI, Go, crates.io, RubyGems, Maven, NuGet)
curl -s -X POST https://api.osv.dev/v1/query \
  -H "Content-Type: application/json" \
  -d '{"package":{"name":"LIBRARY_NAME","ecosystem":"npm"}}' \
  | python3 -c "

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The embedded direct reference to the OSV endpoint reinforces that the skill depends on live outbound calls to a third-party service. In a sensitive environment, even metadata-only requests can leak internal dependency choices or reveal unreleased work.

Content

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

For each planned library, query the open vulnerability database:

bash
# Replace LIBRARY_NAME and ECOSYSTEM (npm, PyPI, Go, crates.io, RubyGems, Maven, NuGet)
curl -s -X POST https://api.osv.dev/v1/query \
  -H "Content-Type: application/json" \
  -d '{"package":{"name":"LIBRARY_NAME","ecosystem":"npm"}}' \
  | python3 -c "

External Transmission

Medium
Category
Data Exfiltration
Confidence
91% confidence
Finding

The GitHub API maintenance check causes external transmission of repository identifiers to a third party. This can expose what libraries or forks are under evaluation and may reveal internal repository mappings if users substitute private or nonpublic coordinates.

Content

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

bash
# For open-source libs, check recency of last commit:
# Replace OWNER/REPO with the package source repository
curl -s "https://api.github.com/repos/OWNER/REPO/commits?per_page=1" \
  -H "Accept: application/vnd.github.v3+json" \
  | python3 -c "
import json, sys

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The deps.dev query sends package identifiers to an external service, creating another outbound disclosure channel. In aggregate with the other APIs, the skill increases external exposure of a project's dependency planning and technology choices.

Content

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

bash
# For npm packages (URL-encode as needed)
PKGNAME="express"
curl -s "https://api.deps.dev/v3alpha/packages/npm/${PKGNAME}" \
  | python3 -c "
import json, sys
d = json.load(sys.stdin)

External Script Fetching

Low
Category
Supply Chain
Confidence
15% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

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

bash
# For open-source libs, check recency of last commit:
# Replace OWNER/REPO with the package source repository
curl -s "https://api.github.com/repos/OWNER/REPO/commits?per_page=1" \
  -H "Accept: application/vnd.github.v3+json" \
  | python3 -c "
import json, sys

Static analysis

Detected: suspicious.prompt_injection_instructions

Prompt-injection style instruction pattern detected.

Warn
Code
suspicious.prompt_injection_instructions
Location
README.md:137