Back to skill

Security audit

GPU CLI: Remote GPU Compute for ML Training and Inference

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its GPU-wrapper purpose, but it needs review because its manifest grants broader Bash access than the documented runner-only boundary and it includes unsafe pipe-to-shell install guidance.

Review before installing. Keep dry-run and confirmation enabled, do not run the suggested `curl ... | sh` installer without independent verification, and install only if you are comfortable with the manifest's broader Bash permission or the publisher narrows it to the bundled runner. Expect `gpu` commands to use your configured provider account and possibly incur costs.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
runner.sh:102
Finding

Unpinned Remote Installer Is Piped Directly into a Shell

Content
View full analysis
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
manifest.yaml:14
Finding

Manifest Grants General Bash Access Despite Claiming a Runner-Only Boundary

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (12)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
description: Safely run local `gpu` commands via a guarded wrapper (`runner.sh`) with preflight checks and budget/time caps.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
description: Safely run local `gpu` commands via a guarded wrapper (`runner.sh`) with preflight checks and budget/time caps.

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'shell' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

The script surfaces a curl ... | sh installation command in an error message, encouraging execution of a remote script fetched over the network without integrity verification. Even though the runner does not execute it directly, embedding this pattern in a trusted tool can socially engineer operators into unsafe installation behavior, leading to arbitrary code execution if the source is compromised or intercepted.

Content

Scanner excerpt · runner.sh (reported line 102)May include surrounding context.

sh
# Preflight checks
echo_info "Preflight: checking gpu --version"
if ! gpu --version >/dev/null 2>&1; then
  echo_error "'gpu' binary not found on PATH. Please install: curl -fsSL https://gpu-cli.sh/install.sh | sh"
  exit 2
fi

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
100% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · selftest.sh (reported line 16)May include surrounding context.

sh
# --- Tests that don't need the gpu binary ---

# 1) Deny semicolon injection
if ./runner.sh gpu status --json \; rm -rf / 2>/dev/null; then
  fail "semicolon injection not blocked"
else
  pass "semicolon injection blocked"

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
100% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · selftest.sh (reported line 16)May include surrounding context.

sh
# --- Tests that don't need the gpu binary ---

# 1) Deny semicolon injection
if ./runner.sh gpu status --json \; rm -rf / 2>/dev/null; then
  fail "semicolon injection not blocked"
else
  pass "semicolon injection blocked"

Chaining Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Content

Scanner excerpt · selftest.sh (reported line 16)May include surrounding context.

sh
# --- Tests that don't need the gpu binary ---

# 1) Deny semicolon injection
if ./runner.sh gpu status --json \; rm -rf / 2>/dev/null; then
  fail "semicolon injection not blocked"
else
  pass "semicolon injection blocked"

YARA rule 'agent_skill_destructive_autonomous_actions': Autonomous destructive filesystem, shell history, or repository actions in AI agent skills [agent_skills]

High
Category
YARA Match
Confidence
75% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

Scanner excerpt · selftest.sh (reported line 16)May include surrounding context.

sh
#!/usr/bin/env bash
set -euo pipefail

cd "$(dirname "$0")"

pass() { printf "[PASS] %s\n" "$1"; }
fail() { printf "[FAIL] %s\n" "$1"; exit 1; }
skip() { printf "[SKIP] %s\n" "$1"; }

HAS_GPU=false
if command -v gpu >/dev/null 2>&1; then HAS_GPU=true; fi

# --- Tests that don't need the gpu binary ---

# 1) Deny semicolon injection
if ./runner.sh gpu status --json \; rm -rf / 2>/dev/null; then
  fail "semicolon injection not blocked"
else
  pass "semicolon injection blocked"
fi

# 2) Deny dollar-sign injection
if SKILL_INPUT='gpu status $(id)' ./runner.sh 2>/dev/null; then
  fail "dollar injection not blocked"
else
  pass "dollar injection blocked"
fi

# --- Tests that need the gpu binary ---

if [[ "$HAS_GPU" != true ]]; then
  skip "gpu binary not on PATH; skipping preflight tests"
  echo "Self-tests completed (some skipped)."
  exit 0
fi

# 3) Preflight dry-run of a safe command (exits 4 = blocked by dry-run)
SKILL_DRY_RUN=true SKILL_REQUIRE_CONFIRM=fal

External Model or Provider Selection

High
Category
Excessive Agency
Confidence
90% confidence
Finding

Skill selects an external model or provider that may use a different account or billing plan than the operator expects. Undisclosed model switches can cause unexpected cost or quota consumption.

Content

Scanner excerpt · templates/prompts.md (reported line 7)May include surrounding context.

md
- Run `runner.sh gpu inventory --json --available --max-price 0.50` and suggest a GPU for FLUX.
- Run `runner.sh gpu run python train.py --gpu-type "RTX 4090"` with batch size 4; preview the plan.
- Run `runner.sh gpu comfyui run flux_schnell` and sync images to outputs/.
- Run `runner.sh gpu llm run --vllm --model llama-3.1-8b-instruct -y -p 8000:8000`.

Notes
- The skill enforces a single 'runner.sh gpu …' command with no shell chaining or redirection.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README advertises activation via broad natural-language phrases like "Use GPU CLI to ...", which can cause the skill to trigger on loosely matching user input rather than an explicit command. In an execution-oriented skill that runs local CLI commands, this increases the risk of unintended invocation and command execution from ambiguous prompts or prompt-injected text in the conversation context.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The trigger phrase "Run on a GPU" is generic natural language that could overlap with ordinary user requests rather than an intentional invocation of this specific skill. The manifest does not provide exclusion conditions or tighter scope to distinguish when the skill should activate versus when the user is speaking generally about GPU usage.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The allowlist permits the auth subcommand, which can use existing stored credentials or trigger account-affecting authentication flows without any dedicated warning beyond the generic confirmation gate. In a skill context, credential and account operations are more sensitive than ordinary status/read commands, so users should receive explicit notice and narrower policy controls.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.