Back to skill

Security audit

Poyo Sora 2 Pro

Security checks for vulnerabilities and agentic risk

Overview

This skill is mostly a coherent PoYo video-generation helper, but its helper script encourages passing an API key on the command line, which can expose the credential locally.

Review before installing. Use this only if you intend to send generation prompts, reference image URLs, and optional callback information to PoYo. Set POYO_API_KEY through a protected environment or secret mechanism and avoid passing the key as a command-line argument; rotate the key if you already used it that way.

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_pro.sh:4
Finding
API Key Exposure Through Command-Line Arguments## Vulnerability Details **File Location**: `scripts/submit_sora_2_pro.sh`, lines 4–6 **Vulnerability Type**: API key exposure through process arguments and shell history **Risk Level**: Medium ### Vulnerable Code ```sh api_key="${POYO_API_KEY:-${1:-}}" if [ -z "$api_key" ]; then echo "Usage: submit_sora_2_pro.sh [api_key] [payload.json]" >&2 ``` ### Technical Analysis The script accepts the PoYo API key as its first positional command-line argument when `POYO_API_KEY` is unset. Secrets passed this way may be recorded in shell history and exposed through process inspection while the script is running. The usage message explicitly encourages this insecure invocation method. The API key is subsequently used as a bearer token for requests to the PoYo generation API. Although transmitting it to that declared HTTPS endpoint is necessary for the skill's stated function, accepting it through a positional argument unnecessarily exposes the credential on the local system. ### Attack Path 1. A user invokes the script as documented: ```sh ./scripts/submit_sora_2_pro.sh 'POYO_API_KEY_VALUE' payload.json ``` 2. The command, including the plaintext key, may be retained in the user's shell-history file. 3. While the process is running, the argument may also be visible through local process-monitoring interfaces, subject to operating-system permissions and hardening. 4. A local user, monitoring process, support-data collector, or account with access to the history file retrieves the credential. 5. The attacker sends authenticated requests to the PoYo API using the stolen bearer token. ### Impact Assessment Successful exploitation discloses the user's PoYo API credential. An attacker could authenticate to services available to that key, submit billable generation requests, consume account quotas, and access any other API operations authorized for the credential. This issue does not itself provide operating-syst ...[truncated 264 chars]
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 a protected secret-management mechanism. 3. Change the usage message so it no longer recommends placing a credential on the command line. 4. If interactive entry is required, read the key without terminal echo and avoid exporting or logging it. 5. Ensure CI/CD systems inject the credential through masked secret variables rather than command arguments. 6. Advise users who previously supplied keys as arguments to clear affected shell-history entries and rotate potentially exposed credentials. A safer initialization pattern is: ```sh api_key="${POYO_API_KEY:-}" if [ -z "$api_key" ]; then echo "POYO_API_KEY must be set." >&2 echo "Usage: submit_sora_2_pro.sh [payload.json]" >&2 exit 1 fi payload="${1:-}" ```
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 (13)

Credential Access

High
Category
Privilege Escalation
Content
Content-Type: application/json
```

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

Recommended skill env var:
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Lp3

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding
The skill declares shell-capable behavior via required `curl` usage but does not define any explicit tool scope such as `permissions` or `allowed-tools`. In an agent environment, this increases the chance of unintended command execution or overly broad tool access because the runtime cannot constrain the skill to the minimum necessary capability.

External Transmission

Medium
Category
Data Exfiltration
Content
## Submission example

```bash
curl -sS https://api.poyo.ai/api/generate/submit   -H 'Authorization: Bearer YOUR_API_KEY'   -H 'Content-Type: application/json'   -d '{
  "model": "sora-2-pro",
  "callback_url": "https://your-domain.com/callback",
  "input": {
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
body=$(cat)
fi

curl -sS https://api.poyo.ai/api/generate/submit   -H "Authorization: Bearer $api_key"   -H 'Content-Type: application/json'   -d "$body"
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
body=$(cat)
fi

curl -sS https://api.poyo.ai/api/generate/submit   -H "Authorization: Bearer $api_key"   -H 'Content-Type: application/json'   -d "$body"
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
body=$(cat)
fi

curl -sS https://api.poyo.ai/api/generate/submit   -H "Authorization: Bearer $api_key"   -H 'Content-Type: application/json'   -d "$body"
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
body=$(cat)
fi

curl -sS https://api.poyo.ai/api/generate/submit   -H "Authorization: Bearer $api_key"   -H 'Content-Type: application/json'   -d "$body"
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
body=$(cat)
fi

curl -sS https://api.poyo.ai/api/generate/submit   -H "Authorization: Bearer $api_key"   -H 'Content-Type: application/json'   -d "$body"
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
body=$(cat)
fi

curl -sS https://api.poyo.ai/api/generate/submit   -H "Authorization: Bearer $api_key"   -H 'Content-Type: application/json'   -d "$body"
Confidence
70% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The script sends the provided JSON payload to a remote HTTPS endpoint and includes an Authorization bearer token, but there is no confirmation prompt, visible notice before transmission, or explanatory comment/docstring describing that user-supplied data will be sent off-host. The usage text explains how to provide input, but it does not warn that stdin or file contents are transmitted to an external service.

Missing User Warnings

Low
Confidence
88% confidence
Finding
The skill instructs the agent to send a bearer API key to an external service but does not include a user-facing warning or consent boundary about transmitting prompts, images, or metadata off-platform. This creates a transparency and privacy risk, especially when users may not realize their content is being sent to a third-party video generation provider.

Missing User Warnings

Low
Confidence
84% confidence
Finding
This markdown file documents use of an API key in an Authorization header and directs users to obtain keys from the provider dashboard, but it does not include any warning about keeping the key secret or avoiding exposure in shared logs/scripts. It also introduces outbound transmission to a third-party API, which falls under markdown-file warning criteria when privacy or system integrity could be affected.

Missing User Warnings

Low
Confidence
86% confidence
Finding
The file describes an optional `callback_url` and later states that PoYo will POST callbacks when tasks finish or fail, but it does not explicitly warn users that generation metadata or results may be transmitted to whatever endpoint they provide. For markdown guidance, externally sending user-related data should be accompanied by a clear disclosure.

Static analysis

No suspicious patterns detected.