Back to skill

Security audit

Speech Recognition Local

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent local speech-to-text tool, with some disclosed setup and dependency caveats users should understand.

Before installing, expect the first run to need external dependency/model retrieval unless already cached, and only allow automatic transcription for voice messages you are comfortable processing and injecting into the conversation.

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
scripts/transcribe.py:17
Finding
Unpinned Remote Model Dependency Without Integrity Verification<![CDATA[ ## Vulnerability Details **File Location**: `scripts/transcribe.py`, lines 17–22 **Vulnerability Type**: Unverified and unpinned third-party model artifact **Risk Level**: Medium ### Vulnerable Code ```python from faster_whisper import WhisperModel print("首次加载模型中...") _cached_model = WhisperModel( "base", device="auto", compute_type="int8" ) ``` ### Technical Analysis The symbolic model identifier `"base"` is passed directly to `WhisperModel`. When the model is not already available locally, `faster-whisper` may resolve and download the corresponding model artifacts from an external model repository. The code does not specify an immutable model revision, verify a cryptographic checksum or signature, or require a prevalidated local model path. Consequently, the exact artifact loaded during first use depends on external repository resolution and the state of the upstream supply chain at that time. This weakens reproducibility and artifact integrity. Although `SKILL.md` discloses that the model is downloaded on first use, the claim that operation is fully offline is only accurate after all required artifacts have been acquired and cached. ### Attack Path 1. A user invokes `scripts/transcribe.py` for a supported audio file. 2. `transcribe()` calls `get_model()`. 3. `get_model()` initializes `WhisperModel("base")`. 4. If the model is absent from the local cache, the dependency resolves and retrieves model artifacts from its configured external source. 5. An attacker who has compromised the upstream repository, distribution channel, dependency resolution process, or network trust boundary supplies an altered artifact. 6. The unverified artifact is cached and loaded by the local transcription process. 7. The altered component may compromise transcription integrity or otherwise affect processing according to the capabilities and loading behavior of the installed dependency. ### Impact Assessment No direct privilege escalation is demon ...[truncated 588 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin `faster-whisper` and all transitive dependencies to reviewed, exact versions using a lock file with package hashes. 2. Pin the model to an immutable upstream revision rather than relying only on the mutable symbolic identifier `"base"`. 3. Record an approved cryptographic checksum for every required model artifact and verify it before loading. 4. Prefer a reviewed local model directory: ```python model_path = "/opt/openclaw/models/faster-whisper-base" _cached_model = WhisperModel( model_path, device="auto", compute_type="int8", local_files_only=True, ) ``` 5. Provision the verified model separately during installation and configure runtime operation to fail closed if it is missing, rather than downloading it automatically. 6. Store model artifacts in a directory that is not writable by untrusted users and apply least-privilege filesystem permissions. 7. Document that the first-run setup requires network access if automatic acquisition remains enabled; do not describe that setup phase as fully offline. ]]>
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (5)

Vague Triggers

Medium
Confidence
94% confidence
Finding
The skill metadata says voice messages are auto-triggered for transcription, but it does not define clear boundaries such as trusted sources, supported contexts, consent requirements, or explicit opt-in conditions. In an agent environment, overly broad automatic activation can cause unintended processing of user content, surprise execution, and possible denial-of-service or privacy issues if any matching audio attachment triggers the workflow.

Vague Triggers

Medium
Confidence
91% confidence
Finding
The usage section states that OpenClaw automatically calls the transcription script when a voice message is received, but it does not specify when this should not happen or what qualifies as an eligible input. That ambiguity increases the chance that untrusted or unexpected audio files are processed automatically, which can expose the host to resource exhaustion, accidental data handling, or unsafe downstream behavior if transcripts are injected into conversations.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The command interface and surrounding usage guidance imply automatic invocation on provided audio files without clearly defining activation conditions or trust assumptions for the file path input. In context, this is risky because the skill processes externally supplied media and injects results into dialogue, so vague triggering semantics can expand the attack surface for untrusted content processing and unintended execution frequency.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
This code includes user-facing docstrings, status messages, errors, and usage text exclusively in Chinese. That creates a language policy issue because the skill requires a specific language for interaction and interpretation without offering an explicit user choice or alternative locale.

Intent-Code Divergence

Low
Confidence
95% confidence
Finding
The transcribe() docstring at L28 states that automatic language detection is the default, and the code at L71 also defaults to "auto" when no language is provided. However, the CLI help text at L67 says "zh(默认)", which actively misrepresents the actual default behavior.

Static analysis

No suspicious patterns detected.