Back to skill

Security audit

GPT-Live Speak

Security checks for vulnerabilities and agentic risk

Overview

Review before installing: this is a coherent speech skill, but it silently downloads Python dependencies into a persistent cache and sends requested speech text to OpenAI for live audio generation.

Install only if you are comfortable with this skill running a bundled Python command, creating a persistent cached virtualenv, downloading OpenAI Python dependencies from PyPI, sending requested speech text to OpenAI with your OPENAI_API_KEY, and playing generated audio through ALSA. Do not use it for secrets, and consider preinstalling or reviewing dependencies and running it in an isolated account if dependency supply-chain risk matters to you.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
Findings (10)

os.system() or os exec-family call

High
Category
Dangerous Code Execution
Confidence
85% confidence
Finding

os.system() and os exec-family calls run shell commands with the process's full privileges, enabling arbitrary command execution.

Content

Scanner excerpt · scripts/run.py (reported line 82)May include surrounding context.

python
def main():
    ensure_runtime()

    os.execv(
        str(PYTHON),
        [
            str(PYTHON),

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill instructs the agent to invoke a Python script via an exec/shell pathway and relies on environment variables, but it does not declare any explicit tool scope such as allowed-tools or permissions. This increases the chance that the runtime may grant broader-than-necessary capabilities, making misuse or unintended command execution harder to constrain or audit.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script silently writes to the user's cache and installs packages on first run or dependency change, which is risky behavior for a skill wrapper. Even absent overt exploitation, this violates least surprise and expands the attack surface by executing package installation logic automatically, making supply-chain abuse and local environment tampering more consequential.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/run.py (reported line 41)May include surrounding context.

python
)

    if not PYTHON.exists():
        subprocess.run(
            [
                sys.executable,
                "-m",

Tainted flow: 'VENV_DIR' from os.environ.get (line 21, credential/environment) → subprocess.run (code execution)

Medium
Category
Data Flow
Confidence
65% confidence
Finding

Data from a source is assigned to a variable that is later passed to a sink, creating a variable-mediated taint flow.

Content

Scanner excerpt · scripts/run.py (reported line 41)May include surrounding context.

python
)

    if not PYTHON.exists():
        subprocess.run(
            [
                sys.executable,
                "-m",

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
93% confidence
Finding

This code automatically installs dependencies at runtime with pip into a user-writable cache-based virtual environment, without verification, pin enforcement, or user confirmation. In the skill context, that creates a meaningful supply-chain and local tampering risk: a modified requirements file, compromised package source, or preexisting malicious interpreter/environment under the cache path could lead to arbitrary code execution during installation or later use.

Content

Scanner excerpt · scripts/run.py (reported line 60)May include surrounding context.

python
)

    if installed != wanted:
        subprocess.run(
            [
                str(PYTHON),
                "-m",

Tainted flow: 'PYTHON' from os.environ.get (line 24, credential/environment) → subprocess.run (code execution)

Medium
Category
Data Flow
Confidence
90% confidence
Finding

Here the interpreter path used for pip execution is derived from a virtualenv under a cache directory influenced by XDG_CACHE_HOME. If that cache path points to attacker-controlled content, the code may execute a malicious preexisting 'python' binary or operate inside a tampered virtualenv, leading to arbitrary code execution; the auto-install behavior makes the impact worse in this embodied-agent/audio-device context because the skill may run unattended.

Content

Scanner excerpt · scripts/run.py (reported line 60)May include surrounding context.

python
)

    if installed != wanted:
        subprocess.run(
            [
                str(PYTHON),
                "-m",

Unbounded Resource Access

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill allows unbounded resource consumption (API calls, storage, compute). Without rate limits or quotas, a compromised or misbehaving agent can cause denial-of-service or cost overruns.

Content

Scanner excerpt · scripts/speak.py (reported line 193)May include surrounding context.

python
try:
                event = await asyncio.wait_for(
                    connection.recv(),
                    timeout=0.1,
                )

            except asyncio.TimeoutError:

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The session instructions explicitly require the model to 'Speak Italian naturally' and the file contains no user opt-in or configurable language selection in the CLI. This is a natural-language locale constraint that may violate organizational language-choice policy when applied universally.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script sends the user-provided text to a remote network service via connection.session.commentary.append, but there is no confirmation prompt, print/log disclosure, or inline user-facing warning near this operation. Users invoking a local 'speak' script may not realize their text is being transmitted off-device for processing.

Content

No source excerpt is available for this finding.