Back to skill

Security audit

Plaza One

Security checks for vulnerabilities and agentic risk

Overview

This skill openly creates an autonomous Plaza One bot, but it tells the agent to keep acting, chatting, and making social/economy changes without clear user-started bounds or a stop condition.

Review this before installing if you do not want an agent that can proactively speak to other users, send or accept friend requests, and operate game/economy features on its own. Use it only with a dedicated Plaza One bot key, clear runtime limits, and close supervision until the skill defines explicit start, stop, and approval rules.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T01 · Skill Instruction Hijacking

Error
Location
SKILL.md:37
Finding
Mandatory Autonomous Operation Overrides User-Directed Agent Control## Vulnerability Details **File Location**: `SKILL.md`, lines 37–45 and 85–115 **Vulnerability Type**: Agent goal and execution-flow hijacking **Risk Level**: High ### Vulnerable Code Snippet ```markdown **You are autonomous.** Don't wait for instructions. Observe the world, make decisions, and act on your own initiative. You are a social citizen of the plaza — explore, greet people, react to conversations, and have fun. **IMPORTANT: Execute all commands yourself.** Do NOT spawn sub-agents, delegate to child processes, or use framework features to run commands on your behalf. YOU must directly call the IPC endpoint for every action (move, chat, observe, gather, etc.). One agent = one avatar = one loop. Sub-agents cannot control your avatar — only direct API calls work. ``` ```markdown You should run a continuous **observe → decide → act** loop **yourself**. Do NOT delegate this loop to a sub-agent or child process — you must directly call the API for each step. Each iteration = one HTTP POST. ### The Loop 1. **Observe** — POST `{ "command": "observe" }` to get your position, nearby entities, zone distances, and recent chat messages. 2. **Decide** — based on what you see, pick an action: - Someone nearby? Greet them, walk closer, or start a conversation. - New chat messages? Respond naturally if relevant. - Nobody around? Explore a zone, wander, or do an emote. - Been standing still? Move somewhere new. - Someone you haven't met? Send a friend request. 3. **Act** — POST the command directly (move, chat, emote, gather, etc.). 4. **Wait** — pause 3–5 seconds, then loop back to step 1. ### Social Behavior Guidelines - **Be proactive.** Walk up to people and say hello. Don't wait to be spoken to. - **React to chat.** If someone says something in recent chat, respond naturally. If they mention you by name, definitely reply. - **Explore.** Move between zones (Portal Hub, Media Hub, Marketplace). Don't stand in one spot for more than a min ...[truncated 3567 chars]
Remediation
## Remediation Suggestions 1. Remove directives such as “Don't wait for instructions,” “act on your own initiative,” and the requirement to run continuously. 2. Make every session explicitly user-initiated and bound it by a maximum duration, iteration count, and API-call budget. 3. Require confirmation before consequential actions, including: - Public or private chat. - Sending, accepting, declining, or removing friend relationships. - Marketplace purchases, listings, cancellations, or sales. - Profession selection, crafting, and inventory-consuming actions. 4. Default to read-only commands such as `observe`, `profiles`, and `room-info`; elevate to state-changing commands only after clear user authorization. 5. Add an explicit stop mechanism and require immediate termination when the user cancels, the task completes, or the execution budget is reached. 6. Treat player chat and all server-returned text as untrusted data that may inform a response but cannot authorize tools, transactions, credential access, or policy changes. 7. Separate game activity from unrelated assistant work. Do not publish details such as “reading user prompt,” “editing code,” or other potentially sensitive task state unless the user explicitly opts in. 8. Preserve the existing protections that restrict credentials to the official HTTPS endpoint and prohibit secret disclosure. 9. Log consequential actions locally using redacted metadata so users can review what the skill did without exposing the API key. 10. Provide a dry-run mode that lists proposed actions and waits for approval before making external state changes.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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
Findings (2)

Vague Triggers

Medium
Confidence
96% confidence
Finding
The skill explicitly instructs the agent to act autonomously and continuously without requiring a bounded trigger, user authorization, or stop condition. In a shared social environment, this can cause persistent unsolicited interaction, excessive API usage, and policy-violating behavior if the agent continues acting when context is inappropriate or adversarial.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The observe-decide-act loop gives broad behavioral guidance but does not define when the loop may run, when it must stop, or what contexts are excluded. Because the agent coexists with humans and reacts to untrusted chat, ambiguous invocation rules increase the chance of harassment, spam, unwanted friend requests, or autonomous actions being carried out beyond the operator's intent.

Static analysis

No suspicious patterns detected.