Back to skill

Security audit

Voicenotes Official 1.0.3

Security checks for vulnerabilities and agentic risk

Overview

This skill connects OpenClaw to the user's Voicenotes account to search, retrieve, and create notes, with no evidence of hidden persistence or unrelated data access.

Install only if you trust Voicenotes with the notes and queries you ask OpenClaw to handle. Treat the API key like a password, prefer the documented URL-encoding and UUID-validation guidance when making requests, and avoid sending sensitive note text unless you intend it to be stored in Voicenotes.

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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:61
Finding

Command Injection Through Unsafe Search Query Interpolation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 61–62
Vulnerability Type: Shell command injection through user-controlled input
Risk Level: Medium

bash
curl -X GET "https://api.voicenotes.com/api/integrations/open-claw/search/semantic?query={search_query}" \
  -H "Authorization: $VOICENOTES_API_KEY"

Technical Analysis

The primary semantic-search example instructs the agent to insert a user-supplied search query directly into a quoted shell command. If implemented through textual substitution, a query containing a double quote followed by shell syntax can terminate the URL argument and introduce an additional command.

The query is also not URL-encoded, so reserved characters may alter the request or produce malformed URLs. Although lines 247–255 later require --data-urlencode and provide a safer example, the earlier executable example conflicts with that requirement and may be followed independently.

Attack Path

  1. An attacker supplies a search query containing a closing quote and shell metacharacters.
  2. The agent replaces {search_query} in the documented command without applying the later encoding requirement.
  3. The injected quote terminates the URL argument.
  4. The shell interprets the remaining attacker-controlled text as command syntax.
  5. The injected command executes with the same operating-system privileges and environment access as the agent process.

Impact Assessment

Successful exploitation could allow arbitrary local command execution under the agent's account. This may permit access to files and environment variables available to that account, including VOICENOTES_API_KEY, and could cause unintended network requests or data disclosure. The issue does not independently provide elevated system privileges beyond those already held by the agent.

Remediation
View remediation

Remediation Suggestions

Replace the unsafe example with the safe parameter-encoding form and remove all conflicting examples:

bash
curl -G "https://api.voicenotes.com/api/integrations/open-claw/search/semantic" \
  --data-urlencode "query=$SEARCH_QUERY" \
  -H "Authorization: $VOICENOTES_API_KEY"

Treat user input as data rather than shell source. Pass arguments directly to a process-execution API without invoking a shell where possible. If a shell is unavoidable, keep the value in a quoted variable and use --data-urlencode; do not construct the complete command through textual interpolation. Add tests covering quotes, command separators, substitutions, newlines, and URL-reserved characters.

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:84
Finding

Command Injection Through Unvalidated Recording Identifier Interpolation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 84–85
Vulnerability Type: Shell command injection through an unvalidated path parameter
Risk Level: Medium

bash
curl "https://api.voicenotes.com/api/integrations/open-claw/recordings/{recording_uuid}" \
  -H "Authorization: $VOICENOTES_API_KEY" \

Technical Analysis

The recording retrieval example places a user-controlled recording identifier directly inside a shell command. If an agent performs literal placeholder replacement, an identifier containing a double quote and shell metacharacters can escape the URL argument and inject a command.

Lines 248 and 258 later require identifiers to match ^[a-zA-Z0-9]{8}$ and reject shell metacharacters. Those controls would prevent the vulnerability if consistently enforced, but they are absent from the primary executable example. The conflicting guidance creates a realistic risk that an agent will use the command before applying validation.

Attack Path

  1. An attacker asks the agent to retrieve a note using a crafted recording identifier containing a quote and shell syntax.
  2. The agent substitutes the identifier into {recording_uuid} without first enforcing the documented allowlist.
  3. The crafted value escapes the quoted URL.
  4. The shell parses the remaining input as an additional command.
  5. The command executes with the privileges and environment access of the agent process.

Impact Assessment

Exploitation could result in arbitrary command execution under the agent's local account, unauthorized access to files readable by that account, and exposure of environment-based credentials such as VOICENOTES_API_KEY. It could also cause unintended API operations or outbound network traffic. No evidence indicates privilege escalation beyond the agent's existing permissions.

Remediation
View remediation

Remediation Suggestions

Validate the identifier before constructing any request and reject every value that does not exactly match the allowlist:

text
^[A-Za-z0-9]{8}$

Perform validation in code rather than relying only on natural-language instructions. Pass the validated identifier as a discrete argument through a process-execution API that does not invoke a shell. Remove or revise the unsafe example so validation appears immediately before the request. Add negative tests for quotes, semicolons, pipes, ampersands, dollar signs, backticks, backslashes, whitespace, newlines, path separators, and identifiers of invalid length.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (11)

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

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

md
---
name: voicenotes
description: This official skill from the Voicenotes team gives OpenClaw access to new APIs and the ability to search semantically, retrieve full transcripts, filter by tags or date range and create text notes — all through natural conversation.

homepage: https://voicenotes.com
metadata:

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

md
env:
        - VOICENOTES_API_KEY
      bins:
        - curl
    primaryEnv: VOICENOTES_API_KEY
---

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill clearly sends user search queries and note/transcript content to a third-party API, but the user-facing description does not prominently warn about that data transfer at the point of use. This creates a privacy/transparency issue because users may provide sensitive content without realizing it will be transmitted off-platform.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

All requests need the Authorization header:

bash
curl -X GET "https://api.voicenotes.com/api/integrations/open-claw/..." \
  -H "Authorization: $VOICENOTES_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

All requests need the Authorization header:

bash
curl -X GET "https://api.voicenotes.com/api/integrations/open-claw/..." \
  -H "Authorization: $VOICENOTES_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

All requests need the Authorization header:

bash
curl -X GET "https://api.voicenotes.com/api/integrations/open-claw/..." \
  -H "Authorization: $VOICENOTES_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

All requests need the Authorization header:

bash
curl -X GET "https://api.voicenotes.com/api/integrations/open-claw/..." \
  -H "Authorization: $VOICENOTES_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

All requests need the Authorization header:

bash
curl -X GET "https://api.voicenotes.com/api/integrations/open-claw/..." \
  -H "Authorization: $VOICENOTES_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

All requests need the Authorization header:

bash
curl -X GET "https://api.voicenotes.com/api/integrations/open-claw/..." \
  -H "Authorization: $VOICENOTES_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
84% confidence
Finding

The example interpolates a raw search query directly into the URL, which can lead to malformed requests and unsafe command construction if reused by an agent without proper encoding. In an agent skill context, this increases the chance of command injection or unintended parameter manipulation when user input is passed to shell commands.

Content

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

  • query (required): The search query string
bash
curl -X GET "https://api.voicenotes.com/api/integrations/open-claw/search/semantic?query={search_query}" \
  -H "Authorization: $VOICENOTES_API_KEY"

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

The recording UUID is inserted directly into the request path in a shell command example, and if an agent copies this pattern without strict validation it can enable shell metacharacter abuse or path manipulation. Although the file later mentions validation, the unsafe example appears earlier and may still be adopted incorrectly.

Content

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

If you want more context get the whole transcript:

bash
curl "https://api.voicenotes.com/api/integrations/open-claw/recordings/{recording_uuid}" \
  -H "Authorization: $VOICENOTES_API_KEY" \

Static analysis

No suspicious patterns detected.