T08 · Insecure Dependencies
- Location
scripts/speak.sh:42- Finding
Unpinned Third-Party Dependency Downloaded and Executed at Runtime
- Content
View full analysis
Vulnerability Details
File Location:
scripts/speak.sh, lines 42–49
Vulnerability Type:T08: Insecure Dependencies
Risk Level: Mediumbash run_edge_tts() { if [[ -n "$UV" ]]; then "$UV" run --with edge-tts -- edge-tts "$@" elif command -v edge-tts &>/dev/null; then edge-tts "$@" elif command -v pip3 &>/dev/null; then pip3 install -q edge-tts &>/dev/null edge-tts "$@" elseTechnical Analysis
The script obtains and executes
edge-ttsusing only an unversioned package name. Neither installation path specifies an exact reviewed version, verifies package hashes, uses a lockfile, or configures an explicit trusted package source. The effective code executed by the skill can therefore change after the skill itself has been audited.The
uvpath dynamically resolves the package throughuv run --with edge-tts. Thepip3fallback silently installs the package into the active Python environment and then executes its command. This fallback does not create a dedicated virtual environment, potentially modifying shared or user-level dependencies.The issue does not prove that the current
edge-ttspackage is malicious. The vulnerability is the unsafe runtime trust model: compromise of the package, one of its transitive dependencies, or the configured package index could turn an ordinary TTS invocation into arbitrary code execution.Attack Path
- An attacker compromises an applicable package release, transitive dependency, or configured Python package source.
- A user invokes
scripts/speak.shon a system whereedge-ttsis not already installed as an executable. - The script resolves the latest available dependency through
uv, or silently installs it throughpip3. - Package-controlled installation or runtime code executes with the privileges of the user running the skill.
- The malicious dependency accesses or modifies resources available to that user ...[truncated 658 chars]
- Remediation
View remediation
Remediation Suggestions
- Pin
edge-ttsto an exact, reviewed version rather than resolving the latest release at runtime. - Lock the complete transitive dependency graph and require cryptographic package hashes.
- Install dependencies during an explicit setup or build phase instead of silently downloading them during normal skill execution.
- Use a dedicated virtual environment or another isolated runtime rather than installing into the active Python environment.
- Configure an explicit trusted package index and prevent fallback to unapproved sources.
- Fail with clear setup instructions when the verified dependency is unavailable, rather than automatically installing mutable remote code.
- Periodically review pinned dependencies and update them through a controlled testing and approval process.
- Pin
