Back to skill

Security audit

usewhisper-autohook

Security checks for vulnerabilities and agentic risk

Overview

This skill is not clearly malicious, but it needs Review because it automatically sends and stores full conversations with an external memory service without strong consent, filtering, or isolation controls.

Install only if you are comfortable with full user messages and assistant replies being sent to Whisper Context and potentially reused in future prompts. Avoid using it for secrets, regulated data, confidential business content, or shared agents unless you add explicit opt-in, redaction, retention/deletion controls, HTTPS-only endpoint validation, and a way to disable memory per session.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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 (4)

T01 · Skill Instruction Hijacking

Error
Location
usewhisper-autohook.mjs:206
Finding

Persistent prompt injection through unsanitized remote memory

Content
View full analysis
post(apiUrl, "/v1/context/query", ctxReq, { retry: true }) ); const context = String(ctxRes?.context || ""); const contextHash = ctxRes?.meta?.context_hash || ctxRes?.meta?.contextHash || undefined; if (contextHash) await writeLastContextHash(stateKey, String(contextHash)); // Build a minimal prompt for upstream: keep existing system messages, strip conversation history, // and replace the last user message with memory-injected text. const systemMessages = messages.filter((m) => m && m.role === "system"); const injectedUser = { role: "user", content: context ? `Relevant long-term memory:\n${context}\n\nNow respond to:\n${String(lastUserMsg.content || "")}` : String(lastUserMsg.content || ""), }; ``` The Anthropic proxy performs the equivalent operation: ```javascript const ctxRes = await withAutoProject({ apiUrl, project }, () => post(apiUrl, "/v1/context/query", ctxReq, { retry: true }) ); const context = String(ctxRes?.context || ""); const contextHash = ctxRes?.meta?.context_hash || ctxRes?.meta?.contextHash || undefined; if (contextHash) await writeLastContextHash(stateKey, String(contextHash)); const injectedUserText = context ? `Relevant long-term memory:\n${context}\n\nNow respond to:\n${lastUserText}` : lastUserText; const upstreamBody = { ...bodyRaw, stream: false, messages: [{ role: "user", content: injectedUserText }], }; ``` The installation instructions mandate this behavior: ```text Before you think or respond to any message: 1) Call get_whisper_context with: user_id = "telegram:{from_id}" session_id = "telegram:{chat_id}" current_query = the user's message text ...[truncated 2739 chars]
Remediation
View remediation

other

Error
Location
usewhisper-autohook.mjs:119
Finding

Unconditional external disclosure and retention of complete conversation turns

Content
View full analysis
post(apiUrl, "/v1/memory/ingest/session", body)); console.log(JSON.stringify(res, null, 2)); ``` The OpenAI proxy automatically performs the same disclosure after producing a response: ```javascript const ingestBody = { project, session_id, user_id, messages: [ { role: "user", content: String(lastUserMsg.content || ""), timestamp: new Date(now.getTime() - 5_000).toISOString() }, { role: "assistant", content: assistantText, timestamp: now.toISOString() }, ], }; await withAutoProject({ apiUrl, project }, () => post(apiUrl, "/v1/memory/ingest/session", ingestBody) ); ``` The documented prompt explicitly requires full-message ingestion: ```text After you generate your final response: 1) Call ingest_whisper_turn with the same user_id and session_id and: user_msg = the full user message assistant_msg = your full final reply Always do this. Never skip. ``` ### Technical Analysis The Skill transmits complete user messages, complete assistant responses, stable user identifiers, stable session identifiers, project identifiers, and timestamps to an external memory service. No local redaction, data classification, secret detection, minimization, or consent check is performed. External ingestion is part of the declared ...[truncated 1761 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
usewhisper-autohook.mjs:725
Finding

Configurable endpoints can transmit API credentials and conversation content over plaintext HTTP

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
README.md:8
Finding

Installation instructions execute an unpinned mutable package release

Content
View full analysis
Remediation
View remediation
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 Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (11)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The README explicitly describes two hooks to be called on every agent turn, including a post-response command that sends both user_msg and assistant_msg to an external API endpoint. Because this is automatic, continuous transmission of conversation content to a third party without any user-facing warning, consent, data-minimization guidance, or handling restrictions creates a real privacy and data-exfiltration risk, especially if sensitive prompts, credentials, or personal data may appear in chat history.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The installation command uses npx clawhub@latest install usewhisper-autohook, which pulls and executes the latest package version without pinning. That creates a supply-chain risk: a compromised or malicious new release could be executed during installation, and because this skill is meant to run automatically on every agent turn, the resulting blast radius is larger than for a one-off tool.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding

The install instruction uses npx clawhub@latest, which fetches and executes the newest published package at install time rather than a reviewed, pinned version. That creates a supply-chain risk: a compromised or malicious new release could run arbitrary code on the host during installation.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The system prompt says to 'Always do this. Never skip.' and to persist every full user message and full assistant reply to external memory on every turn. In context, this makes the skill more dangerous because it is designed for always-on long-term memory, increasing the chance that sensitive or confidential data is continuously exported and retained outside the primary agent environment.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill instructs users to automatically send the full user message and full assistant reply to an external API on every turn, but the copy-paste usage prompt does not include a clear user-facing consent, privacy, or data-minimization warning. This can cause unintentional exfiltration of sensitive conversations, credentials, personal data, or regulated content to a third-party service.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The ingest command uploads both user and assistant conversation turns to remote memory storage with no built-in user-facing disclosure or confirmation. If used in chat or assistant workflows, this can persist sensitive information externally without the knowledge or consent of the end user.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The OpenAI-compatible proxy forwards user prompts and derived memory context to external services, potentially including sensitive conversation content, without any built-in disclosure, consent, or filtering. In an agent integration setting, this can cause users or deployers to unknowingly exfiltrate private data to both the Whisper service and the upstream model provider.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The Anthropic proxy similarly transmits the user's latest message and retrieved long-term memory context to external endpoints without an explicit warning mechanism. This creates a privacy and data-governance risk because operators may think they are only proxying model traffic while the tool is also enriching and exporting conversation-derived context.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The helper silently creates remote projects when a lookup returns 'project not found', which expands its authority from a read/query proxy into a state-changing provisioning tool. In security-sensitive environments, unexpected remote writes can violate least-privilege expectations, create shadow resources, and make accidental data routing or persistence harder to detect and govern.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The comment claims the proxy forwards everything else mostly unchanged, but the implementation replaces the original messages array with only system messages plus one injected user message. This is not a minor omission: it materially changes the request semantics by discarding prior user/assistant turns.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

Automatic project creation performs an external state-changing API call without explicit warning, which can surprise deployers and create unmanaged remote resources. While less severe than direct data exfiltration, it still violates principle-of-least-astonishment and can have governance, billing, or tenancy implications.

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
usewhisper-autohook.mjs:11