Back to skill

Security audit

Poyo Xai Tts 1

Security checks for vulnerabilities and agentic risk

Overview

This skill is a narrowly scoped PoYo text-to-speech helper that clearly discloses its API use and required API key, with one manageable credential-handling caution.

Install only if you intend to use PoYo's xAI TTS API. Keep POYO_API_KEY in a server-side secret store or protected environment, avoid running the provided script on shared machines, and do not submit private text or callback URLs unless your PoYo account and data handling policies allow it.

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_xai_tts_1.sh:14
Finding

API Key Exposure Through Process Arguments

Content
View full analysis

Vulnerability Details

File Location: scripts/submit_xai_tts_1.sh, line 14
Vulnerability Type: Bearer token disclosure through command-line arguments
Risk Level: Medium

Vulnerable Code:

bash
curl --fail-with-body --request POST \
  --url "https://api.poyo.ai/api/generate/submit" \
  --header "Authorization: Bearer ${POYO_API_KEY}" \
  --header "Content-Type: application/json" \
  --data @"${payload_file}"

Technical Analysis

The shell expands ${POYO_API_KEY} before starting curl, placing the complete Authorization header in the process argument vector. Depending on operating-system process visibility, container configuration, monitoring software, and diagnostic collection, another local user or service may be able to inspect the command line while the request is running.

This is not evidence of deliberate credential exfiltration: the credential is sent only to the documented PoYo HTTPS endpoint. Nevertheless, passing secrets as command-line arguments unnecessarily increases their local exposure.

Attack Path

  1. An attacker first obtains access to a local account, monitoring service, container namespace, or diagnostic facility that can inspect the script's processes.
  2. The legitimate user invokes the submission script while POYO_API_KEY contains a valid credential.
  3. The shell expands the environment variable into curl's --header argument.
  4. During the lifetime of the curl process, the attacker or monitoring facility captures its argument vector.
  5. The attacker extracts the bearer token from the captured authorization header.
  6. The attacker reuses the token to submit requests to the PoYo API until the credential is revoked or expires.

Exploitation requires local process-inspection capability and timing or process monitoring; the script does not transmit the key to an undeclared third party.

Impact Assessment

A recovered API key could grant the attacker ...[truncated 329 chars]

Remediation
View remediation

Remediation Suggestions

Avoid including the bearer token directly in curl's command-line argument vector. Supply sensitive curl configuration through standard input, for example:

bash
printf 'header = "Authorization: Bearer %s"\n' "$POYO_API_KEY" |
  curl --fail-with-body \
    --config - \
    --request POST \
    --url "https://api.poyo.ai/api/generate/submit" \
    --header "Content-Type: application/json" \
    --data @"${payload_file}"

Additionally:

  • Run the script only in a trusted server-side environment with restricted process visibility.
  • Ensure tracing modes such as set -x are never enabled around credential handling.
  • Prevent command lines and authorization headers from being captured by logs, telemetry, crash reports, or job runners.
  • Keep POYO_API_KEY in a suitably protected secret manager or environment injection mechanism.
  • Apply least privilege and usage restrictions to the API key where supported.
  • Rotate the key if process arguments may previously have been collected by untrusted users or monitoring systems.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (10)

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:

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill advertises shell-based execution via curl in its metadata and instructions, but it does not declare an explicit tool scope such as allowed-tools or permissions. That creates an authorization ambiguity where an agent may invoke shell capabilities more broadly than intended, increasing the chance of unintended command execution or policy bypass in environments that rely on declarative tool scoping.

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

Submit Example

bash
curl --fail-with-body --request POST \
  --url "https://api.poyo.ai/api/generate/submit" \
  --header "Authorization: Bearer YOUR_API_KEY" \
  --header "Content-Type: application/json" \

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

sh
payload_file="$1"

curl --fail-with-body --request POST \
  --url "https://api.poyo.ai/api/generate/submit" \
  --header "Authorization: Bearer ${POYO_API_KEY}" \
  --header "Content-Type: application/json" \

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 · SKILL.md (reported line 3)May include surrounding context.

md
payload_file="$1"

curl --fail-with-body --request POST \
  --url "https://api.poyo.ai/api/generate/submit" \
  --header "Authorization: Bearer ${POYO_API_KEY}" \
  --header "Content-Type: application/json" \
  --data @"${payload_file}"

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
payload_file="$1"

curl --fail-with-body --request POST \
  --url "https://api.poyo.ai/api/generate/submit" \
  --header "Authorization: Bearer ${POYO_API_KEY}" \
  --header "Content-Type: application/json" \
  --data @"${payload_file}"

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

md
payload_file="$1"

curl --fail-with-body --request POST \
  --url "https://api.poyo.ai/api/generate/submit" \
  --header "Authorization: Bearer ${POYO_API_KEY}" \
  --header "Content-Type: application/json" \
  --data @"${payload_file}"

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

md
payload_file="$1"

curl --fail-with-body --request POST \
  --url "https://api.poyo.ai/api/generate/submit" \
  --header "Authorization: Bearer ${POYO_API_KEY}" \
  --header "Content-Type: application/json" \
  --data @"${payload_file}"

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

md
payload_file="$1"

curl --fail-with-body --request POST \
  --url "https://api.poyo.ai/api/generate/submit" \
  --header "Authorization: Bearer ${POYO_API_KEY}" \
  --header "Content-Type: application/json" \
  --data @"${payload_file}"

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

sh
payload_file="$1"

curl --fail-with-body --request POST \
  --url "https://api.poyo.ai/api/generate/submit" \
  --header "Authorization: Bearer ${POYO_API_KEY}" \
  --header "Content-Type: application/json" \
  --data @"${payload_file}"

Static analysis

No suspicious patterns detected.