Back to skill

Security audit

Poyo Sora 2

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly aligned with its PoYo video-generation purpose, but its helper script can expose a PoYo API key if users pass it on the command line.

Review before installing. Use POYO_API_KEY from the environment or a secret manager and do not pass the API key as a command-line argument. Only submit payloads you are comfortable sending to PoYo, especially prompts, callback URLs, and image URLs, and be aware that successful requests may consume account quota or paid credits.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/submit_sora_2.sh:6
Finding

PoYo API Key Exposed Through Command-Line Arguments

Content
View full analysis

Vulnerability Details

File Location: scripts/submit_sora_2.sh, lines 6–10 and 20–23
Vulnerability Type: API credential exposure through process arguments
Risk Level: Medium

Vulnerable Code

bash
Usage:
  export POYO_API_KEY
  submit_sora_2.sh <payload.json>
  submit_sora_2.sh <api_key> <payload.json>

Examples:
  submit_sora_2.sh payload.json
  submit_sora_2.sh "$POYO_API_KEY" payload.json
bash
if [[ $# -eq 1 ]]; then
  : "${POYO_API_KEY:?POYO_API_KEY is required when api_key is not passed explicitly}"
  api_key="$POYO_API_KEY"
  payload_file="$1"
else
  api_key="$1"
  payload_file="$2"
fi

Technical Analysis

The script permits a PoYo API key to be supplied as its first command-line argument and explicitly recommends this invocation in its usage output. Command-line arguments are an inappropriate secret-transport mechanism because they may be captured by shell history, process inspection utilities, CI/CD command logs, endpoint monitoring products, audit systems, or wrapper scripts.

Although the key is ultimately transmitted to the declared HTTPS endpoint in an authorization header, accepting it through argv creates an avoidable local disclosure channel. The script already supports obtaining the credential from POYO_API_KEY, making the command-line mode unnecessary.

Attack Path

  1. A user follows the documented two-argument example and invokes the script with the API key as the first argument.
  2. The complete command is retained by shell history, execution telemetry, CI logging, or another command-monitoring mechanism. Depending on local process visibility controls, the argument may also be observable through process-inspection facilities while the script is running.
  3. A local user or an entity with access to those records retrieves the exposed credential.
  4. The attacker submits authenticated requests directly to the PoYo API usin ...[truncated 579 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove support for supplying the API key as a positional argument.
  2. Require POYO_API_KEY to be provided through the environment or retrieve it from an approved credential manager.
  3. Delete the unsafe two-argument syntax and example from the usage message.
  4. Keep the payload path as the script's only positional argument and reject additional arguments.
  5. Ensure CI/CD systems inject the secret through masked secret variables and do not enable shell tracing around authenticated requests.
  6. Consider warning users to rotate any credential previously used through the documented command-line mode.

A hardened argument-handling pattern is:

bash
if [[ $# -ne 1 ]]; then
  echo 'Usage: submit_sora_2.sh <payload.json>' >&2
  exit 1
fi

: "${POYO_API_KEY:?POYO_API_KEY is required}"
payload_file="$1"

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer ${POYO_API_KEY}" \
  -H 'Content-Type: application/json' \
  --data @"${payload_file}"
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (11)

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · references/api.md (reported line 18)May include surrounding context.

Content-Type: application/json

text

Get API keys from <https://poyo.ai/dashboard/api-key>.

Recommended skill env var:

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill explicitly instructs use of shell-based execution via curl, but it does not declare any tool scope such as allowed-tools or permissions. This creates a governance gap: an agent may invoke shell/network capabilities without an explicit least-privilege declaration, making review, enforcement, and sandboxing harder.

Content

No source excerpt is available for this finding.

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 · references/api.md (reported line 55)May include surrounding context.

Submission example

bash
curl -sS https://api.poyo.ai/api/generate/submit \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{

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

md
payload_file="$2"
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer ${api_key}" \
  -H 'Content-Type: application/json' \
  --data @"${payload_file}"

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

md
payload_file="$2"
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer ${api_key}" \
  -H 'Content-Type: application/json' \
  --data @"${payload_file}"

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 · references/api.md (reported line 5)May include surrounding context.

md
payload_file="$2"
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer ${api_key}" \
  -H 'Content-Type: application/json' \
  --data @"${payload_file}"

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 · references/api.md (reported line 55)May include surrounding context.

md
payload_file="$2"
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer ${api_key}" \
  -H 'Content-Type: application/json' \
  --data @"${payload_file}"

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 · references/api.md (reported line 71)May include surrounding context.

md
payload_file="$2"
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer ${api_key}" \
  -H 'Content-Type: application/json' \
  --data @"${payload_file}"

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 · scripts/submit_sora_2.sh (reported line 27)May include surrounding context.

sh
payload_file="$2"
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer ${api_key}" \
  -H 'Content-Type: application/json' \
  --data @"${payload_file}"

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · scripts/submit_sora_2.sh (reported line 27)May include surrounding context.

sh
payload_file="$2"
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer ${api_key}" \
  -H 'Content-Type: application/json' \
  --data @"${payload_file}"

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This code performs an outbound HTTP request to a third-party API and transmits the contents of a user-supplied JSON payload along with an authorization credential. There is no prompt, log message, or inline warning informing the user that local file contents will be sent over the network.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.