Back to skill

Security audit

The Playground

Security checks for vulnerabilities and agentic risk

Overview

This skill openly connects an agent to a public chat playground; it has privacy and dependency cautions but no hidden local access or persistence in the reviewed files.

Install only if you are comfortable with your agent joining an external shared chat service. Do not send secrets, private user data, credentials, system prompts, or sensitive workspace context through the Playground. Treat the published beta token as public, and review or update the npm dependencies before use in any trusted or long-running environment.

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/connect.js:7
Finding

Hardcoded Shared Authentication Token Enables Unauthorized Playground Access and Identity Impersonation

Content
View full analysis

Vulnerability Details

File Location: scripts/connect.js:7-8 and scripts/connect.js:132-139; the same credential is disclosed in SKILL.md:15-18 and README.md:70-74
Vulnerability Type: Hardcoded shared credential and insufficient identity binding
Risk Level: Medium

Vulnerable Code

javascript
// Configuration
const PLAYGROUND_URL = process.env.PLAYGROUND_URL || 'wss://playground-bots.fly.dev/bot';
const PLAYGROUND_TOKEN = process.env.PLAYGROUND_TOKEN || 'playground-beta-2026';

The credential is subsequently transmitted during authentication:

javascript
ws.on('open', () => {
  // Authenticate
  ws.send(JSON.stringify({
    type: 'auth',
    token: PLAYGROUND_TOKEN,
    agent
  }));
});

The same credential is explicitly published in the documentation:

markdown
- **WebSocket**: `wss://playground-bots.fly.dev/bot`
- **Token**: `playground-beta-2026`
- **Dashboard**: https://playground-bots.fly.dev (humans watch here)

Technical Analysis

The client embeds a reusable Playground authentication token as a fallback value and publishes it in the project documentation. Consequently, possession of the project is sufficient to recover the credential without accessing a protected secret store.

Authentication also includes an agent object whose name, ownerId, and description values are supplied through command-line arguments or environment variables. The reviewed client does not provide cryptographic proof that these identity claims belong to the authenticated user. If the server relies only on the shared token, an attacker can authenticate using arbitrary identity metadata.

The default endpoint uses WSS, which protects the credential in transit under normal operation. However, transport encryption does not mitigate public disclosure of the credential. In addition, PLAYGROUND_URL is environment-overridable, so an untrusted runtime configuration could redirect the client to an attacker-controlled WebSocket en ...[truncated 2021 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove the hardcoded fallback token from scripts/connect.js and require credentials to be supplied through a protected secret-management mechanism:
javascript
const PLAYGROUND_TOKEN = process.env.PLAYGROUND_TOKEN;

if (!PLAYGROUND_TOKEN) {
  console.error('PLAYGROUND_TOKEN is required.');
  process.exit(1);
}
  1. Remove the live token from SKILL.md and README.md. Replace it with setup instructions and a nonfunctional placeholder such as YOUR_PLAYGROUND_TOKEN.

  2. Immediately rotate and revoke the exposed shared token because it must be treated as compromised after publication.

  3. Issue unique, revocable credentials for each owner or agent. Prefer short-lived tokens with narrowly scoped permissions rather than a single global beta credential.

  4. Bind each credential to a server-validated owner and agent identity. The server should derive identity from authenticated claims or verify signed identity data instead of trusting arbitrary client-provided name and ownerId values.

  5. Add expiration, audience, issuer, and scope validation on the server. Implement rate limits, abuse monitoring, and credential-specific audit logging.

  6. Restrict PLAYGROUND_URL to an approved WSS origin or require explicit user confirmation before connecting to a nonstandard endpoint. Never send a production credential to an untrusted or plaintext endpoint.

  7. Avoid logging authentication tokens and ensure deployment environments protect PLAYGROUND_TOKEN from unauthorized process, shell-history, and configuration-file access.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (15)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 13)May include surrounding context.

md
node scripts/connect.js --name "YourBotName" --owner "your-id" --description "Your tagline"

Known Vulnerable Dependency: undici==7.19.2 — 16 advisory(ies): CVE-2026-1525 (Undici has an HTTP Request/Response Smuggling issue); CVE-2026-6733 (undici vulnerable to HTTP response queue poisoning via keep-alive socket reuse); CVE-2026-1527 (Undici has CRLF Injection in undici via `upgrade` option) +13 more

High
Category
Supply Chain
Confidence
97% confidence
Finding

The skill directly depends on undici 7.19.2, and the reported advisories include request/response smuggling, keep-alive response queue poisoning, and CRLF injection. Because this skill is explicitly network-facing and intended to connect agents to an external social space, flaws in its HTTP client materially raise the risk of cross-request confusion, header injection, cache/proxy bypass, or misuse of trusted backend connections.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: ws==8.19.0 — 2 advisory(ies): CVE-2026-45736 (ws: Uninitialized memory disclosure); CVE-2026-48779 (ws: Memory exhaustion DoS from tiny fragments and data chunks)

High
Category
Supply Chain
Confidence
96% confidence
Finding

The skill directly depends on ws 8.19.0, which the scanner flags for memory disclosure and memory-exhaustion DoS issues. Given the skill’s purpose—chatting with other AI agents in shared virtual rooms over likely persistent WebSocket connections—this context makes exploitation more plausible, enabling a malicious peer or server to crash the agent process or potentially expose memory contents.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: undici==7.19.2 — 16 advisory(ies): CVE-2026-1525 (Undici has an HTTP Request/Response Smuggling issue); CVE-2026-6733 (undici vulnerable to HTTP response queue poisoning via keep-alive socket reuse); CVE-2026-1527 (Undici has CRLF Injection in undici via `upgrade` option) +13 more

High
Category
Supply Chain
Confidence
99% confidence
Finding

The package includes undici 7.19.2, which is identified as having multiple known high-severity issues including request/response smuggling, queue poisoning, and CRLF injection. In a skill whose purpose is to connect to external services and other agents, these flaws can expose outbound HTTP interactions to manipulation, data leakage, or request confusion by a malicious peer or intermediary.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: ws==8.19.0 — 2 advisory(ies): CVE-2026-45736 (ws: Uninitialized memory disclosure); CVE-2026-48779 (ws: Memory exhaustion DoS from tiny fragments and data chunks)

High
Category
Supply Chain
Confidence
99% confidence
Finding

The resolved ws version is flagged for memory disclosure and memory-exhaustion denial-of-service vulnerabilities. Since this skill is explicitly designed for real-time communication with external bots in shared rooms, an attacker could plausibly trigger these websocket flaws remotely to crash the agent, degrade service, or potentially expose process memory.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README encourages users to have their agent join a public external service and interact with other bots in real time, but it does not warn that this creates an outbound network connection and exposes the agent to untrusted third-party content. In the context of an autonomous agent skill, that omission is security-relevant because users may not realize the bot can receive adversarial prompts, leak data from conversations, or be socially manipulated by external agents.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
76% confidence
Finding

The skill exposes code-capable connection instructions and includes a hardcoded remote token, but it declares no explicit tool scope or permissions boundary. In practice, this can cause an agent to use environment or execution capabilities implicitly, making outbound connections and handling external data without clear operator approval or least-privilege constraints.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill instructs agents to connect to a public remote WebSocket service, authenticate with a shared token, and transmit agent metadata and messages, while only briefly noting that humans watch via a dashboard. Because interaction content, descriptions, and possibly sensitive user-derived data may be sent to a monitored multi-party environment, this creates a meaningful risk of data leakage, prompt exfiltration, and untrusted remote influence over the agent.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script automatically authenticates to a remote WebSocket endpoint and transmits a bearer-like token plus agent identity metadata as soon as the connection opens, without any explicit notice or confirmation to the user. In a socialization skill that connects to a third-party shared service, this creates a real privacy and trust boundary issue because users may not realize their identity, owner ID, and description are being sent off-box to an external service.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

All interactive terminal input is forwarded to the remote Playground service as chat or commands, with no privacy warning, consent prompt, or guard against accidental disclosure. Given this skill's purpose is to socialize with other bots in a shared environment, users are especially likely to type free-form content that may include sensitive data, making silent transmission to a third-party server a genuine privacy vulnerability.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

Publishing a shared beta token in the README without any guidance on credential handling or scope can normalize unsafe secret practices and obscure what access the token grants. Even if this is only a low-privilege public beta token, users may treat it like a normal credential, reuse it insecurely, or fail to understand that anyone can connect and interact with the service.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: fflate==0.8.2 — 1 advisory(ies): CVE-2026-45820 (fflate unzipSync can enter an infinite loop when parsing malformed ZIP64 archive)

Low
Category
Supply Chain
Confidence
93% confidence
Finding

The lockfile pins fflate 0.8.2, which the scanner identifies as affected by a ZIP64 parsing infinite-loop issue in unzipSync. Even though this package is transitive under clawdhub and the impact is primarily denial of service, a skill that may process downloaded or user-supplied archives could be crashed or hung by a malformed archive.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency uses a caret range, which allows newer minor/patch versions to be installed without explicit review. This weakens supply-chain control and can introduce unexpected behavior or newly published malicious or vulnerable releases into the skill.

Content

Scanner excerpt · package.json (reported line 10)May include surrounding context.

json
"connect": "node scripts/connect.js"
  },
  "dependencies": {
    "clawdhub": "^0.3.0",
    "undici": "^7.19.2",
    "ws": "^8.0.0"
  }

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
98% confidence
Finding

The dependency is specified with a caret range, so installations may resolve to different versions over time. In this case the risk is amplified because the package also has known advisories, making uncontrolled upgrades or inconsistent installs especially dangerous for a network-facing skill.

Content

Scanner excerpt · package.json (reported line 11)May include surrounding context.

json
},
  "dependencies": {
    "clawdhub": "^0.3.0",
    "undici": "^7.19.2",
    "ws": "^8.0.0"
  }
}

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
97% confidence
Finding

The ws dependency is not pinned to an exact version, reducing build reproducibility and increasing supply-chain exposure. Because this skill connects agents to a shared social/playground environment over the network, unsafe or unexpected websocket library updates could directly affect a remotely reachable attack surface.

Content

Scanner excerpt · package.json (reported line 12)May include surrounding context.

json
"dependencies": {
    "clawdhub": "^0.3.0",
    "undici": "^7.19.2",
    "ws": "^8.0.0"
  }
}

Static analysis

No suspicious patterns detected.