T08 · Insecure Dependencies
Warning
- Location
- SKILL.md:14
- Finding
- Unpinned Third-Party Repository Is Installed and Executed## Vulnerability Details **File Location**: `SKILL.md:14-18` and `SKILL.md:43-47`; execution path in `bin/valtec-tts.js:77-99` **Vulnerability Type**: Unpinned executable dependency and mutable supply-chain source **Risk Level**: Medium ### Vulnerable Code ```json5 "install": [ { "id": "clone-repo", "kind": "shell", "cmd": "git clone https://github.com/tronghieuit/valtec-tts.git ~/.openclaw/tools/valtec-tts && cd ~/.openclaw/tools/valtec-tts && pip install -e .", "label": "Clone repo and install dependencies", }, ], ``` The same installation procedure is documented for users: ```bash git clone https://github.com/tronghieuit/valtec-tts.git ~/.openclaw/tools/valtec-tts cd ~/.openclaw/tools/valtec-tts pip install -e . ``` The wrapper later executes Python scripts from that checkout: ```javascript if (zeroshot) { if (!reference) usage("--reference is required for --zeroshot mode."); script = path.join(ttsDir, "infer_zeroshot.py"); if (!fs.existsSync(script)) usage(`Script not found: ${script}`); scriptArgs = [ script, "-t", text, "-r", reference, "-o", outputPath, "--speed", speed, ]; } else { script = path.join(ttsDir, "infer.py"); if (!fs.existsSync(script)) usage(`Script not found: ${script}`); scriptArgs = [ script, "-t", text, "-o", outputPath, "-s", speaker, "--length_scale", speed, ]; } ``` ### Technical Analysis The installation command clones the current default branch of an external GitHub repository without pinning a reviewed commit or immutable release. It performs no checksum, signature, or provenance verification before running `pip install -e .`. Python package installation can execute repository-controlled build or installation logic. In addition, the local wrapper explicitly invokes `infer.py` or `infer_zeroshot.py` from the mutable checkout. Consequ ...[truncated 1641 chars]
- Remediation
- ## Remediation Suggestions 1. Pin the repository to a specific, reviewed commit hash or immutable signed release rather than cloning the moving default branch. 2. Download a versioned release artifact and verify a maintainer-published cryptographic checksum or signature before installation. 3. Use a Python lock file with exact versions and hashes, and install dependencies with hash verification where supported. 4. Avoid editable installation (`pip install -e .`) for production deployment; build and install a reviewed, immutable package artifact instead. 5. Validate the provenance and integrity of model files downloaded at first run. 6. Execute inference in a least-privilege environment with restricted filesystem and network access. 7. Review and pin the upstream inference scripts together with the Skill release so the code executed at runtime matches the audited version.
