Back to skill

Security audit

Poyo Gpt 4o Image

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it claims by submitting image jobs to PoYo, but its helper script handles API keys and request data in a way that can expose sensitive information locally.

Review before installing. Use POYO_API_KEY rather than typing keys as command arguments, avoid submitting sensitive prompts or private/internal URLs, and prefer a safer submission path that does not place credentials or payloads in process arguments.

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_gpt_4o_image.sh:4
Finding
API Credentials and Sensitive Request Data Exposed Through Process Arguments<![CDATA[ ## Vulnerability Details **File Location**: `scripts/submit_gpt_4o_image.sh`, lines 4–22 **Vulnerability Type**: Sensitive information exposure through command-line arguments **Risk Level**: Medium ### Vulnerable Code ```sh api_key="${POYO_API_KEY:-${1:-}}" if [ -z "$api_key" ]; then echo "Usage: submit_gpt_4o_image.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:+}}" if [ -n "${POYO_API_KEY:-}" ]; then payload="${1:-}" fi if [ -n "$payload" ] && [ "$payload" != "$api_key" ]; then body=$(cat "$payload") else body=$(cat) fi curl -sS https://api.poyo.ai/api/generate/submit -H "Authorization: Bearer $api_key" -H 'Content-Type: application/json' -d "$body" ``` ### Technical Analysis The script permits the PoYo API key to be supplied as its first positional command-line argument. Credentials entered this way can be retained in shell history and exposed through process-inspection interfaces while the script is running. The script also expands the API key and the entire JSON request body into the arguments passed to `curl`: ```sh -H "Authorization: Bearer $api_key" -d "$body" ``` Consequently, the `curl` process command line can contain both the Bearer credential and sensitive request content. Depending on the operating system's process-inspection restrictions, another local user, a process running under the same account, or a privileged process may be able to inspect these arguments. Request bodies may contain private prompts, callback URLs, reference-image URLs, mask URLs, or other user-controlled metadata. This issue does not establish remote compromise by itself. Exploitation requires access to command history or sufficient local permission to inspect the affected processes. ### Attack Path 1. A victim invokes the script with the API key as a positional argument or supplies it through `POYO_API_KEY`. 2. ...[truncated 1394 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove support for passing the API key as a positional argument. Require it through a protected secret provider or environment variable and update the usage message accordingly. 2. Avoid expanding authorization headers into `curl` command-line arguments. Prefer an API client library that sets HTTP headers internally. 3. If `curl` must be retained, place the authorization header in a securely created configuration or header file: - Create it with restrictive permissions such as `0600`. - Use a private temporary directory. - Install a shell `trap` to delete it on normal exit and interruption. - Pass only the protected file path to `curl`. 4. Send the JSON body through standard input, for example with `--data-binary @-`, rather than expanding its contents into a command-line argument. 5. Disable shell-history recording around unavoidable secret entry and ensure documentation explicitly warns users never to type API keys as command arguments. 6. Rotate any API key that may previously have been supplied on the command line, and configure the replacement key with the minimum required API permissions and spending limits. 7. Add a regression test that inspects the spawned process arguments and verifies that neither the Bearer token nor the JSON body appears in them. ]]>
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 (11)

Hidden Instructions

High
Category
Prompt Injection
Content
---
name: poyo-gpt-4o-image
description: Use PoYo AI GPT-4o Image through the `https://api.poyo.ai/api/generate/submit` endpoint. Use when a user wants to generate or edit media with this model family, prepare PoYo-compatible payloads, submit jobs, or poll task status for `gpt-4o-image`, `gpt-4o-image-edit`.
metadata: {"openclaw": {"homepage":"https://poyo.ai/models/gpt-4o-image-api", "requires": {"bins": ["curl"], "env": ["POYO_API_KEY"]}, "primaryEnv": "POYO_API_KEY"}}
Confidence
60% confidence
Finding
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

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.

External Transmission

Medium
Category
Data Exfiltration
Content
---
name: poyo-gpt-4o-image
description: Use PoYo AI GPT-4o Image through the `https://api.poyo.ai/api/generate/submit` endpoint. Use when a user wants to generate or edit media with this model family, prepare PoYo-compatible payloads, submit jobs, or poll task status for `gpt-4o-image`, `gpt-4o-image-edit`.
metadata: {"openclaw": {"homepage":"https://poyo.ai/models/gpt-4o-image-api", "requires": {"bins": ["curl"], "env": ["POYO_API_KEY"]}, "primaryEnv": "POYO_API_KEY"}}
---
Confidence
50% 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
---
name: poyo-gpt-4o-image
description: Use PoYo AI GPT-4o Image through the `https://api.poyo.ai/api/generate/submit` endpoint. Use when a user wants to generate or edit media with this model family, prepare PoYo-compatible payloads, submit jobs, or poll task status for `gpt-4o-image`, `gpt-4o-image-edit`.
metadata: {"openclaw": {"homepage":"https://poyo.ai/models/gpt-4o-image-api", "requires": {"bins": ["curl"], "env": ["POYO_API_KEY"]}, "primaryEnv": "POYO_API_KEY"}}
---
Confidence
50% 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
---
name: poyo-gpt-4o-image
description: Use PoYo AI GPT-4o Image through the `https://api.poyo.ai/api/generate/submit` endpoint. Use when a user wants to generate or edit media with this model family, prepare PoYo-compatible payloads, submit jobs, or poll task status for `gpt-4o-image`, `gpt-4o-image-edit`.
metadata: {"openclaw": {"homepage":"https://poyo.ai/models/gpt-4o-image-api", "requires": {"bins": ["curl"], "env": ["POYO_API_KEY"]}, "primaryEnv": "POYO_API_KEY"}}
---
Confidence
50% 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
---
name: poyo-gpt-4o-image
description: Use PoYo AI GPT-4o Image through the `https://api.poyo.ai/api/generate/submit` endpoint. Use when a user wants to generate or edit media with this model family, prepare PoYo-compatible payloads, submit jobs, or poll task status for `gpt-4o-image`, `gpt-4o-image-edit`.
metadata: {"openclaw": {"homepage":"https://poyo.ai/models/gpt-4o-image-api", "requires": {"bins": ["curl"], "env": ["POYO_API_KEY"]}, "primaryEnv": "POYO_API_KEY"}}
---
Confidence
50% 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
93% confidence
Finding
The reference documents submission of prompts, image URLs, and optional callback URLs to a third-party API but does not warn users that their content leaves the local environment. This can lead developers to unknowingly send sensitive prompts, internal image links, or user data to an external service, creating privacy, compliance, and data handling risks.

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": "gpt-4o-image",
  "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
95% confidence
Finding
This command performs an outbound network request to a third-party API and includes both attacker-controllable payload data and an Authorization bearer token. External transmission is not inherently malicious, but in a skill it becomes dangerous when it can move sensitive local or user-provided data off the system without strong visibility, validation, or policy controls.

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
95% confidence
Finding
This command performs an outbound network request to a third-party API and includes both attacker-controllable payload data and an Authorization bearer token. External transmission is not inherently malicious, but in a skill it becomes dangerous when it can move sensitive local or user-provided data off the system without strong visibility, validation, or policy controls.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The script reads arbitrary JSON from a file or stdin and sends it, יחד with a bearer API key, to an external service without any in-script disclosure, confirmation prompt, or safeguards about what data may be transmitted. In an agent skill context, silent exfiltration to a third-party endpoint is security-relevant because users or upstream tooling may not realize sensitive prompts, files, or tokens are being sent off-host.

Static analysis

No suspicious patterns detected.