Back to skill

Security audit

Poyo Nano Banana 2

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it claims, but its helper script handles the PoYo API key in a way that can expose the credential to local process inspection.

Review this before installing if the PoYo API key has billing or quota impact. Prefer not to pass the key as a command-line argument, avoid using the helper on shared or heavily monitored machines, and only submit prompts, image URLs, and callback URLs that you are comfortable sending to PoYo.

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_2.sh:10
Finding
PoYo API Key Exposed Through Process Command-Line Arguments<![CDATA[ ## Vulnerability Details **File Location**: `scripts/submit_nano_banana_2.sh`, lines 10-26 **Vulnerability Type**: Credential exposure through process arguments **Risk Level**: Medium ### Vulnerable Code ```bash submit_nano_banana_2.sh "$POYO_API_KEY" payload.json EOF exit 1 fi if [[ $# -eq 1 ]]; then : "${POYO_API_KEY:?POYO_API_KEY is required when api_key is not passed explicitly}" api_key="$POYO_API_KEY" payload_file="$1" else api_key="$1" payload_file="$2" fi curl -sS https://api.poyo.ai/api/generate/submit \ -H "Authorization: Bearer ${api_key}" \ ``` ### Technical Analysis The script supports supplying the PoYo API key as its first positional argument. Command-line arguments can be captured by process inspection tools, monitoring agents, audit logs, shell debugging facilities, or other local users where process visibility is permitted. Regardless of whether the key originates from a positional argument or `POYO_API_KEY`, the script subsequently interpolates it into curl's `-H` command-line argument. While curl is running, the complete `Authorization: Bearer ...` header may therefore be visible in curl's process arguments. Using an environment variable at script invocation does not prevent this second exposure. The issue does not provide remote code execution or elevated operating-system privileges by itself. Exploitation requires local process visibility or access to telemetry that records command lines. ### Attack Path 1. A user starts the script with a valid PoYo API key, either as a positional argument or through `POYO_API_KEY`. 2. The script places the credential in the `api_key` variable and expands it into curl's authorization-header argument. 3. A local observer, process-monitoring agent, or logging system captures the script or curl command line while the process is active. 4. The observer extracts the bearer token from the captured arguments. 5. The observer reuses the token to authenticate directly to the PoYo ...[truncated 543 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove support for passing the API key as a positional command-line argument. 2. Retrieve the credential from a dedicated secret manager or a protected environment variable. 3. Avoid expanding the bearer token into curl's command-line arguments. Place the authorization header in a temporary curl configuration file with permissions set to `0600`, pass that file using `curl --config`, and delete it reliably with an `EXIT` trap. 4. Create temporary files with `mktemp` in a trusted directory and apply a restrictive `umask`, such as `umask 077`. 5. Ensure debugging and verbose modes do not print authorization headers or secret-bearing configuration. 6. Rotate any API key that may already have been exposed through process inspection or command-line telemetry. 7. Where supported, use short-lived and least-privileged API credentials to reduce the impact of disclosure. ]]>
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 (9)

Hidden Instructions

High
Category
Prompt Injection
Content
---
name: poyo-nano-banana-2
description: Nano Banana 2 image generation and advanced editing on PoYo / poyo.ai via `https://api.poyo.ai/api/generate/submit`; use for `nano-banana-2-new`, `nano-banana-2-new-edit`, multi-reference workflows, text-to-image, image-to-image, and 1K/2K/4K output.
metadata: {"openclaw":{"homepage":"https://poyo.ai/models/nano-banana-2","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-2
description: Nano Banana 2 image generation and advanced editing on PoYo / poyo.ai via `https://api.poyo.ai/api/generate/submit`; use for `nano-banana-2-new`, `nano-banana-2-new-edit`, multi-reference workflows, text-to-image, image-to-image, and 1K/2K/4K output.
metadata: {"openclaw":{"homepage":"https://poyo.ai/models/nano-banana-2","requires":{"bins":["curl"],"env":["POYO_API_KEY"]},"primaryEnv":"POYO_API_KEY"}}
---
Confidence
90% 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. In this context that is expected functionality, but it is still a real security/privacy concern because users may unintentionally send sensitive data off-platform to poyo.ai.

External Transmission

Medium
Category
Data Exfiltration
Content
## Endpoint

- Submit task: `POST https://api.poyo.ai/api/generate/submit`
- Status query: see PoYo unified task status docs at <https://docs.poyo.ai/api-manual/task-management/status>
- Model page: <https://poyo.ai/models/nano-banana-2>
- Source docs: <https://docs.poyo.ai/api-manual/image-series/nano-banana-2-new>
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: `POST https://api.poyo.ai/api/generate/submit`
- Status query: see PoYo unified task status docs at <https://docs.poyo.ai/api-manual/task-management/status>
- Model page: <https://poyo.ai/models/nano-banana-2>
- Source docs: <https://docs.poyo.ai/api-manual/image-series/nano-banana-2-new>
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: `POST https://api.poyo.ai/api/generate/submit`
- Status query: see PoYo unified task status docs at <https://docs.poyo.ai/api-manual/task-management/status>
- Model page: <https://poyo.ai/models/nano-banana-2>
- Source docs: <https://docs.poyo.ai/api-manual/image-series/nano-banana-2-new>
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
## Submission example

```bash
curl -sS https://api.poyo.ai/api/generate/submit \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
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
payload_file="$2"
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer ${api_key}" \
  -H 'Content-Type: application/json' \
  --data @"${payload_file}"
Confidence
89% confidence
Finding
The hardcoded external endpoint confirms that this skill is designed to send data outside the local environment to api.poyo.ai. Even if legitimate, this is security-relevant because the payload source is arbitrary and the script provides no boundary checks, trust validation beyond default TLS, or approval gate before exfiltrating file contents.

External Transmission

Medium
Category
Data Exfiltration
Content
payload_file="$2"
fi

curl -sS https://api.poyo.ai/api/generate/submit \
  -H "Authorization: Bearer ${api_key}" \
  -H 'Content-Type: application/json' \
  --data @"${payload_file}"
Confidence
89% confidence
Finding
The hardcoded external endpoint confirms that this skill is designed to send data outside the local environment to api.poyo.ai. Even if legitimate, this is security-relevant because the payload source is arbitrary and the script provides no boundary checks, trust validation beyond default TLS, or approval gate before exfiltrating file contents.

Static analysis

No suspicious patterns detected.