T08 · Insecure Dependencies
- Location
main.sh:9- Finding
Unpinned Runtime Installation of Third-Party Dependencies
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This text-to-speech skill is understandable in purpose, but a normal run can make privileged system changes and write to arbitrary caller-supplied paths.
Review before installing. This skill should only be used on a machine where you are comfortable with it running sudo package-manager commands, installing unpinned Python tooling, and modifying the user's shell PATH. Prefer installing dependencies manually in a controlled environment and restricting output paths to a dedicated audio directory.
main.sh:9Unpinned Runtime Installation of Third-Party Dependencies
main.sh:8Privileged System Modification During Skill Invocation
main.sh:18Unrestricted Caller-Controlled Output File Path
main.sh:27Unsafe Construction of JSON Response Using Caller-Controlled Data
The script automatically performs system package installation and modifies the user's shell environment on first run, even though its primary purpose is text-to-speech. This creates unnecessary privileged side effects, expands the trust boundary, and can be abused or cause damage on hosts where skills are expected to be non-invasive.
The explicit use of sudo to run apt update elevates the script's required privileges and can trigger privileged operations as part of routine execution. In a skill with an unstated need for host administration, this is an unjustified privilege escalation risk and increases blast radius if the script or its supply chain is compromised.
# ==========================
if ! command -v edge-tts &> /dev/null; then
echo "正在自动安装 edge-tts..."
sudo apt update
sudo apt install -y pipx jq
pipx ensurepath
source ~/.bashrc
The script invokes sudo apt operations and shell environment changes without any user confirmation, warning, or dry-run behavior. In an agent skill context, this is dangerous because executing the skill can unexpectedly trigger privileged system changes, potentially altering the host or failing in unsafe ways.
Using sudo apt install causes the skill to install packages with root privileges during normal execution. This is risky because it changes the system state, depends on external repositories, and grants unnecessary administrative power to a task that should only convert text to speech.
if ! command -v edge-tts &> /dev/null; then
echo "正在自动安装 edge-tts..."
sudo apt update
sudo apt install -y pipx jq
pipx ensurepath
source ~/.bashrc
pipx install edge-tts
The selected voice zh-CN-XiaoxiaoNeural forces Chinese-language locale behavior, and the surrounding user-facing messages are also Chinese-only. The file does not offer a language/locale choice or document why this locale restriction is required, which creates a natural-language policy concern.
The documentation states that the first run will update package lists and install system and Python dependencies, but it does not present this as a prominent warning before use. This can lead users to run the skill without informed consent, causing unexpected system modification, package installation, and potential supply-chain exposure from network-fetched components.
The output file path is taken directly from user input and passed to the TTS tool without validation or restriction. While this is not shell injection because arguments are quoted, it still allows arbitrary file overwrite or writing to sensitive locations accessible to the current user, which can damage files or be chained with other attacks.
The manifest uses Chinese-only natural-language descriptions for the skill and tool, with no indication that language is configurable or intentionally limited to a Chinese-speaking context. This can violate a language/locale policy when skills are expected to be language-neutral or to offer user opt-in for a specific language.
The document specifically advertises support for the Chinese female voice zh-CN-XiaoxiaoNeural and all invocation examples are in Chinese, without stating that users may choose another language or voice. This can be read as a locale constraint that is not documented as optional or justified as region-specific.
No suspicious patterns detected.