Back to skill

Security audit

Testing Plus

Security checks for vulnerabilities and agentic risk

Overview

This skill is a testing reference that gives templates and command examples, with some safety caveats users should apply before running the examples.

Before running the copied commands, pin dependency versions or image digests where practical, review third-party tools, avoid exposing secrets in CI, and only run load tests or ZAP scans against systems you own or have explicit permission to assess.

Vulnerability Patterns
  • 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
  • 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 (1)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:203
Finding

Unpinned Third-Party Actions, Packages, CLIs, and Container Images

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:203-217, SKILL.md:246-249, SKILL.md:273, SKILL.md:344-346, and SKILL.md:357-358
Vulnerability Type: Supply-chain risk through unpinned third-party dependencies
Risk Level: Medium

Vulnerable Code

yaml
- uses: actions/checkout@v4

- name: Setup Node.js
  uses: actions/setup-node@v4
yaml
- name: Upload coverage
  uses: codecov/codecov-action@v3
  with:
    files: ./coverage/lcov.info
bash
# Install
npm install --save-dev @stryker-mutator/core @stryker-mutator/jest-runner

# Run
npx stryker run
bash
# Install
pip install mutmut
bash
# Docker scan
docker run -t owasp/zap2docker-stable zap-baseline.py \
  -t https://example.com \
  -r report.html
bash
# Snyk
npx snyk test
npx snyk monitor

Technical Analysis

The examples retrieve and execute third-party GitHub Actions, npm packages, Python packages, command-line tools, and a Docker image without pinning them to immutable, reviewed artifacts.

GitHub Action references such as @v4 and @v3 are mutable tags rather than full commit hashes. The npm and pip installation commands do not specify exact package versions. The owasp/zap2docker-stable image uses a mutable image tag rather than a content digest. In addition, npx snyk can download and execute the currently resolved package if Snyk is not already installed locally.

Consequently, identical commands may execute different code at different times. If an upstream release, registry account, Action tag, transitive dependency, or container image is compromised, the documented workflow can introduce attacker-controlled code into a developer workstation or CI runner.

Attack Path

  1. An attacker compromises a referenced package publisher, container registry account, GitHub Action repository, mutable tag, or relevant transitive dependency.
  2. The attacker ...[truncated 1414 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin GitHub Actions to reviewed full commit SHAs instead of mutable major-version tags:

    yaml
    - uses: actions/checkout@REVIEWED_FULL_COMMIT_SHA
    - uses: actions/setup-node@REVIEWED_FULL_COMMIT_SHA
    - uses: codecov/codecov-action@REVIEWED_FULL_COMMIT_SHA
    

    Keep a comment identifying the corresponding release version and use an automated dependency updater to propose reviewed changes.

  2. Pin npm development dependencies to audited exact versions and commit the generated lockfile:

    bash
    npm install --save-dev --save-exact \
      @stryker-mutator/core@AUDITED_VERSION \
      @stryker-mutator/jest-runner@AUDITED_VERSION
    npm ci
    npx --no-install stryker run
    

    Use npm ci in CI so installation follows the committed lockfile without silently changing dependency resolution.

  3. Pin Python dependencies to reviewed versions and use hashes where practical:

    text
    mutmut==AUDITED_VERSION --hash=sha256:VERIFIED_PACKAGE_HASH
    

    Install from a reviewed requirements file with hash enforcement:

    bash
    pip install --require-hashes -r requirements-testing.txt
    
  4. Install Snyk as a pinned, locked development dependency and prevent npx from downloading an undeclared package:

    bash
    npm install --save-dev --save-exact snyk@AUDITED_VERSION
    npx --no-install snyk test
    npx --no-install snyk monitor
    
  5. Pin the OWASP ZAP container image by an audited digest:

    bash
    docker run -t owasp/zap2docker-stable@sha256:VERIFIED_IMAGE_DIGEST \
      zap-baseline.py -t https://example.com -r report.html
    
  6. Run third-party testing tools with least privilege. Restrict CI token permissions, avoid exposing unrelated secrets, use isolated runners where possible, and grant write permissions only to steps that require them.

  7. Establish a controlled update process that verifies package provenance ...[truncated 147 chars]

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 (7)

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The performance testing section provides runnable k6 and Artillery load-test examples targeting live HTTP endpoints without warning that these tools generate real traffic and should only be used against owned or explicitly authorized systems. Users may unintentionally direct disruptive traffic at production or third-party services, causing service degradation or policy violations.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

md
};

export default function () {
  const res = http.get('https://api.example.com/users');
  check(res, {
    'status is 200': (r) => r.status === 200,
    'response time < 500ms': (r) => r.timings.duration < 500,

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The security testing section includes OWASP ZAP and dependency scanning commands but omits a clear authorization warning for active scanning. In a security-focused skill, executable scanning examples without boundaries materially increase misuse risk, because users may scan third-party systems without permission and trigger legal, operational, or reputational harm.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding

Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.