Back to skill

Security audit

runapi-cli

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent RunAPI integration with disclosed network, credential, file upload, and optional paid-task behavior.

Install with the Homebrew/package-manager path when possible, and inspect or verify any remote installer before using the curl-to-shell fallback. Only use the skill with data you are willing to send to RunAPI, confirm any wallet-funded paid task before spending, and keep API keys, payment signatures, and listener secrets out of logs and project files.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (5)

External Script Fetching

High
Category
Supply Chain
Confidence
97% confidence
Finding

The skill recommends piping a remotely fetched installer script directly into the shell. Even with a stated checksum verification step inside the installer, this pattern executes network-delivered code before the user can independently inspect it, creating a supply-chain and remote code execution risk if the distribution path, hosting, TLS trust, or installer logic is compromised.

Content

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

md
| Target | Command |
|---|---|
| macOS / Linux (interactive) | `brew install runapi-ai/tap/runapi` |
| Server / CI (headless) | `curl -fsSL https://runapi.ai/cli/install.sh \| sh` |

The installer detects OS and architecture (Linux and macOS, amd64 and arm64), verifies a SHA-256 checksum from `https://runapi.ai/cli/latest.json`, and refuses to write the binary if verification fails.

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 153)May include surrounding context.

shell
BASE_URL="${RUNAPI_BASE_URL:-https://runapi.ai}"
curl -fsS "$BASE_URL/api/v1/models"
curl -fsS "$BASE_URL/api/v1/price_schedules?service=suno&action=text_to_music&model=suno-v4"
curl -fsS -X POST "$BASE_URL/api/v1/price_quotes" \
  -H 'Content-Type: application/json' \

Chaining Abuse

High
Category
Tool Misuse
Confidence
96% confidence
Finding

The reinstall instructions again use curl piped to sh, which enables command chaining from untrusted network content directly into a shell. In an agent context this is more dangerous because automated systems may execute maintenance steps non-interactively, amplifying supply-chain compromise into immediate code execution on the host.

Content

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

runapi version brew upgrade runapi-ai/tap/runapi

or reinstall

curl -fsSL https://runapi.ai/cli/install.sh | sh

text

After updating, inspect the command help again:

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

md
## Run a model

Write valid JSON to a file and pass it with `--input-file`. The default command
waits synchronously and polls until the task completes. Use inline `--input` or
stdin only when the caller specifically needs that transport.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% 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 153)May include surrounding context.

shell
BASE_URL="${RUNAPI_BASE_URL:-https://runapi.ai}"
curl -fsS "$BASE_URL/api/v1/models"
curl -fsS "$BASE_URL/api/v1/price_schedules?service=suno&action=text_to_music&model=suno-v4"
curl -fsS -X POST "$BASE_URL/api/v1/price_quotes" \
  -H 'Content-Type: application/json' \

Static analysis

No suspicious patterns detected.