Back to skill

Security audit

bstorms

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly transparent about its playbook marketplace and API use, but users should review it because it repeatedly recommends unpinned local npm execution and contains conflicting descriptions of key data flows.

Before installing, prefer the MCP or REST path over the optional CLI when possible. If you use the CLI, pin and review a specific `bstorms` package version, run it only in a limited project directory, avoid exposing unrelated secrets, and independently verify wallet transaction details before signing. Treat downloaded playbooks as third-party instructions and review their commands before running them.

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:37
Finding

Unpinned npm Package Execution Through npx

Content
View full analysis
=18):** ```bash npx bstorms browse --tags deploy npx bstorms install npx bstorms publish ./my-playbook ``` ``` The same unpinned CLI invocation pattern is repeated at `SKILL.md:64` and `SKILL.md:186–202`. ### Technical Analysis The documented commands invoke `npx bstorms` without an exact package version, lockfile, or integrity verification. Depending on the local npm configuration and cache state, `npx` can retrieve the current `bstorms` package from the npm registry and execute it with the privileges of the invoking user. This creates a mutable supply-chain boundary: the code executed when a user follows the documentation may differ from the code that existed when this Skill was audited. A compromised package publisher account, malicious package release, registry compromise, or similarly named package resolution issue could therefore introduce attacker-controlled code. The local CLI is optional, and the document identifies MCP and REST interfaces as alternatives. Consequently, local execution of an unpinned package exceeds the minimum privileges required for operations that can be completed through the remote API. The Skill also instructs the Agent to transmit `BSTORMS_API_KEY` to `https://bstorms.ai` as an API authentication parameter. That network transmission is explicitly disclosed and necessary for the declared remote API functionality; no transmission to an unrelated destination was identified. The supply-chain concern arises because a compromised local npm package executing in the same environment could potentially access credentials and files available to the invoking process. ### Attack Path 1. An attacker compromises the npm package publisher account, registry distribution path, or a future `bstorms` rel ...[truncated 1328 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (20)

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding

The skill repeatedly instructs users to run npx bstorms without pinning an exact package version. npx resolves and executes the latest published package by default, which creates supply-chain risk if a future release is compromised or unexpectedly changes behavior. In this skill context, the CLI can read/write local files and install content, so executing an unpinned package is materially riskier than a pure documentation reference.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding

This line references npx bstorms without a pinned version, allowing execution of whatever package version is current at invocation time. That creates a supply-chain exposure where a malicious or compromised upstream release could run locally with the user's permissions. Because this skill promotes operational playbooks and local package install/publish flows, the risk is credible rather than theoretical.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding

Using npx bstorms without version pinning permits silent drift to newer or maliciously replaced releases. Users may assume the command matches the documented behavior, but the executed code is determined at runtime by the registry state. Since the CLI performs local filesystem operations, compromise could affect the user's workspace or secrets.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding

The registration example uses unpinned npx bstorms, exposing users to arbitrary future package changes at execution time. Even if the current package is safe, the documentation normalizes a pattern that undermines reproducibility and opens a path for registry compromise impact. In a security-sensitive tool that handles API keys, that matters.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding

This CLI reference is unpinned and therefore susceptible to npm supply-chain tampering or unexpected upgrades. The skill encourages command execution by readers, so the unsafe pattern could directly lead to local execution of unintended code. The presence of local config storage and package extraction increases the practical impact.

Content

No source excerpt is available for this finding.

Unrestricted Tool Access

Medium
Category
Excessive Agency
Confidence
80% confidence
Finding

Skill grants unrestricted tool access without appropriate constraints. An agent with unfettered tool access can perform arbitrary actions including file modification, network requests, and code execution.

Content

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

md
**Step 2: Store your key securely.** Use `BSTORMS_API_KEY` env var or an encrypted secrets manager. CLI stores it in `~/.bstorms/config.json` with `0600` permissions. Never hardcode keys in source or playbook content.

**Step 3: Use any tool** with the `api_key` from step 1.

## Tools (14 — all available via MCP, REST, and CLI)

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The documented download behavior is inconsistent: one section says it returns playbook content directly as JSON, while another says it returns only a signed URL. This ambiguity matters because consumers may mis-handle untrusted content, misjudge when fetching occurs, or build unsafe automation around the wrong data flow. Given the platform distributes third-party execution instructions, misunderstanding content delivery semantics increases risk.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding

The document again references an unversioned npx bstorms, perpetuating an unsafe execution pattern. Because the command is tied to publishing or package workflows, a compromised release could tamper with local content or exfiltrate accessible data. The risk is increased by the skill's execution-focused audience, who are likely to copy-paste commands.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill contains contradictory statements about what the MCP publish tool does: earlier it says MCP accepts slug, title, and content and publishes directly, while the flow later says MCP returns CLI instructions and no file upload occurs. Security-relevant inconsistencies like this can cause agents or users to assume the wrong trust boundary and accidentally expose local content or invoke unintended tooling. In a system handling third-party playbooks and publishing flows, boundary confusion is itself dangerous.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding

This CLI flow step uses npx bstorms without version pinning, creating the same package substitution risk. Since the flow appears instructional and sequential, users are especially likely to execute it as written. A bad upstream release could harvest the generated API key or alter registration behavior.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
88% confidence
Finding

This line instructs an unpinned npx browse command. While browsing may seem low risk, the actual risk comes from executing arbitrary package code before the tool action occurs. In the context of a CLI with local filesystem access, that is a genuine supply-chain vulnerability pattern.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

npx bstorms install <slug> is especially sensitive because the install flow downloads and extracts package content locally, yet the CLI itself is unpinned. That compounds two risks: execution of an unverified latest CLI release and subsequent manipulation of local project files. This is a true security issue, not merely style guidance.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding

The publish command uses unpinned npx, so users may execute a future CLI release that behaves differently or maliciously. Because publishing reads local directories and uploads content, a compromised package could access sensitive files in the selected path. The impact is moderate due to local code execution with user permissions.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding

This unpinned rate command still requires executing the latest package from npm. Even though the action itself is low sensitivity, the security boundary is the package execution, not the nominal business function. The repeated pattern throughout the skill normalizes unsafe supply-chain hygiene.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding

The Q&A command is shown with unpinned npx, making package compromise a realistic attack route. A malicious release could capture prompts, local config, or environment-derived secrets accessible to the process. In an agent ecosystem, such compromise may also poison downstream workflows.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding

This browse_qa example inherits the same unpinned npx supply-chain risk. The danger is contextualized by the fact that the CLI stores API keys locally, so any compromised release may access those credentials. The issue is repeated enough to indicate negligent documentation hygiene rather than malice.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding

The answer command is another unpinned runtime fetch-and-execute pattern. Any hostile or compromised package release could perform arbitrary local actions before sending the intended API request. Because the skill is explicitly execution-focused, copy-paste likelihood is high, making exposure more dangerous.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
86% confidence
Finding

This tip command uses an unpinned CLI in a payment-related workflow. While signing remains external, a malicious CLI release could alter displayed transaction parameters or mislead the user before wallet approval. That makes the lack of version pinning more sensitive in this context than in a generic utility command.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding

This section references npx bstorms as an optional npm package without pinning, again encouraging floating latest execution. Since the CLI can read/write within the working directory, package compromise could directly affect local data. The document's otherwise strong security language makes this inconsistency notable.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The document explicitly warns never to run npx bstorms install autonomously, but still uses an unpinned npx command. This is particularly dangerous because install both executes the npm package and downloads third-party playbook content, compounding supply-chain and content risk. The context increases severity within the medium band.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.