Back to skill

Security audit

llm-text-correct

Security checks across malware telemetry and agentic risk

Overview

This Chinese text-correction skill has a plausible core purpose, but it also automatically changes Python environments, installs broad unpinned packages, and can bulk-process local files, so it needs review before installation.

Install only in an isolated environment if you are comfortable with automatic package installation, model downloads, GPU probing, local logging, and generated corrected copies of files. Avoid running it on broad private folders or source-code directories, and review output files before using them.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (31)

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
94% confidence
Finding
subprocess.check_call([ sys.executable, "-m", "pip", "install", "--quiet", "--force-reinstall", "setuptools<=81.2.0", "wheel" ])

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
98% confidence
Finding
subprocess.check_call(cmd)

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
97% 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
98% confidence
Finding
subprocess.check_call(cmd_fallback)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
logger.info("虚拟环境创建成功")

        logger.info("正在升级 pip...")
        subprocess.check_call([str(venv_python), "-m", "pip", "install", "--upgrade", "pip"])

    # ==================== 检查 PyTorch GPU 是否已安装 ====================
    if Path(venv_python).exists() and is_torch_gpu_installed(venv_python):
Confidence
87% confidence
Finding
subprocess.check_call([str(venv_python), "-m", "pip", "install", "--upgrade", "pip"])

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
93% 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
88% 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
88% 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
94% 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
94% confidence
Finding
subprocess.check_call([str(venv_python), "-m", "pip", "install", "audio-separator[cpu]", "librosa"])

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill declares no permissions while its documented behavior invokes Python, reads and writes files, accesses environment details, and executes shell commands. This creates a hidden capability gap: users and the platform may treat it as low-risk text correction while it can modify local files, inspect the runtime, and run arbitrary install/setup logic.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The advertised function is Chinese text correction, but the behavior includes virtualenv creation, GPU/CUDA probing, broad dependency installation, external model downloads, recursive folder processing, and handling many non-text source/data formats. This mismatch is dangerous because it expands the attack surface far beyond user expectations and can lead to unintended code execution paths, excessive system inspection, network retrieval of unpinned artifacts, and mass modification of local files.

Description-Behavior Mismatch

Medium
Confidence
94% confidence
Finding
The script behavior exceeds the user-facing description by accepting directories, recursively traversing them, and writing corrected copies into new files or folders. In an agent setting, this scope expansion is dangerous because a user intending to correct a single text snippet or file path could unintentionally trigger bulk processing of many files, including source code, configuration, or sensitive documents.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The skill performs automatic network downloads from Hugging Face at runtime, which introduces outbound network access and remote supply-chain dependency not clearly implied by a local text-correction utility. In agent environments, this can violate sandbox/privacy expectations and may fetch unpinned remote artifacts whose contents can change over time.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The file implements a generic package installer, which is unrelated to the declared Chinese text-correction functionality. This mismatch is security-relevant because hidden environment-modification and code-fetching capabilities in an unrelated skill expand privilege and make malicious or accidental abuse more likely.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
This section changes core packaging tooling in the host environment by force-reinstalling setuptools and wheel. Unjustified environment mutation at module load time can break other components, alter security assumptions, and create a powerful foothold for supply-chain abuse in a skill that should only process text.

Context-Inappropriate Capability

High
Confidence
100% confidence
Finding
This installer accepts arbitrary package specs, git repositories, and local archives, effectively exposing a general code-loading primitive. In the context of an agent skill, this can be abused for remote code execution, persistence, dependency confusion, or silent environment tampering, none of which are justified by the skill's advertised function.

Intent-Code Divergence

Medium
Confidence
93% confidence
Finding
The module documentation openly describes a package installation tool rather than text-correction behavior, reinforcing that the file's actual capability is outside the declared scope. Such scope mismatch is a strong indicator of unnecessary privilege and increases the likelihood of hidden supply-chain or persistence functionality.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The file is framed as a Chinese text-correction skill, but the implementation is a generic environment bootstrapper with hardware probing and dependency installation. This capability mismatch is dangerous because users and reviewers may grant trust based on the benign description while the code performs broader system-modifying actions.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The skill executes subprocesses, probes GPU hardware, and installs multiple large packages despite being presented as a text-correction utility. In this context, the extra capabilities materially increase attack surface and supply-chain risk and are not proportionate to the user-facing function.

Intent-Code Divergence

Medium
Confidence
90% confidence
Finding
The module docstring describes environment initialization and audio dependency deployment rather than Chinese text correction. This inconsistency weakens transparency and can conceal risky behavior from users and auditors, making unsafe operations more likely to be accepted without scrutiny.

Context-Inappropriate Capability

Medium
Confidence
86% confidence
Finding
The skill writes execution data to local rotating log files even though persistent storage is not necessary for basic text correction. In a text-correction context, logs can easily capture user-submitted text, file paths, or operational metadata, creating unnecessary data retention and privacy exposure if sensitive content is processed.

Description-Behavior Mismatch

Medium
Confidence
92% confidence
Finding
The module performs runtime package installation and later supports downloading model assets from external services, which contradicts the expectation of a primarily local text-correction skill. Even if the purpose is legitimate, implicit network access expands the trust boundary, can leak environment metadata, and introduces supply-chain risk from remote dependencies and model artifacts.

Description-Behavior Mismatch

Medium
Confidence
96% confidence
Finding
download_model accepts arbitrary model identifiers, including any Hugging Face repo path containing '/'. That allows the skill to fetch unreviewed repository contents beyond the advertised correction function, creating a supply-chain exposure and enabling loading of attacker-controlled model files or unexpected large artifacts into the local environment.

Missing User Warnings

Medium
Confidence
74% confidence
Finding
The README encourages correcting all .txt files in a directory but does not clearly warn whether this performs in-place modification, creates backups, or previews changes first. In a file-processing skill, bulk operations without confirmation or safety guidance can lead to unintended mass alteration or loss of user data.

VirusTotal

63/63 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.