Back to skill

Security audit

Tencent MPS Video Dubbing

Security checks across malware telemetry and agentic risk

Overview

The skill mostly matches video dubbing, but it can upload local files during dry-run/no-confirmation paths and automatically changes the Python environment.

Review before installing. Use a narrowly scoped Tencent Cloud CAM key and a dedicated COS bucket/prefix, avoid running the skill from untrusted workspaces that may contain .env files, and install dependencies manually in an isolated virtual environment if possible. Do not assume --dry-run or omitting --confirm-charges prevents all remote side effects when using --local-file; the current code can upload first. Treat generated presigned URLs as sensitive temporary access links.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
Findings (23)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
"""
    cmd = [sys.executable, "-m", "pip", "install", "--upgrade", "--quiet"] + specs
    print(f"⏳ 正在自动安装/升级缺失依赖:{', '.join(specs)}", file=sys.stderr)
    result = subprocess.run(cmd, capture_output=True, text=True)
    if result.returncode != 0:
        print(
            f"❌ 自动安装失败,请手动执行:\n"
Confidence
93% confidence
Finding
result = subprocess.run(cmd, capture_output=True, text=True)

Description-Behavior Mismatch

Medium
Confidence
97% confidence
Finding
This helper performs environment mutation by installing or upgrading Python packages at runtime, which exceeds the stated purpose of end-to-end video dubbing and task query. A skill meant to process media should not silently change the host's software inventory, because that can introduce unreviewed code, break reproducibility, and bypass normal dependency governance.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
Spawning a subprocess to invoke `pip` gives the skill the ability to alter the host Python environment and retrieve code from package repositories, a powerful capability unrelated to the declared dubbing workflow. In this skill context, that mismatch is more dangerous because users would reasonably expect media transformation, not system-level package management with network side effects.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
The script accepts raw cloud credentials via CLI or environment variables and then uses them to perform arbitrary COS downloads. In isolation that is common for admin tooling, but within this skill's declared purpose—end-to-end video dubbing or querying dubbing task status—it unnecessarily expands the skill's authority to generic storage access, creating a path to access unrelated bucket objects if an attacker can influence the requested key or invocation context.

Description-Behavior Mismatch

High
Confidence
95% confidence
Finding
This file implements a generic COS downloader that can retrieve any object key from the configured bucket, which is materially broader than the manifest's claimed inseparable dubbing pipeline or status-query behavior. That mismatch is dangerous because it turns a narrowly described media-processing skill into a general data access primitive, enabling unauthorized retrieval of stored media or other artifacts if exposed through the agent.

Context-Inappropriate Capability

Medium
Confidence
84% confidence
Finding
The script prints reusable COS URLs and parameters for unrelated AIGC image/video workflows, expanding the effective capability beyond the declared video-dubbing purpose. In an agent-skill context, this broadens misuse potential by making uploaded assets easily repurposable across other pipelines without additional user confirmation or scope checks.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The loader pulls configuration from broad, user-controlled locations including parent-directory .env files, ~/.env, ~/.bashrc, and ~/.profile. In an agent/skill context, this expands the trust boundary unnecessarily and can cause the skill to ingest unrelated secrets or attacker-planted values from the working directory or user home, which is more capability than needed for this task.

Intent-Code Divergence

Medium
Confidence
88% confidence
Finding
The documentation says the skill-directory .env is loaded, but the code appends os.path.dirname(os.path.dirname(os.path.abspath(__file__))), which is a directory path rather than an explicit .env file. This mismatch can cause operators to place secrets in one location while the code loads from another, leading to accidental misconfiguration and potentially loading an unintended .env file from that directory.

Description-Behavior Mismatch

Medium
Confidence
89% confidence
Finding
This module is presented as a task-polling utility, but it also contains capabilities to upload arbitrary local files to COS and download remote task outputs to local disk. That scope expansion increases the attack surface of a component likely to be trusted for read-only status checks, making unintended file transfer operations easier to trigger from imports or higher-level orchestration.

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
The auto_upload_local_file function provides a generic local-file-to-COS exfiltration path that is not justified by a pure polling role. In an agent setting, any unnecessary file movement primitive is security-relevant because it can be reused to move sensitive local files to cloud storage if a caller passes attacker-influenced paths.

Intent-Code Divergence

Low
Confidence
78% confidence
Finding
The CLI text says the tool only polls video tasks, but the module also supports uploads and downloads. Misleading interface claims can cause operators and calling agents to grant trust or permissions inappropriate for the actual behavior, increasing the chance of unsafe invocation.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The script generates a presigned URL for uploaded content and returns it to the user without a prominent default warning about exposure or sharing risk. Presigned URLs grant time-limited access to cloud-hosted content, so accidental disclosure can expose potentially sensitive media to anyone possessing the link.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
Automatic upload of a local file to COS occurs once this helper is called, without an in-function confirmation gate or explicit operation-time consent. In an agent workflow, this can lead to accidental or attacker-induced transmission of local files to remote storage, especially if file paths are derived from user input or other untrusted context.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The auto_download_outputs function writes remote task artifacts directly to the local filesystem with no confirmation barrier. In agent environments this can overwrite expected workflows, introduce unreviewed files onto disk, and expand the consequences of attacker-controlled or unexpected remote outputs.

Credential Access

High
Category
Privilege Escalation
Content
实现说明:
  使用 python-dotenv 库的 load_dotenv 函数加载 dotenv 风格的配置文件。
  按以下顺序加载(已存在的环境变量不会被覆盖,先加载者优先):
    1. 默认行为:通过 find_dotenv(usecwd=True) 从当前目录向上递归找最近的 .env 并加载
    2. ~/.env                (用户级 dotenv)
    3. ~/.bashrc             (shell 启动文件,兼容 export VAR=... 写法)
    4. ~/.profile            (登录 shell 启动文件)
Confidence
92% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
使用 python-dotenv 库的 load_dotenv 函数加载 dotenv 风格的配置文件。
  按以下顺序加载(已存在的环境变量不会被覆盖,先加载者优先):
    1. 默认行为:通过 find_dotenv(usecwd=True) 从当前目录向上递归找最近的 .env 并加载
    2. ~/.env                (用户级 dotenv)
    3. ~/.bashrc             (shell 启动文件,兼容 export VAR=... 写法)
    4. ~/.profile            (登录 shell 启动文件)
    5. <SKILL_DIR>/.env      (脚本所在 skill 目录的 dotenv)
Confidence
93% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
2. ~/.env                (用户级 dotenv)
    3. ~/.bashrc             (shell 启动文件,兼容 export VAR=... 写法)
    4. ~/.profile            (登录 shell 启动文件)
    5. <SKILL_DIR>/.env      (脚本所在 skill 目录的 dotenv)

  目标变量(全部为必需):
    TENCENTCLOUD_SECRET_ID       (必需)
Confidence
84% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
# 候选 dotenv 文件列表(按加载顺序,先加载者优先;load_dotenv 默认 override=False)
# 此外,load_env_files() 会先调用一次无参 load_dotenv(),
# 借助 find_dotenv(usecwd=True) 从当前工作目录向上递归查找最近的 .env 文件并加载。
_ENV_FILES = [
    os.path.expanduser("~/.env"),
    os.path.expanduser("~/.bashrc"),
Confidence
94% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
# 此外,load_env_files() 会先调用一次无参 load_dotenv(),
# 借助 find_dotenv(usecwd=True) 从当前工作目录向上递归查找最近的 .env 文件并加载。
_ENV_FILES = [
    os.path.expanduser("~/.env"),
    os.path.expanduser("~/.bashrc"),
    os.path.expanduser("~/.profile"),
    os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
Confidence
83% confidence
Finding
.env"

Credential Access

High
Category
Privilege Escalation
Content
display = value[:4] + "****" if len(value) > 4 else "****"
                    print(f"[load_env]   设置 {key}={display}", file=sys.stderr)

    # 先尝试 find_dotenv 的默认行为:从当前工作目录向上递归查找 .env 文件
    try:
        from dotenv import find_dotenv
        default_path = find_dotenv(usecwd=True)
Confidence
94% confidence
Finding
.env

Unpinned Dependencies

Low
Category
Supply Chain
Content
#     repo: https://github.com/theskumar/python-dotenv
#     used by 1 script (mps_load_env.py) for automatic dotenv loading

tencentcloud-sdk-python>=3.1.139
cos-python-sdk-v5>=1.9.30
python-dotenv>=1.0.0
Confidence
95% confidence
Finding
tencentcloud-sdk-python>=3.1.139

Unpinned Dependencies

Low
Category
Supply Chain
Content
#     used by 1 script (mps_load_env.py) for automatic dotenv loading

tencentcloud-sdk-python>=3.1.139
cos-python-sdk-v5>=1.9.30
python-dotenv>=1.0.0
Confidence
95% confidence
Finding
cos-python-sdk-v5>=1.9.30

Unpinned Dependencies

Low
Category
Supply Chain
Content
tencentcloud-sdk-python>=3.1.139
cos-python-sdk-v5>=1.9.30
python-dotenv>=1.0.0
Confidence
96% confidence
Finding
python-dotenv>=1.0.0

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:41