Back to skill

Security audit

purevocals-uvr-automator

Security checks across malware telemetry and agentic risk

Overview

This vocal-extraction skill appears legitimate, but it automatically installs and changes software on the machine more broadly than its metadata discloses.

Install only if you are comfortable with the skill downloading large third-party ML/audio packages, modifying Python packaging tools, creating persistent local environments and caches, and auto-installing ffmpeg. Prefer running it in an isolated OpenClaw environment, container, or disposable account, and review dependency sources before processing sensitive folders.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (21)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
"""专门为老项目(使用 pkg_resources 的 setup.py)修复 setuptools 版本"""
    logger.info("🔧 正在修复 setuptools 版本(兼容旧 GitHub 包构建)...")
    try:
        subprocess.check_call([
            sys.executable, "-m", "pip", "install",
            "--quiet", "--force-reinstall", "setuptools<=81.2.0", "wheel"
        ])
Confidence
92% confidence
Finding
subprocess.check_call([ sys.executable, "-m", "pip", "install", "--quiet", "--force-reinstall", "setuptools<=81.2.0", "wheel" ])

Dynamic import via __import__()

Medium
Category
Dangerous Code Execution
Content
# 第一步:尝试 import 检查(最快)
    try:
        parts = import_name.split('.')
        mod = __import__(parts[0])
        for part in parts[1:]:
            mod = getattr(mod, part)
        if sub_import:
Confidence
86% confidence
Finding
mod = __import__(parts[0])

subprocess module call

Medium
Category
Dangerous Code Execution
Content
cmd.extend(["-i", "https://pypi.tuna.tsinghua.edu.cn/simple"])

    try:
        subprocess.check_call(cmd)
        logger.info(f"✅ {spec} 安装/升级完成!")
        
    except subprocess.CalledProcessError as e:
Confidence
97% confidence
Finding
subprocess.check_call(cmd)

Dynamic import via __import__()

Medium
Category
Dangerous Code Execution
Content
# ==================== 1. 检查是否已安装 + 版本是否满足 ====================
    try:
        __import__(import_name)
        
        # 尝试获取当前版本
        try:
Confidence
83% confidence
Finding
__import__(import_name)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
logger.warning(f"🔧 正在安装 {install_str} ...")

    try:
        subprocess.check_call([
            sys.executable, "-m", "pip", "install",
            install_str,
            "-i", "https://pypi.tuna.tsinghua.edu.cn/simple",
Confidence
95% confidence
Finding
subprocess.check_call([ sys.executable, "-m", "pip", "install", install_str, "-i", "https://pypi.tuna.tsinghua.edu.cn/simple", "--quiet"

subprocess module call

Medium
Category
Dangerous Code Execution
Content
sys.executable, "-m", "pip", "install",
                        "--upgrade", fallback_zip, "--quiet"
                    ]
                    subprocess.check_call(cmd_fallback)
                    logger.info(f"✅ 使用本地包 {fallback_zip} 安装成功!")
                    return
                except subprocess.CalledProcessError as e2:
Confidence
96% confidence
Finding
subprocess.check_call(cmd_fallback)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
# 安装 PyTorch
        logger.info("正在安装 PyTorch(~2-3GB,请耐心等待)...")
        subprocess.check_call([
            str(venv_python), "-m", "pip", "install", "torch", "torchvision", "torchaudio",
            "--index-url", index_url
        ])
Confidence
79% confidence
Finding
subprocess.check_call([ str(venv_python), "-m", "pip", "install", "torch", "torchvision", "torchaudio", "--index-url", index_url ])

subprocess module call

Medium
Category
Dangerous Code Execution
Content
logger.info("安装 audio-separator CPU 版 + librosa...")
            subprocess.check_call([str(venv_python), "-m", "pip", "install", "audio-separator[cpu]", "librosa"])

        subprocess.check_call([str(venv_python), "-m", "pip", "install", "pydub"])
        subprocess.check_call([str(venv_python), "-m", "pip", "install", "huggingface-hub[tqdm]"])
        
        logger.info("✅ 虚拟环境及所有依赖安装完成!")
Confidence
76% confidence
Finding
subprocess.check_call([str(venv_python), "-m", "pip", "install", "pydub"])

subprocess module call

Medium
Category
Dangerous Code Execution
Content
subprocess.check_call([str(venv_python), "-m", "pip", "install", "audio-separator[cpu]", "librosa"])

        subprocess.check_call([str(venv_python), "-m", "pip", "install", "pydub"])
        subprocess.check_call([str(venv_python), "-m", "pip", "install", "huggingface-hub[tqdm]"])
        
        logger.info("✅ 虚拟环境及所有依赖安装完成!")
Confidence
76% confidence
Finding
subprocess.check_call([str(venv_python), "-m", "pip", "install", "huggingface-hub[tqdm]"])

subprocess module call

Medium
Category
Dangerous Code Execution
Content
# 安装 audio-separator + librosa(你提到的)
        if use_gpu:
            logger.info("安装 audio-separator GPU 版 + librosa...")
            subprocess.check_call([str(venv_python), "-m", "pip", "install", "audio-separator[gpu]", "librosa"])
        else:
            logger.info("安装 audio-separator CPU 版 + librosa...")
            subprocess.check_call([str(venv_python), "-m", "pip", "install", "audio-separator[cpu]", "librosa"])
Confidence
80% confidence
Finding
subprocess.check_call([str(venv_python), "-m", "pip", "install", "audio-separator[gpu]", "librosa"])

subprocess module call

Medium
Category
Dangerous Code Execution
Content
subprocess.check_call([str(venv_python), "-m", "pip", "install", "audio-separator[gpu]", "librosa"])
        else:
            logger.info("安装 audio-separator CPU 版 + librosa...")
            subprocess.check_call([str(venv_python), "-m", "pip", "install", "audio-separator[cpu]", "librosa"])

        subprocess.check_call([str(venv_python), "-m", "pip", "install", "pydub"])
        subprocess.check_call([str(venv_python), "-m", "pip", "install", "huggingface-hub[tqdm]"])
Confidence
80% confidence
Finding
subprocess.check_call([str(venv_python), "-m", "pip", "install", "audio-separator[cpu]", "librosa"])

subprocess module call

Medium
Category
Dangerous Code Execution
Content
# 🔥 关键:自动输入 Y(默认 yes),彻底无交互
        logger.info("   自动确认下载中...")
        subprocess.run(["ffdl", "install"], input="Y\n", text=True, check=True)
        
        # 下载完后刷新模块
        importlib.reload(ffdl)
Confidence
93% confidence
Finding
subprocess.run(["ffdl", "install"], input="Y\n", text=True, check=True)

Description-Behavior Mismatch

Medium
Confidence
94% confidence
Finding
The file performs package-management and network/package-source activity that is not justified by the skill's declared purpose of vocal separation. This mismatch increases risk because users invoking an audio skill would not reasonably expect environment mutation and dependency fetching, and hidden installer behavior is a common precursor to supply-chain abuse.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
Supporting arbitrary installs from git URLs and local archives gives the skill a general software-installation capability far beyond audio processing. In context this is especially dangerous because VCS and archive installs are high-risk supply-chain paths, and the function can be repurposed to fetch and execute code unrelated to the user-requested task.

Intent-Code Divergence

Medium
Confidence
90% confidence
Finding
The module advertises itself as a generic intelligent package installer, which contradicts the stated skill purpose and indicates hidden, broader capability. That mismatch is a security concern because it suggests the skill contains infrastructure for arbitrary environment modification not obviously necessary for audio processing, making abuse or accidental overreach more likely.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
The bootstrapper performs broad, network-based dependency installation during normal execution, including torch, audio-separator, librosa, pydub, and huggingface-hub. For a user-facing vocal extraction skill, this is excessive hidden behavior that materially increases supply-chain risk and makes execution less predictable and more difficult to audit.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The skill presents itself as a local audio-processing tool, but at import/runtime it installs Python packages automatically (`pydub`, `ffmpeg-downloader`, `audio-separator`). This hidden expansion from local processing into package installation introduces network access, arbitrary third-party code execution, and persistent environment changes that users would not reasonably expect from the declared functionality.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
Invoking package management and installer behavior is broader than necessary for a vocal-extraction skill and materially increases attack surface. Any runtime installation path creates exposure to dependency confusion, malicious package updates, compromised indexes, or execution of arbitrary install hooks under the user's privileges.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
Automatically downloading and installing ffmpeg from external sources during execution introduces supply-chain and integrity risks, especially because the operation is performed non-interactively and modifies the host environment. In an agent-skill context, this is more dangerous because users may expect passive media processing, not binary acquisition and installation from the internet.

Vague Triggers

Medium
Confidence
87% confidence
Finding
The trigger phrases are broad and overlap with common audio-editing requests, making accidental invocation more likely. Because this skill can run shell commands and process arbitrary file or folder paths, unintended activation could lead to unexpected code execution, filesystem access, or batch processing of user data.

Missing User Warnings

Medium
Confidence
98% confidence
Finding
Calling fix_setuptools_for_legacy_packages() at module import causes immediate package-management side effects without an explicit user action. Import-time installation is particularly dangerous because merely loading the skill mutates the environment and may trigger network access and code execution before any consent, review, or task-specific need is established.

VirusTotal

66/66 vendors flagged this skill as clean.

View on VirusTotal