Back to skill

Security audit

Text To Speech

Security checks for vulnerabilities and agentic risk

Overview

The skill’s text-to-speech purpose is coherent, but its setup path asks users to run mutable remote installer code and optional unpinned skill-install commands, so it should be reviewed before installation.

Install only if you are comfortable trusting inference.sh’s installer and CLI with local execution and with processing the text you submit. Prefer a manually downloaded, version-pinned, independently verified CLI binary, avoid running `curl | sh`, avoid unpinned `npx` install commands, and do not submit secrets, regulated data, or confidential scripts unless that remote transfer is approved.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:17
Finding
Unpinned Remote Installer Is Executed Directly by the Shell<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:17` **Vulnerability Type**: Remote mutable code retrieval and execution **Risk Level**: High ### Vulnerable Code ```bash curl -fsSL https://cli.inference.sh | sh && infsh login ``` ### Technical Analysis The installation command downloads content from `https://cli.inference.sh` and immediately pipes it into `sh`. The downloaded script is neither saved for inspection nor verified against a version-pinned digest or trusted cryptographic signature before execution. The documentation states that the installer verifies the SHA-256 checksum of the CLI binary. However, this does not establish trust in the installer itself: the remote script is already executing with the user's privileges when it performs that verification. Both the verification logic and expected checksum can therefore be changed together if the installer endpoint is compromised. This remote installation method is not necessary for the declared text-to-speech functionality. A versioned CLI binary can instead be downloaded and independently verified before execution. ### Attack Path 1. An attacker compromises the installer hosting account, the distribution infrastructure, DNS resolution, or another component capable of changing the response from `cli.inference.sh`. 2. The attacker replaces the expected installer with a malicious shell script. 3. A user or agent follows the documented Quick Start command. 4. `curl` retrieves the modified response and pipes it directly into `sh`. 5. The malicious script executes arbitrary commands with all privileges available to the invoking account. 6. The script can steal credentials, alter local files, install persistence, or replace the legitimate `infsh` binary before continuing with an apparently normal login flow. ### Impact Assessment Successful exploitation provides arbitrary command execution under the invoking user's account. This permits access to files, environment variables, SSH key ...[truncated 525 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the `curl | sh` installation flow. 2. Publish versioned CLI artifacts and require users to select an explicit version. 3. Download the artifact to a local file before executing or installing it. 4. Verify the artifact using a SHA-256 digest or cryptographic signature obtained through an independent, trusted, version-pinned channel. 5. Abort installation if verification fails; do not download the expected digest from the same mutable source as the artifact without signature validation. 6. Prefer installation through a reputable package manager with package signing and immutable version selection. 7. Run the CLI as an unprivileged user and document the minimum filesystem and network permissions it requires. 8. Provide manual inspection and verification commands as the primary installation method rather than as an optional alternative. A safer conceptual flow is: ```bash curl -fSLo infsh "<versioned-artifact-url>" printf '%s %s\n' "<trusted-pinned-sha256>" "infsh" | sha256sum -c - chmod 0755 infsh ./infsh login ``` The digest in this example must be supplied through a trusted, immutable release record rather than copied dynamically from the same mutable installer. ]]>

T08 · Insecure Dependencies

Warning
Location
SKILL.md:113
Finding
Unpinned npx Runner and Mutable Skill Sources Create Supply-Chain Risk<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:113-125` **Vulnerability Type**: Unpinned executable dependency and mutable third-party Skill installation **Risk Level**: Medium ### Vulnerable Code ```bash # Full platform skill (all 150+ apps) npx skills add inference-sh/skills@inference-sh # AI avatars (combine TTS with talking heads) npx skills add inference-sh/skills@ai-avatar-video # AI music generation npx skills add inference-sh/skills@ai-music-generation # Speech-to-text (transcription) npx skills add inference-sh/skills@speech-to-text # Video generation npx skills add inference-sh/skills@ai-video-generation ``` ### Technical Analysis The commands invoke `skills` through `npx` without specifying an immutable package version. Depending on the local environment and package availability, `npx` can retrieve and execute the currently published package associated with that command. The behavior executed in the future may therefore differ from the behavior reviewed at audit time. The referenced `inference-sh/skills` content is also selected by named Skill identifiers rather than an immutable commit, release, or verified content digest. A compromised package registry account, repository, maintainer account, or upstream release process could consequently distribute altered installer code or malicious Skill instructions. The presence of `npx` is not inherently malicious, but unpinned executable tooling and mutable Skill sources create a preventable supply-chain exposure. ### Attack Path 1. An attacker compromises the package, registry namespace, upstream repository, or maintainer credentials used by the `skills` runner or referenced Skill collection. 2. The attacker publishes a modified package version or changes the content associated with one of the named Skills. 3. A user executes one of the documented `npx skills add` commands. 4. `npx` resolves and executes the unpinned runner, or the runner downloads mutable Skill content. 5. Mal ...[truncated 953 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin the `skills` runner to a reviewed, explicit version, for example by using the package's exact version syntax supported by its registry. 2. Pin the `inference-sh/skills` source to an immutable commit, signed release, or content digest rather than a mutable branch or named selector alone. 3. Verify package integrity through lockfiles, registry integrity metadata, checksums, or cryptographic release signatures. 4. Review downloaded Skill files before enabling them in an agent environment. 5. Use a restricted installation environment without access to production credentials, sensitive home-directory files, or privileged sockets. 6. Disable unattended dependency updates and require security review when changing pinned versions. 7. Where supported, use package-manager options that prevent unexpected lifecycle scripts, and explicitly review any required installation scripts. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (8)

External Script Fetching

High
Category
Supply Chain
Content
```bash
# Install CLI
curl -fsSL https://cli.inference.sh | sh && infsh login

# Generate speech
infsh app run infsh/kokoro-tts --input '{"text": "Hello, welcome to our product demo."}'
Confidence
98% confidence
Finding
`curl -fsSL https://cli.inference.sh | sh` downloads and immediately executes remote code in the user's shell, which is a classic supply-chain and remote code execution risk. Even with claims about checksum verification in surrounding text, the bootstrap script itself is not independently verified before execution, so compromise of the host, CDN, DNS, TLS termination, or publishing pipeline could lead to arbitrary command execution.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The manifest description embeds a very large set of broad trigger phrases such as `text to speech`, `voice ai`, `generate speech`, and `natural voice`, increasing the chance the skill is invoked for generic user requests. Over-broad routing can cause unintended tool use and remote data disclosure when users did not clearly consent to sending their text to an external service.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill encourages users to submit arbitrary text to `infsh app run` but does not clearly warn that the input is sent to a remote inference service for processing. This can lead users to provide sensitive, proprietary, or regulated content under the mistaken assumption that processing is local, creating confidentiality and compliance risk.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Static analysis

No suspicious patterns detected.