Back to skill

Security audit

usewhisper

Security checks for vulnerabilities and agentic risk

Overview

The skill’s core memory features are disclosed, but it can send API credentials and conversation data to any configured endpoint, including non-HTTPS URLs.

Review before installing. Use only the default trusted API URL unless you intentionally operate another approved endpoint, do not pass secrets or regulated data into memory, keep user_id and session_id scoped per user/session, and treat the API key as a credential. Prefer a pinned installer version instead of npx clawhub@latest when available.

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

T09 · Insecure Skill Coding Practices

Error
Location
whisper-context.mjs:25
Finding

Arbitrary API Endpoint Can Receive the Bearer Token and Sensitive Conversation Data

Content
View full analysis

Vulnerability Details

File Location: whisper-context.mjs:4-6, whisper-context.mjs:25, whisper-context.mjs:242-262
Vulnerability Type: Unrestricted destination for authenticated sensitive-data requests
Risk Level: High

Vulnerable Code

js
const API_URL_DEFAULT = process.env.WHISPER_CONTEXT_API_URL || "https://context.usewhisper.dev";
const API_KEY = process.env.WHISPER_CONTEXT_API_KEY || "";
const PROJECT_DEFAULT = process.env.WHISPER_CONTEXT_PROJECT || "";
js
const apiUrl = flags.api_url || API_URL_DEFAULT;
js
async function post(apiUrl, path, body, options = {}) {
  return requestJson(`${apiUrl}${path}`, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${API_KEY}`,
    },
    body: JSON.stringify(body),
  }, options);
}

async function get(apiUrl, path, options = {}) {
  return requestJson(`${apiUrl}${path}`, {
    method: "GET",
    headers: {
      Authorization: `Bearer ${API_KEY}`,
    },
  }, options);
}

Technical Analysis

The destination URL can be controlled through either WHISPER_CONTEXT_API_URL or the --api_url command-line flag. The value is used without validating its scheme, hostname, port, or trust relationship. Both the post and get helpers attach WHISPER_CONTEXT_API_KEY as a bearer token to requests sent to this destination.

Consequently, an attacker who can influence the process environment, command arguments, or an agent-generated invocation can redirect authenticated traffic to an attacker-controlled server. POST operations may additionally disclose queries, complete user and assistant turns, persistent-memory content, user and session identifiers, metadata, cache-warming queries, or explicitly selected local file contents.

The remote communication itself is necessary for the Skill's declared context and memory functionality and is disclosed in `SKI ...[truncated 1786 chars]

Remediation
View remediation

Remediation Suggestions

  1. Default to a fixed trusted origin such as https://context.usewhisper.dev and do not permit arbitrary per-command destination overrides.
  2. Parse the configured endpoint with new URL() and reject all schemes except https:.
  3. Enforce an explicit hostname and port allowlist. If self-hosted deployments must be supported, maintain a separately configured administrative allowlist.
  4. Require explicit user or administrator approval before sending credentials or private content to a non-default host.
  5. Use destination-scoped credentials for self-hosted endpoints rather than forwarding the production service token.
  6. Reject URLs containing embedded credentials, fragments, unexpected paths, or nonstandard ports unless expressly authorized.
  7. Add tests proving that HTTP URLs, malformed URLs, loopback addresses, link-local addresses, and unapproved domains are rejected.
  8. Clearly warn users before uploading complete conversations, memory data, identifiers, or file-derived content, and support redaction or data-minimization controls.

T08 · Insecure Dependencies

Warning
Location
SKILL.md:30
Finding

Installation Instructions Execute a Mutable Unpinned Package Release

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:30
Vulnerability Type: Unpinned third-party installer execution
Risk Level: Medium

Vulnerable Code

bash
npx clawhub@latest install whisper-context

Technical Analysis

The documented installation command instructs users to download and execute the package currently associated with the mutable latest tag. The executed ClawHub version is therefore not tied to the version that was reviewed during this audit.

If the package publisher account, registry, package release process, or upstream package is compromised, the latest tag can be changed to reference malicious code. Running the command may download and execute that altered code before users can inspect it. This creates a supply-chain trust boundary outside the audited three-file project.

The project itself declares that its runtime helper has no additional npm dependencies. Therefore, executing a mutable installer is an installation-channel risk rather than a runtime dependency required by whisper-context.mjs.

Attack Path

  1. An attacker compromises the clawhub package publisher account, release pipeline, or relevant registry distribution channel.
  2. The attacker publishes a malicious package version and causes the mutable latest tag to resolve to it.
  3. A user follows the installation command in SKILL.md.
  4. npx downloads and executes the attacker-controlled release.
  5. The malicious installer runs with the operating-system privileges of the user performing the installation.
  6. It can access or modify resources available to that user, independently of the reviewed Skill implementation.

Impact Assessment

The potential impact is arbitrary code execution under the installing user's account. This may expose files, environment variables, OpenClaw configuration, API credentials, and other resources accessible to that user. The malicious installer could also modify the inst ...[truncated 213 chars]

Remediation
View remediation

Remediation Suggestions

  1. Replace the mutable tag with an exact, audited package version, for example npx clawhub@<exact-version> install whisper-context.
  2. Where supported, verify the package archive using a published cryptographic integrity hash or signed provenance.
  3. Document the expected publisher, package version, and checksum so users can validate the artifact before execution.
  4. Prefer a trusted, already-installed ClawHub client instead of downloading and executing an installer on every use.
  5. Use lockfiles, registry restrictions, and package-manager provenance verification in automated deployment environments.
  6. Run installation with the least-privileged user necessary and avoid exposing unrelated secrets in the installer process environment.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (11)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
This skill provides a minimal Node-based helper (`whisper-context.mjs`) that OpenClaw agents can run to:

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill explicitly promotes long-term memory and shows commands that send user messages and assistant replies to a remote API, but it does not warn about privacy, retention, consent, or sensitive-data handling. This can lead operators to transmit confidential conversations or personal data off-platform without informed approval or controls.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The README instructs users to run npx clawhub@latest install whisper-context, which fetches and executes the latest published package version without pinning. If the upstream package is compromised, typosquatted, or a malicious version is published, users could execute attacker-controlled code during installation.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill explicitly requires environment variables, invokes Node commands, and makes outbound HTTPS requests, but it does not declare any explicit tool scope such as permissions or allowed-tools. That creates a governance gap: an agent or user may install and run a skill with broader capabilities than expected, increasing the risk of secret exposure, unintended command execution, or unauthorized network access.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

The installation instruction uses npx clawhub@latest install whisper-context, which pulls and executes the latest available package version at install time rather than a pinned, reviewed version. This introduces supply-chain risk: if the upstream package is compromised or a breaking/malicious release is published, users may execute untrusted code during installation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The ingest_session path uploads raw user and assistant message content, along with user/session identifiers and timestamps, to a third-party remote API with no in-script disclosure, consent flow, redaction, or data minimization. In a memory/context skill, this is especially sensitive because the content is likely to include prompts, model outputs, secrets, personal data, and cross-session history, making unintended external exposure materially harmful.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The memory_write command accepts arbitrary content and uploads it directly to the remote Whisper service without warning, consent, or validation. Because this feature is designed for long-term memory, misuse can persistently store highly sensitive data externally, increasing privacy, compliance, and data-governance risk beyond transient API processing.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The manifest describes a context-reduction and memory skill, but the implementation adds oracle_search for generic search/research (L143-L157) and get_cost_summary/cache_stats operational endpoints (L160-L176). Those capabilities are not obvious implementation details of delta compression, caching, or long-term memory, so the code scope exceeds the stated behavior.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

Endpoints for cost reporting (/v1/cost/summary), cache statistics (/v1/cache/stats), and cache warming (/v1/cache/warm) provide service administration and billing-related functions beyond the user-facing purpose of reducing context tokens and adding long-term memory. These are not direct necessities for basic context retrieval or memory storage.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script silently auto-provisions remote projects when a project lookup fails, creating persistent remote resources without explicit operator approval or disclosure. In an agent-skill context, hidden resource creation can bypass governance expectations, incur unexpected billing, and route sensitive conversation data into newly created namespaces the user did not intend to establish.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The setup section tells users to export an API key but provides no warning about protecting credentials from shell history, shared terminals, CI logs, screenshots, or accidental commits. While common in READMEs, omission of basic secret-handling guidance increases the chance of credential leakage and unauthorized API use.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
whisper-context.mjs:7