Back to skill

Security audit

Simple stt(sound-to-text) locally

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent local Whisper speech-to-text tool, but its installer makes broad host-level changes without enough user control.

Review before installing. This appears to be a legitimate local transcription skill, but run it only in a disposable or contained environment unless you accept automatic system package installation, unpinned dependency downloads, local transcript persistence, and replacement of the fixed stt-simple virtual environment.

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)

T08 · Insecure Dependencies

Warning
Location
install.sh:57
Finding

Unpinned Dependencies Permit Supply-Chain Code Execution

Content
View full analysis
/dev/null; then yum install -y ffmpeg ``` ```bash "$VENV_DIR/bin/pip" install --upgrade pip "$VENV_DIR/bin/pip" install openai-whisper ``` ### Technical Analysis The installation script retrieves `ffmpeg`, `pip`, `openai-whisper`, and their transitive dependencies without exact version constraints, package hashes, or a reviewed lock file. Consequently, identical executions of the installer can resolve to different code over time. Package installation is an executable-code boundary. Python packages may execute build backends or installation hooks, while operating-system packages execute package-maintainer scripts. The risk is amplified because the script uses `/root` paths and invokes system package managers, indicating that it is intended to be run with elevated privileges. No malicious package or compromised repository is present in the audited project. The vulnerability is the absence of controls that would contain an upstream package compromise, malicious release, dependency-confusion event, or unexpected dependency update. ### Attack Path 1. An attacker compromises a package repository, an upstream dependency, a maintainer account, or the dependency-resolution path. 2. The attacker publishes or substitutes a malicious version of `openai-whisper`, `pip`, `ffmpeg`, or a transitive dependency. 3. An administrator runs `install.sh`. 4. The unrestricted package commands resolve and download the attacker-controlled version. 5. Package build, installation, import, or maintainer code executes with the privileges of the installer. 6. If the installer is running as root, the malicious dependency can modify system files, access root-readable data, install persistence, or compromise ...[truncated 663 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
stt_simple.py:21
Finding

Unrestricted Model Argument Can Reach Unsafe Checkpoint Deserialization

Content
View full analysis
dict: """Transcribe audio using Whisper.""" import whisper if not os.path.exists(audio_path): raise FileNotFoundError(f"Audio file not found: {audio_path}") print(f"Loading model: {model}...", file=sys.stderr) whisper_model = whisper.load_model(model) ``` The model value is taken directly from the command line: ```python model = sys.argv[2] if len(sys.argv) > 2 else "small" ``` ### Technical Analysis The command-line `model` argument is passed to `whisper.load_model` without an allowlist or rejection of filesystem paths and URLs. Whisper supports built-in model identifiers and, depending on the installed version, may also accept local checkpoint paths. Whisper model checkpoints are loaded through the PyTorch model-loading stack. Versions or configurations that use pickle-compatible checkpoint deserialization can execute attacker-controlled Python objects when a malicious checkpoint is loaded. The exact behavior is dependency-version-sensitive, which is especially significant because `install.sh` does not pin Whisper or PyTorch versions. The audio path is checked for existence, but no equivalent validation is applied to the model argument. Therefore, callers that can control command-line arguments may be able to direct the process to an untrusted local checkpoint rather than one of the intended built-in Whisper models. ### Attack Path 1. An attacker creates a malicious model checkpoint containing a deserialization payload. 2. The attacker places that checkpoint at a path readable by the skill process, or persuades another component or user to download it. 3. The attacker causes the skill to run with the checkpoint path ...[truncated 1224 chars]
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (9)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · README.md (reported line 101)May include surrounding context.

重新安装 / Reinstall

bash
rm -rf /root/.openclaw/venv/stt-simple
bash /root/.openclaw/workspace/skills/stt-simple/install.sh

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · README.md (reported line 101)May include surrounding context.

重新安装 / Reinstall

bash
rm -rf /root/.openclaw/venv/stt-simple
bash /root/.openclaw/workspace/skills/stt-simple/install.sh

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

The skill advises running 'rm -rf /root/.openclaw/venv/stt-simple' as part of reinstallation. Although the target is narrowly scoped and likely intended for maintenance, destructive recursive deletion commands are risky in agent or operator workflows because path expansion, copy/paste errors, symlink abuse, or variable substitution in adjacent automation can turn them into unintended data loss.

Content

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

/root/.openclaw/venv/stt-simple/bin/whisper --version

重新安装 / Reinstall

rm -rf /root/.openclaw/venv/stt-simple /root/.openclaw/workspace/skills/stt-simple/install.sh

text

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% confidence
Finding

The skill advises running 'rm -rf /root/.openclaw/venv/stt-simple' as part of reinstallation. Although the target is narrowly scoped and likely intended for maintenance, destructive recursive deletion commands are risky in agent or operator workflows because path expansion, copy/paste errors, symlink abuse, or variable substitution in adjacent automation can turn them into unintended data loss.

Content

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

/root/.openclaw/venv/stt-simple/bin/whisper --version

重新安装 / Reinstall

rm -rf /root/.openclaw/venv/stt-simple /root/.openclaw/workspace/skills/stt-simple/install.sh

text

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
86% confidence
Finding

The skill documentation instructs users to run an install script that creates directories, installs dependencies, downloads models, and creates output paths, but the manifest declares no explicit tool scope or permissions. This mismatch increases risk because the skill performs file-writing behavior without transparent permission boundaries, making it harder for a reviewer or runtime to constrain what the installation process may modify.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The installer unconditionally deletes an existing virtual environment at a fixed path under /root and recreates it without user confirmation or backup. This can destroy prior packages, local modifications, or state in that environment, which is risky for a one-command install script and especially impactful when run as root.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script automatically performs system package manager operations (apt-get/yum/brew install ffmpeg) without explicit confirmation, which modifies the host outside the skill's isolated environment. In a skill installer, this is dangerous because it changes global system state, may require elevated privileges, and can have unintended side effects on the host configuration.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The transcribe function defaults the language parameter to "zh", which imposes a specific locale when the user does not explicitly choose one. This matches the policy category for language or locale constraints without opt-in, especially since the CLI also documents and repeats the same default.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The manifest description presents the skill as a local speech-to-text utility, which implies transcription of provided audio. In addition to transcribing, the implementation persists results to /root/.openclaw/workspace/stt_output, adding a file-writing side effect not stated in the manifest description.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.