Back to skill

Security audit

Wiggle Rooms

Security checks for vulnerabilities and agentic risk

Overview

The skill is transparent about being a shared-chat daemon, but it asks users to run an unpinned npm package as a background process with an API key, so it needs review before installation.

Install only if you trust the wiggle-rooms npm package and service operator. Prefer a pinned, reviewed package version, run it with only the required WIGGLE_API_KEY in the environment, limit access to the intended rooms directory, and make sure you know how to stop the background daemon. Do not put secrets or private content in room messages unless every room member and the server storage are acceptable for that data.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:36
Finding

Unpinned Third-Party npm Package Is Downloaded and Executed Automatically

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 36-40
Vulnerability Type: Unpinned remote dependency execution
Risk Level: Medium

Vulnerable Code

markdown
## Setup

Once `WIGGLE_API_KEY` is set, start the daemon in the background — do **not** block on it:

```bash
npx -y wiggle-rooms run
text

The associated behavior is also documented at `SKILL.md:19`:

```markdown
1. `npx -y wiggle-rooms` downloads the [`wiggle-rooms`](https://www.npmjs.com/package/wiggle-rooms) npm package on first use ([source](https://github.com/dankelleher/wiggle-rooms)).

Technical Analysis

The setup instruction invokes npx with the -y option and does not specify an exact package version or integrity hash. This automatically approves package installation and executes whichever release the npm registry currently resolves for wiggle-rooms.

Because the downloaded implementation is not included in the audited project and is not cryptographically pinned, the effective executable code can change after this skill has been reviewed. A compromised npm maintainer account, package release process, registry entry, or malicious future package version could therefore introduce arbitrary code without requiring any modification to SKILL.md.

This is an insecure dependency execution pattern. The reviewed file does disclose that the package is downloaded and that the daemon communicates with a central server, but disclosure does not mitigate the mutable supply-chain risk.

Attack Path

  1. An attacker compromises the wiggle-rooms npm package, its maintainer account, or its release pipeline.
  2. The attacker publishes a malicious version that resolves when the unversioned package name is requested.
  3. An operator or agent follows the documented setup command: npx -y wiggle-rooms run.
  4. npx downloads the currently resolved package and automatically accepts installation because of -y.
  5. npm e ...[truncated 1242 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin the package to a specifically reviewed version rather than resolving the current release dynamically, for example:
    bash
    npx -y wiggle-rooms@<reviewed-exact-version> run
    
  2. Prefer installing through a committed lockfile containing npm integrity metadata, followed by execution of the locally installed binary.
  3. Verify the package artifact and its transitive dependencies during release or installation using trusted integrity hashes and dependency scanning.
  4. Avoid automatic installation approval where practical. Separate package acquisition and review from package execution.
  5. Run the daemon under a dedicated, least-privileged account or sandbox with access only to the required room directory.
  6. Expose only WIGGLE_API_KEY and other strictly required environment variables to the daemon; remove unrelated secrets from its environment.
  7. Restrict outbound network access to the explicitly approved HTTPS service endpoint where the execution environment supports egress controls.
  8. Establish a controlled upgrade process so every new dependency version is reviewed and tested before deployment.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (5)

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

npx -y wiggle-rooms downloads and executes the latest package version from npm at runtime without pinning or integrity verification. This creates a supply-chain risk: if the package, maintainer account, dependency tree, or npm resolution path is compromised, arbitrary code can run on the agent's machine with access to the WIGGLE_API_KEY and local files.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The setup instruction npx -y wiggle-rooms run performs a live fetch and executes unpinned code as a long-lived daemon. In this skill's context, that is especially risky because the daemon continuously handles room data and authenticates with WIGGLE_API_KEY, so a compromised package could exfiltrate credentials, monitor conversations, or tamper with local files over an extended period.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

npx wiggle-rooms help also relies on resolving and potentially downloading the latest package version from npm without a version pin. While invoking help may seem low risk, the package's install scripts or command startup logic can still execute arbitrary code before displaying usage information.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

npx wiggle-rooms sync executes unpinned remote package code for a one-shot sync operation, preserving the same supply-chain exposure as the other invocations. Even though this mode exits quickly, compromise at fetch or startup time is sufficient for credential theft, data exfiltration, or malicious filesystem actions.

Content

No source excerpt is available for this finding.