Back to skill

Security audit

Poyo Seedance 2

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to be a real PoYo video-generation helper, but users should review its credential handling because the shell script supports passing an API key on the command line.

Install only if you intend to send prompts, media URLs, callback URLs, and generation parameters to PoYo. Prefer setting POYO_API_KEY in a protected environment variable, do not pass the key as a command-line argument, and avoid submitting sensitive or regulated content unless PoYo processing is approved for that data.

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_seedance_2.sh:4
Finding

API Key Exposure Through Command-Line Arguments

Content
View full analysis

Vulnerability Details

File Location: scripts/submit_seedance_2.sh, lines 4–7
Vulnerability Type: Credential 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_seedance_2.sh [api_key] [payload.json]" >&2
  echo "Or set POYO_API_KEY and pass [payload.json]. If no payload file is given, JSON is read from stdin." >&2
  exit 1
fi

Technical Analysis

When POYO_API_KEY is unset, the script reads the API key from its first positional argument. Supplying secrets through command-line arguments is unsafe because the invocation may be retained in shell-history files. While the script is running, the argument may also be visible through operating-system process inspection facilities to users or monitoring tools with sufficient local access.

The usage instructions explicitly advertise this insecure invocation method, increasing the likelihood that users will expose their credentials.

Attack Path

  1. A user runs the script using the documented positional-key form:

    sh
    scripts/submit_seedance_2.sh SECRET_API_KEY payload.json
    
  2. The complete command, including the API key, may be written to the user's shell history.

  3. While the command executes, the key may also be exposed in process metadata.

  4. A local actor, administrator, diagnostic tool, log collector, or later reader of the history file obtains the key.

  5. The exposed key is used to submit unauthorized requests to the PoYo API.

This path requires access to the relevant local process information, command history, or collected telemetry; it does not provide remote compromise by itself.

Impact Assessment

An attacker who obtains the API key can authenticate to PoYo with the privileges associated with that credential. This may allow unauthorized video-generation requests, consumption of account credits or quota, and access to any other API ...[truncated 134 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove support for API keys supplied as positional command-line arguments.

  2. Require the key through POYO_API_KEY, preferably populated by a secrets manager or protected runtime environment.

  3. If interactive entry is necessary, read the key from a terminal with input echo disabled rather than from argv.

  4. Revise the usage message so it no longer recommends passing a key on the command line.

  5. Document safe secret handling, including avoiding shell history, scripts, source files, and logs.

  6. Advise users who previously used the positional form to rotate potentially exposed keys.

  7. A hardened implementation could begin with:

    sh
    api_key="${POYO_API_KEY:-}"
    if [ -z "$api_key" ]; then
      echo "POYO_API_KEY must be set." >&2
      exit 1
    fi
    
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (13)

Hidden Instructions

High
Category
Prompt Injection
Confidence
60% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

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

md
---
name: poyo-seedance-2
description: Seedance 2 video generation on PoYo / poyo.ai via `https://api.poyo.ai/api/generate/submit`; use for `seedance-2`, `seedance-2-fast`, text-to-video, first/last-frame image-to-video, multimodal image/video/audio references, 4s-15s clips, optional audio, and seed control.
metadata: {"openclaw":{"homepage":"https://poyo.ai/models/seedance-2","requires":{"bins":["curl"],"env":["POYO_API_KEY"]},"primaryEnv":"POYO_API_KEY"}}

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

Content-Type: application/json

text

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

Recommended skill env var:

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

This skill is designed to transmit user-controlled content to an external service endpoint, which is an inherent external data exfiltration surface even if it is the intended functionality. In context, the danger is not hidden code execution but the movement of prompts and media references to a third party, potentially exposing sensitive business or personal data if users are not informed and if usage is not constrained.

Content

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

md
---
name: poyo-seedance-2
description: Seedance 2 video generation on PoYo / poyo.ai via `https://api.poyo.ai/api/generate/submit`; use for `seedance-2`, `seedance-2-fast`, text-to-video, first/last-frame image-to-video, multimodal image/video/audio references, 4s-15s clips, optional audio, and seed control.
metadata: {"openclaw":{"homepage":"https://poyo.ai/models/seedance-2","requires":{"bins":["curl"],"env":["POYO_API_KEY"]},"primaryEnv":"POYO_API_KEY"}}
---

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill explicitly sends user prompts and potentially user-supplied media references to an external third-party API using a privileged API key, but it does not warn users about that data transfer in the description. This creates a real privacy and consent issue because users may provide sensitive prompts, images, video, or audio without understanding that the content leaves the local environment and is processed by PoYo.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The documentation explicitly encourages use of a callback URL and user-supplied external media URLs, which causes prompts, media, and result metadata to be transmitted to third-party infrastructure. In a skill context, failing to warn users about this data flow can lead to unintended disclosure of sensitive user content or internal callback endpoints.

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

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

md
body=$(cat)
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer $api_key" \
  -H 'Content-Type: application/json' \
  -d "$body"

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

md
body=$(cat)
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer $api_key" \
  -H 'Content-Type: application/json' \
  -d "$body"

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

md
body=$(cat)
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer $api_key" \
  -H 'Content-Type: application/json' \
  -d "$body"

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

md
body=$(cat)
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer $api_key" \
  -H 'Content-Type: application/json' \
  -d "$body"

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_seedance_2.sh (reported line 22)May include surrounding context.

sh
body=$(cat)
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer $api_key" \
  -H 'Content-Type: application/json' \
  -d "$body"

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_seedance_2.sh (reported line 22)May include surrounding context.

sh
body=$(cat)
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer $api_key" \
  -H 'Content-Type: application/json' \
  -d "$body"

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The script performs an HTTP request that transmits both the bearer token and arbitrary JSON payload to a remote API, but the file contains no comment, log message, or confirmation indicating that user-provided data will be sent externally. For a code file, this matches the missing-warning criterion for network calls that transmit user or system data.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.