Back to skill

Security audit

Audio Command Executor

Security checks for vulnerabilities and agentic risk

Overview

The skill’s audio workflow is mostly coherent, but it gives inbound audio broad influence and shows unsafe local command templates for untrusted file paths.

Install only if you intend to process trusted audio from the specified local inbound directory. Before use, require safe argument-array execution for ffmpeg and whisper, validate/canonicalize filenames inside the inbound directory, write converted files to a controlled temporary location, and do not let transcribed audio instructions drive broader agent actions without user confirmation.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:19
Finding
Command Injection Through Unquoted Inbound Audio File Paths## Vulnerability Details **File Location**: `SKILL.md`, lines 19–24 **Vulnerability Type**: OS command injection through unsafe path interpolation **Risk Level**: High ```text /usr/bin/ffmpeg -i {input_file} -ar 16000 -ac 1 -c:a pcm_s16le {input_file}.wav Hinweis: Die Zieldatei heißt input_file.wav (Beispiel: /.../aufnahme.ogg → /.../aufnahme.wav) 2) Transkription - Transkribiere die WAV-Datei: /home/sirko/.openclaw/workspace/whisper.cpp/build/bin/whisper-cli -l DE -np -m /home/sirko/.openclaw/workspace/whisper.cpp/models/ggml-small.bin -f {input_wav_file} ``` ### Technical Analysis The skill instructs the agent to insert an inbound, potentially attacker-influenced file path directly into command lines. Neither `{input_file}` nor `{input_wav_file}` is quoted, validated, or passed through an argument-safe execution mechanism. If these command templates are executed through a shell, shell metacharacters in a crafted filename—such as command separators, substitutions, redirections, or whitespace—can alter the intended command structure. Merely quoting a path would reduce some risks but would not be as robust as invoking the executables without a shell and supplying each argument separately. The vulnerability affects both the FFmpeg conversion command and the Whisper transcription command. ### Attack Path 1. An attacker causes an audio file with a shell-significant filename to be placed in the monitored inbound media directory. 2. The skill receives that attacker-controlled path as `{input_file}`. 3. The agent substitutes the path into the documented FFmpeg command without validation or argument-safe handling. 4. If the command is passed to a shell, the shell interprets metacharacters in the filename as command syntax rather than as literal filename characters. 5. The injected command executes under the identity and privileges of the agent process. 6. The same injection condition can occur when the generated WAV pa ...[truncated 668 chars]
Remediation
## Remediation Suggestions 1. Do not construct shell command strings from inbound file paths. Invoke FFmpeg and Whisper using an API that accepts an argument array and disables shell interpretation. 2. Canonicalize the input path and verify that it remains inside the approved inbound media directory. 3. Require the input to be a regular file and reject symbolic links or other special file types where appropriate. 4. Apply an explicit filename and extension policy. Reject control characters, shell metacharacters, unexpected whitespace, and unsupported media extensions. 5. Generate the output WAV path independently using a trusted temporary directory and a random filename rather than deriving a shell command argument directly from the untrusted input name. 6. Prevent option injection by using argument arrays and an end-of-options marker where supported. 7. Run media processing under a dedicated, least-privileged account with restricted filesystem and network access. 8. Add tests covering filenames containing spaces, quotes, semicolons, command substitutions, leading hyphens, newlines, and path traversal sequences.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (5)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
There is a clear mismatch between the declared purpose and the actual code. The description claims audio ingestion, format conversion, transcription, and response generation. However, the code only packages a skill directory into a ZIP-based .skill file, performing basic filesystem validation and archive creation. It contains no audio handling, no transcription logic, and no text-answering behavior. The primary purpose is materially different from the declared description.

Lp3

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding
Without declared permissions the skill's intent is opaque and cannot be validated.

Natural-Language Policy Violations

Medium
Confidence
97% confidence
Finding
The instruction says to answer transcribed questions or instructions 'einfach so in deutsch', and the notes reinforce 'immer auf deutsch antworten'. This imposes a fixed language behavior without offering user opt-in or documenting a justified locale restriction, which violates the language/locale policy criteria.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The note 'immer auf deutsch antworten' is a natural-language instruction that forces a single output language. Because no language choice or opt-in mechanism is provided, this is a policy violation under the locale/language rule.

Missing User Warnings

Low
Confidence
85% confidence
Finding
The skill description states that non-WAV inputs are converted to WAV, which creates an additional output file on disk. The markdown explains the workflow but does not clearly warn users that processing may write new files or where those files will be stored, which is relevant to user data and system state.

Static analysis

No suspicious patterns detected.