T09 · Insecure Skill Coding Practices
- Location
scripts/voice_journal_ctl.js:66- Finding
Unverified Stale PID Can Terminate an Unrelated Process
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a disclosed voice-journaling skill that records microphone audio, sends it to Soniox for transcription, and stores a rolling local transcript while running.
Install only if you are comfortable with a background process recording microphone audio, sending it to Soniox, and keeping a rolling local transcript for up to 60 minutes. Stop it when finished, avoid using it around people who have not consented, and consider pinning the Soniox dependency before sensitive use.
scripts/voice_journal_ctl.js:66Unverified Stale PID Can Terminate an Unrelated Process
This skill is explicitly designed to capture microphone audio continuously, convert it to text, and store conversation logs, which creates a real context-leakage path for sensitive spoken information. The risk is elevated because data is both transmitted to a cloud STT provider and retained locally, so confidential discussions, bystander speech, or unrelated secrets may be exposed.
metadata: {"openclaw":{"requires":{"bins":["node","arecord|rec|ffmpeg"],"env":{"SONIOX_API_KEY":"required - Soniox API key"},"note":"Captures microphone audio locally and streams audio to Soniox realtime STT only while journal is running."}}}
---
# Voice log
Conversation journal that uses Soniox realtime STT in a background daemon that:
- Captures microphone audio continuously.
Referenced artifact was not completely inspected
node scripts/voice_journal_ctl.js start
Referenced artifact was not completely inspected
node scripts/voice_journal_ctl.js start
Referenced artifact was not completely inspected
node scripts/voice_journal_ctl.js start
Referenced artifact was not completely inspected
node scripts/voice_journal_ctl.js start
Referenced artifact was not completely inspected
node scripts/voice_journal_ctl.js start
Referenced artifact was not completely inspected
node scripts/voice_journal_ctl.js start
Referenced artifact was not completely inspected
node scripts/voice_journal_ctl.js start
Referenced artifact was not completely inspected
node scripts/voice_journal_ctl.js start
Referenced artifact was not completely inspected
node scripts/voice_journal_ctl.js start
The skill declares environment requirements and operational behavior but does not define an explicit tool/permission scope. In an agent setting, missing scope boundaries can let the runtime or orchestrator invoke the skill without clear consent or least-privilege controls, especially for microphone capture and external network use.
The description enables passive microphone capture and cloud transcription without a prominent privacy warning. Users may trigger the skill without understanding that ambient speech will be captured and sent to a third-party service, creating consent and data exposure risks.
The manifest explicitly advertises background speech-to-text, rolling logs, and conversation recap, but it does not disclose that audio may be continuously captured and sent to a third-party provider using a required Soniox API key. In a voice journaling skill, this omission is security-relevant because users may trigger passive logging without understanding the privacy implications, leading to unintended collection, retention, or transmission of sensitive conversations.
The last() command prints raw journal transcript content directly to stdout, which can expose highly sensitive personal speech data to any caller, logs, terminal history, or upstream agent without an explicit warning, confirmation, or access-control check. In this skill’s context, the data is especially privacy-sensitive because it captures passive/background conversation, so accidental disclosure is a realistic risk even if the behavior is intentional.
This daemon captures microphone audio continuously and sends it to Soniox for transcription, but this file contains no user-facing notice, consent check, or runtime indicator before recording/transmission begins. In the context of a background voice journaling skill, silent capture and export of ambient speech can expose highly sensitive conversations and create significant privacy and compliance risk if started unexpectedly or without explicit informed consent.
The skill explicitly performs background speech-to-text logging and requires a third-party Soniox API key, yet the user-facing description does not clearly warn that live conversation audio may be captured and transmitted to an external service. This creates a meaningful privacy and consent risk because users may enable passive logging without understanding that sensitive speech could be recorded and shared off-device.
The skill states that it keeps a text-only log for the latest 60 minutes, but this retention is not surfaced as an explicit privacy warning in the user-facing description. Hidden or understated retention increases the chance that sensitive conversation content is stored locally without informed user awareness.
The dependency uses a caret range, which allows automatic adoption of future 1.x releases of @soniox/node without review. For a skill that captures and transmits live conversation data, an unexpected upstream change or compromised release could alter data handling or introduce malicious behavior into a highly sensitive execution path.
"last-journal": "node scripts/voice_journal_ctl.js last"
},
"dependencies": {
"@soniox/node": "^1.1.1"
}
}
The code writes transcribed speech into local journal files, but this file provides no disclosure to the user that conversation content will be retained on disk. Even with best-effort file permission hardening, local persistence of sensitive transcripts increases exposure to later unauthorized access, accidental sharing, or forensic recovery, especially on shared or lightly managed systems.
Detected: suspicious.dangerous_exec