Back to skill

Security audit

Willow Inference Server

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent for local speech transcription and text-to-speech, but its setup tells users to run unpinned code from an external GitHub repository.

Review before installing. Only run the setup from a pinned and trusted Willow server revision, inspect utils.sh before execution, and avoid using elevated privileges unless the upstream installer clearly requires them. Send audio recordings or text only to a Willow server you trust and control, especially for meetings, personal speech, confidential prompts, or regulated data.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:15
Finding
Unpinned Remote Repository Is Downloaded and Executed<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 15–18 **Vulnerability Type**: Mutable remote payload retrieval and execution **Risk Level**: High ### Vulnerable Code ```bash git clone https://github.com/toverainc/willow-inference-server.git cd willow-inference-server ./utils.sh install ./utils.sh gen-cert your-hostname ./utils.sh run ``` ### Technical Analysis The documented setup clones the mutable default branch of an external GitHub repository and immediately executes scripts obtained from it. No reviewed release tag or immutable commit is pinned, and no checksum, signature, or other integrity verification is required before execution. Consequently, the code executed by users can differ from the code present when this skill was audited. An attacker who compromises the upstream repository, a maintainer account, or the relevant branch could modify `utils.sh` or files invoked by it. Users following the instructions would then execute the modified payload locally. This is best classified as remote payload retrieval and execution because the effective executable payload is hosted outside the reviewed skill package and can change after review. ### Attack Path 1. An attacker compromises the upstream repository, a maintainer account, or another mechanism capable of modifying its default branch. 2. The attacker inserts malicious commands into `utils.sh` or a component executed by that script. 3. A user follows the setup instructions and clones the current default branch without pinning a reviewed revision. 4. The user runs `./utils.sh install`, `./utils.sh gen-cert your-hostname`, or `./utils.sh run`. 5. The attacker-controlled commands execute with the privileges and environment of that user. ### Impact Assessment Successful exploitation could provide arbitrary command execution under the account running the setup commands. Depending on that account's permissions and whether the upstream installer requests or invokes elevated privile ...[truncated 474 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin the repository to a reviewed release and immutable commit hash rather than relying on the mutable default branch. 2. Publish the expected commit hash and cryptographic checksum in the skill documentation. 3. Prefer signed release artifacts and require verification of the maintainer signature before execution. 4. Instruct users to inspect downloaded scripts before running them. 5. Avoid executing remote installation scripts with administrative privileges unless strictly required. 6. Document the minimum permissions needed by each setup operation. 7. Where feasible, vendor a reviewed installer in the skill package or use a reproducible, integrity-locked package mechanism. 8. Periodically review the pinned revision and update it through an explicit security review process. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (4)

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill repeatedly instructs users to send potentially sensitive audio recordings and text content to a server endpoint, but it does not include a clear privacy, retention, logging, or data-handling warning. Even though the server is described as local, the examples use a configurable hostname and could point to a remote system, creating a real risk of unintended disclosure of conversations, PII, or confidential text.

External Transmission

Medium
Category
Data Exfiltration
Content
### Supported Formats
- MP3, WAV, M4A, OGG, FLAC, WebM

### Example: Transcribe with curl
```bash
# Basic transcription
curl -X POST "${WILLOW_BASE_URL}/asr" \
Confidence
87% confidence
Finding
This example transmits user audio files to `${WILLOW_BASE_URL}/asr`, which is an external network operation from the client perspective and may expose sensitive speech content if the server is remote, compromised, or misconfigured. The danger is increased because the documentation normalizes direct upload of recordings without warning users about trust boundaries or data sensitivity.

External Transmission

Medium
Category
Data Exfiltration
Content
Check server docs for full list: `${WILLOW_BASE_URL}/api/docs`

### Example: TTS with curl
```bash
# Basic TTS
curl -X POST "${WILLOW_BASE_URL}/tts" \
Confidence
86% confidence
Finding
This TTS example sends arbitrary user text to the server, which can leak confidential prompts, personal information, or proprietary content if the endpoint is not fully trusted. Although TTS requires server-side processing by design, the skill omits a warning that submitted text leaves the client and may be logged or retained by the server.

External Transmission

Medium
Category
Data Exfiltration
Content
rec test.wav

# Transcribe
curl -X POST "${WILLOW_BASE_URL}/asr" \
  -F "audio_file=@test.wav" \
  -F "language=auto"
```
Confidence
85% confidence
Finding
The workflow examples encourage recording and immediately uploading audio for transcription, which increases the chance that users send sensitive spoken content without considering where it is processed. In the context of an ASR/TTS skill, this behavior is expected, but the absence of explicit privacy and trust-boundary guidance makes the transmission risky rather than merely informational.

Static analysis

No suspicious patterns detected.