Back to skill

Security audit

Poyo Nano Banana

Security checks for vulnerabilities and agentic risk

Overview

This is a straightforward PoYo image-generation helper that sends user-provided prompts and image URLs to PoYo’s API, with no evidence of hidden control, persistence, or unrelated data access.

Install only if you are comfortable sending prompts, referenced image URLs, optional callback URLs, and the PoYo API key to PoYo’s service. Prefer setting POYO_API_KEY in the environment rather than passing it on the command line, and do not include secrets, private documents, internal URLs, or sensitive images in payloads unless PoYo is an approved processor 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_nano_banana.sh:4
Finding
API Key Exposure Through Command-Line Arguments## Vulnerability Details **File Location**: `scripts/submit_nano_banana.sh`, lines 4–6 **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_nano_banana.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 ``` ### Technical Analysis When `POYO_API_KEY` is unset, the script accepts the API key as its first positional command-line argument. Secrets supplied this way can be recorded in shell history, process-accounting systems, terminal logs, job telemetry, CI/CD logs, and command-line audit records. Depending on operating-system process visibility and timing, another local user may also read the argument from process metadata while the script is running. Although the script also supports the safer `POYO_API_KEY` environment variable, its usage instructions explicitly promote the insecure positional-argument option. ### Attack Path 1. A user runs the script as documented: ```sh scripts/submit_nano_banana.sh "$API_KEY" payload.json ``` 2. The API key becomes part of the command-line invocation. 3. The invocation is retained in shell history, operational telemetry, process accounting, or CI logs, or is observed through process inspection while running. 4. An attacker with access to that local metadata retrieves the key. 5. The attacker uses the credential to make unauthorized requests to the PoYo API. This path requires access to the affected host, its logs, or its command telemetry; the script does not independently transmit the key to an undeclared destination. ### Impact Assessment Successful exploitation exposes the user's PoYo API credential. An attacker may submit requests under the victim's account, consume paid quota, incur charges, or access other API functionality authorized to ...[truncated 162 chars]
Remediation
## Remediation Suggestions 1. Remove positional command-line support for `POYO_API_KEY`. 2. Require the credential through `POYO_API_KEY` or a protected secret-management mechanism. 3. If interactive entry is needed, read the key without terminal echo rather than placing it in an argument: ```sh if [ -z "${POYO_API_KEY:-}" ]; then printf 'PoYo API key: ' >&2 stty -echo IFS= read -r POYO_API_KEY stty echo printf '\n' >&2 fi api_key="$POYO_API_KEY" ``` 4. For automation, inject the variable from a CI/CD secret store and configure log masking. 5. Change the interface so the only positional argument is the payload file: ```sh : "${POYO_API_KEY:?POYO_API_KEY must be set}" api_key="$POYO_API_KEY" payload="${1:-}" ``` 6. Update `SKILL.md` and the script's usage output to prohibit passing credentials on the command line. 7. Rotate any API key previously supplied as an argument if command history or execution logs may have been retained.
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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (15)

Hidden Instructions

High
Category
Prompt Injection
Content
---
name: poyo-nano-banana
description: Use PoYo AI Nano Banana for general image generation and image editing across many aspect ratios through the `https://api.poyo.ai/api/generate/submit` endpoint. Use when a user wants prompt-based images, reference-image edits, wide or tall canvases, or PoYo payloads for `nano-banana` and `nano-banana-edit`.
metadata: {"openclaw": {"homepage":"https://poyo.ai/models/nano-banana-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-nano-banana
description: Use PoYo AI Nano Banana for general image generation and image editing across many aspect ratios through the `https://api.poyo.ai/api/generate/submit` endpoint. Use when a user wants prompt-based images, reference-image edits, wide or tall canvases, or PoYo payloads for `nano-banana` and `nano-banana-edit`.
metadata: {"openclaw": {"homepage":"https://poyo.ai/models/nano-banana-api", "requires": {"bins": ["curl"], "env": ["POYO_API_KEY"]}, "primaryEnv": "POYO_API_KEY"}}
---
Confidence
92% confidence
Finding
This skill is explicitly designed to send user-supplied content to https://api.poyo.ai, which constitutes external data transmission. In context this is expected functionality, but it remains security-relevant because prompts and referenced images may contain sensitive or private information that is exported outside the trusted environment.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The skill advertises itself for very broad 'general image generation and image editing' use, which can cause it to be invoked for many loosely related requests without clear boundaries or user-consent checks. In this context, overbroad routing increases the chance that sensitive prompts or image URLs are sent to a third-party API when the user did not explicitly intend external processing.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The workflow instructs the agent to transmit prompts, image URLs, and authentication data to PoYo's external API, but it does not warn that user content will leave the local environment and be processed by a third party. This is dangerous because users may unknowingly disclose sensitive text, private image references, or internal URLs to an external service.

External Transmission

Medium
Category
Data Exfiltration
Content
## Quick workflow

1. Choose the right model id for the requested output.
2. Build the request body for `POST https://api.poyo.ai/api/generate/submit`.
3. Send Bearer-authenticated JSON with `Authorization: Bearer <POYO_API_KEY>`.
4. Save the returned `task_id`.
5. Poll unified task status or wait for `callback_url` notifications.
Confidence
94% confidence
Finding
The quick workflow directly instructs Bearer-authenticated submission of JSON payloads to an external API and mentions callback handling, confirming operational exfiltration of user content to a third party. While this appears to be the intended purpose of the skill, the lack of safety gates makes accidental disclosure of sensitive prompts, image URLs, or webhook endpoints more likely.

External Transmission

Medium
Category
Data Exfiltration
Content
## Endpoint

- Submit task: `https://api.poyo.ai/api/generate/submit`
- Status query: <https://docs.poyo.ai/api-manual/task-management/status>
- Source docs: <https://docs.poyo.ai/api-manual/image-series/nano-banana>
- OpenAPI JSON: <https://docs.poyo.ai/api-manual/image-series/nano-banana.json>
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
## Endpoint

- Submit task: `https://api.poyo.ai/api/generate/submit`
- Status query: <https://docs.poyo.ai/api-manual/task-management/status>
- Source docs: <https://docs.poyo.ai/api-manual/image-series/nano-banana>
- OpenAPI JSON: <https://docs.poyo.ai/api-manual/image-series/nano-banana.json>
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
94% confidence
Finding
The reference documents a callback_url and even includes it in the example, but does not clearly warn that task results will be sent to a third-party endpoint chosen by the user. In a skill context, this omission can cause operators to unintentionally exfiltrate prompts, metadata, or generated result information to external infrastructure without understanding the privacy and trust implications.

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": "nano-banana",
  "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
96% confidence
Finding
This line performs external transmission of arbitrary JSON input to a third-party HTTPS endpoint using authentication. Even if functionally intended, it is security-relevant because any sensitive data piped into stdin or read from a file will be sent off-host, which can amount to exfiltration in an agent skill environment.

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
96% confidence
Finding
This line performs external transmission of arbitrary JSON input to a third-party HTTPS endpoint using authentication. Even if functionally intended, it is security-relevant because any sensitive data piped into stdin or read from a file will be sent off-host, which can amount to exfiltration in an agent skill environment.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The script unconditionally submits data to an external API endpoint, but the file provides no inline documentation, validation, or scope restrictions on what data may be sent. In a skill context, this increases the risk of unintended exfiltration of sensitive prompts, files, or user-provided JSON to a third party.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The script sends both the user-supplied payload and a bearer token to a remote service without any user-facing disclosure in the file beyond a usage string. That creates a realistic risk that operators run it without understanding that sensitive content and credentials are being used for external transmission.

Context-Inappropriate Capability

Low
Confidence
77% confidence
Finding
With no manifest available, the skill's intended scope is unknown, so credential access should be treated cautiously. This script explicitly pulls a bearer token from POYO_API_KEY and uses it to authenticate an external API call, which is a nontrivial capability not justified by any stated purpose.

Static analysis

No suspicious patterns detected.