Back to skill

Security audit

Poyo Seedream 4 5

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its PoYo image-generation purpose, but needs review because its helper script supports passing the API key on the command line and prompts/images are sent to PoYo without a clear privacy warning.

Review before installing. Use only if you intend to send generation prompts, reference image URLs, callback URLs, and related task metadata to PoYo. Set POYO_API_KEY through a protected environment or secret manager and do not pass the key as a command-line argument; rotate the key if it was previously used 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_seedream_4_5.sh:4
Finding

API Key Exposure Through Command-Line Arguments

Content
View full analysis

Vulnerability Details

File Location: scripts/submit_seedream_4_5.sh, lines 4-10
Vulnerability Type: API 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_seedream_4_5.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

payload="${2:-${1:+}}"

Technical Analysis

The script accepts the PoYo API key as its first positional command-line argument when POYO_API_KEY is unset. Secrets supplied this way may be recorded in interactive shell history and can be exposed through process inspection or endpoint-monitoring telemetry while the command is running.

The usage message explicitly encourages this insecure invocation pattern. Although the key is legitimately needed to authenticate to PoYo, placing it in the process argument vector creates unnecessary local disclosure risk.

Attack Path

  1. A user runs the script using the documented positional-key mode:
    sh
    scripts/submit_seedream_4_5.sh 'POYO_API_KEY_VALUE' payload.json
    
  2. The plaintext key is stored in shell history or temporarily exposed in the process command line.
  3. A local user or monitoring component with access to that information retrieves the key.
  4. The observer uses the stolen Bearer credential to submit unauthorized requests to the PoYo API.

Exploitation requires access to relevant local process metadata, command history, or captured command telemetry.

Impact Assessment

A successful attacker obtains the victim's PoYo API credential. Within the permissions assigned to that key, the attacker may submit unauthorized image-generation or editing tasks, consume the victim's service credits, and impersonate the victim when accessing supported PoYo API operation ...[truncated 113 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove all positional command-line API-key support.
  2. Require POYO_API_KEY to be supplied through the environment or a protected secret-management mechanism.
  3. Update the usage instructions so they never recommend placing credentials in command arguments.
  4. Fail safely when the environment variable is absent:
    sh
    api_key="${POYO_API_KEY:-}"
    if [ -z "$api_key" ]; then
      echo "POYO_API_KEY must be set." >&2
      exit 1
    fi
    
    payload="${1:-}"
    
  5. Prefer injecting the environment variable directly for the process through a secret manager rather than placing an export command containing the key in persistent shell configuration or history.
  6. Advise users who previously invoked the positional-key mode to clear exposed history or telemetry where feasible and rotate the affected API key.
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 (10)

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-seedream-4-5
description: Seedream 4.5 image generation and editing on PoYo / poyo.ai via `https://api.poyo.ai/api/generate/submit`; use for `seedream-4.5`, `seedream-4.5-edit`, 2K/4K output, multi-reference editing, and higher image counts.
metadata: {"openclaw": {"homepage":"https://poyo.ai/models/seedream-4-5-api", "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 19)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
89% confidence
Finding

The skill explicitly instructs use of an external API endpoint and requires an API key, meaning prompts and any referenced image URLs may be transmitted to a third-party service outside the local trust boundary. In an agent setting, this is a real data exfiltration surface if the skill is invoked with sensitive user content, even though the described functionality legitimately depends on remote inference.

Content

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

md
---
name: poyo-seedream-4-5
description: Seedream 4.5 image generation and editing on PoYo / poyo.ai via `https://api.poyo.ai/api/generate/submit`; use for `seedream-4.5`, `seedream-4.5-edit`, 2K/4K output, multi-reference editing, and higher image counts.
metadata: {"openclaw": {"homepage":"https://poyo.ai/models/seedream-4-5-api", "requires": {"bins": ["curl"], "env": ["POYO_API_KEY"]}, "primaryEnv": "POYO_API_KEY"}}
---

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This markdown file documents sending user-provided prompts, optional reference image URLs, and callback URLs to a third-party API, but it does not include any warning about external data transmission or privacy implications. For markdown files, SQP-2 applies when behavior affecting user data or privacy is described without corresponding warnings.

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 42)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 '{
  "model": "seedream-4.5",
  "callback_url": "https://your-domain.com/callback",
  "input": {

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The script accepts the API key as a positional command-line argument, which can expose the credential through shell history, process listings, audit logs, or job runner metadata on multi-user systems. Although the script also supports reading the key from an environment variable, it explicitly documents the insecure CLI usage path without warning users of the exposure risk.

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 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 42)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_seedream_4_5.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_seedream_4_5.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"

Static analysis

No suspicious patterns detected.