MCBAI Douyin Dubber

Security checks across malware telemetry and agentic risk

Overview

The skill appears to be a real video-dubbing utility, but users should review it because it needs a full Douyin session cookie and its “fully local” wording understates external AI/TTS data sharing.

Install only if you are comfortable using a throwaway Douyin account cookie, rotating it after use, and having transcript/translated text sent to the AI agent and whichever TTS provider you choose. Run it in a dedicated environment, avoid private videos, and treat the Edge TTS header patching and unpinned dependencies as review points rather than hidden malware.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (7)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
)

    tts_track = workdir / "tts_track.mp3"
    subprocess.run(
        [FFMPEG, "-y"] + inputs + [
            "-filter_complex", ";".join(filter_parts),
            "-map", "[aout]",
Confidence
83% confidence
Finding
subprocess.run( [FFMPEG, "-y"] + inputs + [ "-filter_complex", ";".join(filter_parts), "-map", "[aout]", "-acodec", "libmp3lame", "-q:a", "4",

subprocess module call

Medium
Category
Dangerous Code Execution
Content
ass_path_fwd = str(ass_path).replace("\\", "/").replace(":", "\\:")
    sub_filter = f"subtitles='{ass_path_fwd}':fontsdir='C\\:/Windows/Fonts'"

    subprocess.run([
        FFMPEG, "-y",
        "-i", str(video), "-i", str(tts_track),
        "-filter_complex",
Confidence
91% confidence
Finding
subprocess.run([ FFMPEG, "-y", "-i", str(video), "-i", str(tts_track), "-filter_complex", f"[0:v]{sub_filter}[vout];" f"[0:a]volume={original_vol}[orig];"

subprocess module call

Medium
Category
Dangerous Code Execution
Content
# Delay tăng dần: lần 1 = 2-4s, retry = 5-10s để tránh rate limit
        delay = 2.0 + random.uniform(1.0, 2.0) if attempt == 0 else 5.0 + random.uniform(2.0, 5.0)
        _time.sleep(delay)
        r = subprocess.run([_sys.executable, "-c", script],
                           capture_output=True, text=True,
                           env={**os.environ, "PYTHONUTF8": "1"})
        if r.returncode == 0 and out_path.exists() and out_path.stat().st_size > 100:
Confidence
98% confidence
Finding
r = subprocess.run([_sys.executable, "-c", script], capture_output=True, text=True, env={**os.environ, "PYTHONUTF8": "1"})

Tainted flow: 'req' from pathlib.Path.read_text (line 602, file read) → urllib.request.urlopen (network output)

High
Category
Data Flow
Content
req.add_header("xi-api-key", api_key)
    req.add_header("Content-Type", "application/json")
    req.add_header("Accept", "audio/mpeg")
    with urllib.request.urlopen(req, timeout=30) as resp:
        out_path.write_bytes(resp.read())
Confidence
94% confidence
Finding
with urllib.request.urlopen(req, timeout=30) as resp:

Tainted flow: 'script' from pathlib.Path.read_text (line 614, file read) → subprocess.run (code execution)

Medium
Category
Data Flow
Content
# Delay tăng dần: lần 1 = 2-4s, retry = 5-10s để tránh rate limit
        delay = 2.0 + random.uniform(1.0, 2.0) if attempt == 0 else 5.0 + random.uniform(2.0, 5.0)
        _time.sleep(delay)
        r = subprocess.run([_sys.executable, "-c", script],
                           capture_output=True, text=True,
                           env={**os.environ, "PYTHONUTF8": "1"})
        if r.returncode == 0 and out_path.exists() and out_path.stat().st_size > 100:
Confidence
99% confidence
Finding
r = subprocess.run([_sys.executable, "-c", script], capture_output=True, text=True, env={**os.environ, "PYTHONUTF8": "1"})

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The skill description promises a fully local pipeline, but the implementation uses remote translation handoff semantics plus cloud TTS providers such as gTTS and ElevenLabs. This is a security-relevant trust violation because users may provide private media believing no data leaves the machine.

Intent-Code Divergence

Medium
Confidence
96% confidence
Finding
The Edge TTS implementation deliberately patches headers to impersonate a browser and Chrome extension, which is evasive behavior and may bypass normal service controls or mislead upstream providers. That increases legal, operational, and trust risk, especially in a skill presented as a normal dubbing utility.

VirusTotal

65/65 vendors flagged this skill as clean.

View on VirusTotal