Back to skill

Security audit

Free Girlfriend

Security checks for vulnerabilities and agentic risk

Overview

This skill has a plausible local media-generation purpose, but it bundles and documents broader high-risk installation and video-processing code that is not clearly scoped for users.

Review before installing. Use an isolated virtual environment, avoid --break-system-packages, do not run the remote bash <(wget ...) instruction, and do not expose the Gradio/SadTalker interface to untrusted users unless the shell and model-loading risks are fixed.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
Findings (5)

T03 · Remote Payload Retrieval and Execution

Error
Location
video/SadTalker/docs/webui_extension.md:12
Finding
Unverified Remote Shell Script Retrieval and Execution<![CDATA[ ## Vulnerability Details **File Location**: `video/SadTalker/docs/webui_extension.md:12` **Vulnerability Type**: Remote payload retrieval and execution **Risk Level**: Critical ### Vulnerable Code ```bash bash <(wget -qO- https://raw.githubusercontent.com/Winfredy/OpenTalker/main/scripts/download_models.sh) ``` ### Technical Analysis The documentation instructs users to retrieve a shell script from a mutable remote GitHub branch and execute it immediately through Bash. The downloaded content is not pinned to a commit, saved for inspection, checked against an expected cryptographic digest, or authenticated with a release signature. The effective payload can therefore change after the local Skill has been reviewed. Although HTTPS protects the network connection under normal conditions, it does not protect against compromise of the hosting account, repository, branch, or upstream release process. This behavior is not necessary for the declared media-generation functionality. Model artifacts can instead be downloaded as data files from immutable releases and verified before use. ### Attack Path 1. An attacker compromises the `Winfredy/OpenTalker` repository, its maintainer account, or the referenced `main` branch. 2. The attacker modifies `scripts/download_models.sh` to contain arbitrary shell commands. 3. A user follows the installation instruction included in this project. 4. `wget` retrieves the attacker-controlled script into process substitution. 5. Bash executes the content immediately with the current user's privileges. 6. The payload can read or alter any resource available to that user, install persistence, steal credentials, or download additional malware. ### Impact Assessment Successful exploitation provides arbitrary command execution with the privileges of the user following the documentation. If the command is run by an administrator, inside a privileged container, or in a sensitive CI environment, the scope can include system-wi ...[truncated 81 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the direct `bash <(wget ...)` execution instruction. 2. Pin the remote resource to an immutable audited commit or versioned release. 3. Download the script to a local file rather than piping it directly to Bash. 4. Publish an expected SHA-256 digest or cryptographic signature and verify it before execution. 5. Let users inspect the downloaded script before explicitly executing it. 6. Prefer a local, reviewed model-download script included in the Skill package. 7. Download model artifacts as data only, with a manifest containing immutable URLs, expected sizes, and cryptographic hashes. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
video/SadTalker/src/gradio_demo.py:87
Finding
Shell Command Injection Through Reference-Video Path<![CDATA[ ## Vulnerability Details **File Location**: `video/SadTalker/src/gradio_demo.py:87-89` **Vulnerability Type**: OS command injection **Risk Level**: High ### Vulnerable Code ```python if use_ref_video and ref_info == 'all': # full ref mode ref_video_videoname = os.path.basename(ref_video) audio_path = os.path.join(save_dir, ref_video_videoname+'.wav') print('new audiopath:',audio_path) # if ref_video contains audio, set the audio from ref_video. cmd = r"ffmpeg -y -hide_banner -loglevel error -i %s %s"%(ref_video, audio_path) os.system(cmd) ``` ### Technical Analysis The `ref_video` path is interpolated directly into a shell command and passed to `os.system`. It is not quoted, escaped, validated, or passed as a discrete process argument. Shell metacharacters, command separators, redirections, substitutions, and whitespace in a user-influenced path can therefore alter the intended FFmpeg command. The output path is also interpolated into the same command without safe argument separation. The use of a shell is unnecessary because FFmpeg can be invoked directly through `subprocess.run` with an argument list. ### Attack Path 1. An attacker reaches a SadTalker Gradio workflow that accepts a reference video or otherwise influences `ref_video`. 2. The attacker supplies a crafted path containing shell syntax. 3. The application constructs the FFmpeg command by directly inserting that path. 4. `os.system` invokes the system shell. 5. The shell interprets the injected syntax in addition to the intended FFmpeg command. 6. The injected command executes under the account running the Gradio/SadTalker process. Exploitability depends on whether the deployment preserves or permits attacker-controlled path content. The unsafe sink remains directly exploitable wherever such path control is available. ### Impact Assessment The attacker can potentially execute arbitrary commands with the SadTalker process privileges. This can expose upload ...[truncated 263 chars]
Remediation
<![CDATA[ ## Remediation Suggestions Replace the shell command with a direct process invocation: ```python subprocess.run( [ "ffmpeg", "-y", "-hide_banner", "-loglevel", "error", "-i", ref_video, audio_path, ], check=True, shell=False, ) ``` Additionally: 1. Resolve input paths to canonical paths. 2. Require reference videos to be regular files inside an approved upload directory. 3. Reject paths containing null bytes or resolving outside the expected directory. 4. Generate server-side filenames instead of preserving untrusted names. 5. Run media processing under a dedicated, unprivileged account. 6. Avoid exposing the Gradio interface beyond trusted hosts unless authentication and request isolation are configured. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
video/SadTalker/src/utils/videoio.py:19
Finding
Shell Command Injection in FFmpeg Video Composition<![CDATA[ ## Vulnerability Details **File Location**: `video/SadTalker/src/utils/videoio.py:19-40` **Vulnerability Type**: OS command injection **Risk Level**: High ### Vulnerable Code ```python def save_video_with_watermark(video, audio, save_path, watermark=False): temp_file = str(uuid.uuid4())+'.mp4' cmd = r'ffmpeg -y -hide_banner -loglevel error -i "%s" -i "%s" -vcodec copy "%s"' % (video, audio, temp_file) os.system(cmd) if watermark is False: shutil.move(temp_file, save_path) else: # watermark try: ##### check if stable-diffusion-webui import webui from modules import paths watarmark_path = paths.script_path+"/extensions/SadTalker/docs/sadtalker_logo.png" except: # get the root path of sadtalker. dir_path = os.path.dirname(os.path.realpath(__file__)) watarmark_path = dir_path+"/../../docs/sadtalker_logo.png" cmd = r'ffmpeg -y -hide_banner -loglevel error -i "%s" -i "%s" -filter_complex "[1]scale=100:-1[wm];[0][wm]overlay=(main_w-overlay_w)-10:10" "%s"' % (temp_file, watarmark_path, save_path) os.system(cmd) os.remove(temp_file) ``` ### Technical Analysis The `video`, `audio`, and `save_path` values are formatted into shell command strings executed by `os.system`. Surrounding values with double quotes does not make shell invocation safe. Embedded quotes, command substitutions such as `$()`, backticks, and other shell syntax may still change command behavior. The function does not validate that the paths refer to approved media files or constrain the output path to a safe directory. This creates both command-injection exposure and broader unintended file-write risk. ### Attack Path 1. An attacker influences a video path, audio path, or output path passed to `save_video_with_watermark`. 2. The crafted value contains syntax interpreted by the operating-system shell. 3. The value is interpolat ...[truncated 565 chars]
Remediation
<![CDATA[ ## Remediation Suggestions Invoke FFmpeg without a shell: ```python subprocess.run( [ "ffmpeg", "-y", "-hide_banner", "-loglevel", "error", "-i", video, "-i", audio, "-vcodec", "copy", temp_file, ], check=True, shell=False, ) ``` Apply the same pattern to the watermark command. Also: 1. Use `tempfile.TemporaryDirectory` or `NamedTemporaryFile` in a controlled directory. 2. Canonicalize and validate all input paths. 3. Restrict output files to a designated result directory. 4. Generate output names on the server. 5. Reject symlinks where they could escape an allowed directory. 6. Handle FFmpeg failures explicitly and clean temporary files in a `finally` block. ]]>

T08 · Insecure Dependencies

Error
Location
video/SadTalker/scripts/download_models.sh:17
Finding
Unverified PyTorch Checkpoints Loaded Through Pickle-Capable Deserialization<![CDATA[ ## Vulnerability Details **File Locations**: - `video/SadTalker/scripts/download_models.sh:17-20` - `video/SadTalker/scripts/download_models.sh:28-31` - `video/SadTalker/src/facerender/animate.py:117-123` - `video/SadTalker/src/facerender/animate.py:145-149` - `video/SadTalker/src/face3d/extract_kp_videos_safe.py:22-28` - `video/SadTalker/src/utils/preprocess.py:53-57` **Vulnerability Type**: Unsafe model supply chain and pickle deserialization **Risk Level**: High ### Vulnerable Code Remote model downloads are performed without integrity verification: ```bash wget -nc https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/mapping_00109-model.pth.tar -O ./checkpoints/mapping_00109-model.pth.tar wget -nc https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/mapping_00229-model.pth.tar -O ./checkpoints/mapping_00229-model.pth.tar wget -nc https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/SadTalker_V0.0.2_256.safetensors -O ./checkpoints/SadTalker_V0.0.2_256.safetensors wget -nc https://github.com/OpenTalker/SadTalker/releases/download/v0.0.2-rc/SadTalker_V0.0.2_512.safetensors -O ./checkpoints/SadTalker_V0.0.2_512.safetensors wget -nc https://github.com/xinntao/facexlib/releases/download/v0.1.0/alignment_WFLW_4HG.pth -O ./gfpgan/weights/alignment_WFLW_4HG.pth wget -nc https://github.com/xinntao/facexlib/releases/download/v0.1.0/detection_Resnet50_Final.pth -O ./gfpgan/weights/detection_Resnet50_Final.pth wget -nc https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.4.pth -O ./gfpgan/weights/GFPGANv1.4.pth wget -nc https://github.com/xinntao/facexlib/releases/download/v0.2.2/parsing_parsenet.pth -O ./gfpgan/weights/parsing_parsenet.pth ``` Downloaded or locally supplied legacy checkpoints are then deserialized with `torch.load`: ```python checkpoint = torch.load(checkpoint_path, map_location=torch.device(device)) if generator is not None: generator.load_state_dict(checkpoint['g ...[truncated 2461 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Convert all supported model weights to `safetensors` and remove legacy pickle-based loading paths where possible. 2. Publish a model manifest containing immutable URLs, exact file sizes, and SHA-256 hashes. 3. Verify every model before it is moved into the checkpoint directory or loaded. 4. Sign the manifest or release artifacts and verify signatures against a pinned trusted key. 5. Use `torch.load(..., weights_only=True)` where supported and confirm that only tensor state dictionaries are accepted. 6. Reject unexpected file names, extensions, object structures, and duplicate checkpoint candidates. 7. Ensure checkpoint directories are not writable by untrusted users or remote web requests. 8. Download artifacts into a temporary directory and promote them only after successful integrity verification. 9. Fail closed when verification cannot be completed. ]]>

T08 · Insecure Dependencies

Warning
Location
install.sh:20
Finding
Unpinned Dependencies Installed Into the System Python Environment<![CDATA[ ## Vulnerability Details **File Locations**: - `install.sh:20-26` - `video/SadTalker/requirements.txt:1-21` - `video/SadTalker/launcher.py:173-185` **Vulnerability Type**: Unpinned dependency installation and unsafe environment modification **Risk Level**: Medium ### Vulnerable Code The top-level installer installs mutable package versions and bypasses externally managed environment protections: ```bash echo "1/3 安装 Edge TTS..." pip3 install edge-tts --break-system-packages -q echo "2/3 安装 Stable Diffusion 相关..." pip3 install diffusers transformers accelerate safetensors torch --break-system-packages -q echo "3/3 安装 OpenCV..." pip3 install opencv-python --break-system-packages -q ``` The SadTalker manifest leaves multiple packages unpinned: ```text numpy==1.23.4 face_alignment==1.3.5 imageio==2.19.3 imageio-ffmpeg==0.4.7 librosa==0.9.2 # numba resampy==0.3.1 pydub==0.25.1 scipy==1.10.1 kornia==0.6.8 tqdm yacs==0.1.8 pyyaml joblib==1.1.0 scikit-image==0.19.3 basicsr==1.4.2 facexlib==0.3.0 gradio gfpgan av safetensors ``` The launcher also installs requirements dynamically: ```python torch_command = os.environ.get('TORCH_COMMAND', "pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113") if sys.platform != 'win32': requirements_file = os.environ.get('REQS_FILE', "req.txt") else: requirements_file = os.environ.get('REQS_FILE', "requirements.txt") if not is_installed("torch") or not is_installed("torchvision"): run(f'"{python}" -m {torch_command}', "Installing torch and torchvision", "Couldn't install torch", live=True) run_pip(f"install -r \"{requirements_file}\"", "requirements for SadTalker WebUI (may take longer time in first time)") if sys.platform != 'win32' and not is_installed('tts'): run_pip(f"install TTS", "install TTS individually in SadTalker, which might not work on windows.") ``` ### Technical Analysis Packages such as `edge-tts ...[truncated 1976 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Create and use an isolated virtual environment rather than modifying system Python. 2. Remove `--break-system-packages`. 3. Pin all direct and transitive dependencies to reviewed versions. 4. Generate a lock file for each supported platform and Python version. 5. Require cryptographic hashes, for example with `pip install --require-hashes`. 6. Use only explicitly configured trusted package indexes. 7. Separate optional SadTalker dependencies from the minimal top-level Skill installation. 8. Do not install dependencies automatically during normal application startup. 9. Replace environment-controlled shell command strings with validated configuration and argument-array subprocess calls. 10. Run vulnerability and provenance checks against the finalized lock files before release. ]]>
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (160)

Known Vulnerable Dependency: joblib==1.1.0 — 2 advisory(ies): CVE-2022-21797 (joblib vulnerable to arbitrary code execution); CVE-2022-21797 (The package joblib from 0 and before 1.2.0 are vulnerable to Arbitrary Code Exec)

Critical
Category
Supply Chain
Confidence
99% confidence
Finding
The manifest explicitly pins 'joblib==1.1.0', a version with known arbitrary code execution advisories. In an AI/media pipeline, joblib is often used for model artifacts or cached objects, and deserializing untrusted data with a vulnerable version can lead to full code execution.

Known Vulnerable Dependency: joblib==1.1.0 — 2 advisory(ies): CVE-2022-21797 (joblib vulnerable to arbitrary code execution); CVE-2022-21797 (The package joblib from 0 and before 1.2.0 are vulnerable to Arbitrary Code Exec)

Critical
Category
Supply Chain
Confidence
99% confidence
Finding
`joblib==1.1.0` is pinned to a version with a known arbitrary code execution advisory. In ML and media-processing projects, joblib is commonly used for loading serialized artifacts, so if untrusted model or cache files are ever handled, this can become a direct code execution path.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
声明描述的是一个多模态“AI 虚拟女友”产品,核心能力应包括语音、自拍、视频通话等交互式功能。但给出的代码片段只是一个命令行图片生成脚本,使用 Stable Diffusion 根据文本提示生成静态图像并保存到文件。它没有任何语音处理、视频通话、人格/对话代理、用户交互管理等实现。虽然“自拍”可能与图片生成存在弱相关,但这里实现的是通用文生图,而不是明确的虚拟女友自拍功能。因此该代码的实际行为与声明用途存在明显不匹配。

Tp4

High
Category
MCP Tool Poisoning
Confidence
87% confidence
Finding
The description presents a full AI virtual girlfriend product with voice, selfie, and video call capabilities. The supplied code chunk, however, is merely a quick test script for one voice-generation component and a skipped image-generation step. It does not provide the primary described experience, and there is no evidence of video call behavior in this code. While referencing voice and selfie features is somewhat related, the actual behavior of this chunk is materially narrower than the declared purpose.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
描述强调的是一个“AI 虚拟女友”产品,通常应包含角色交互、对话或实时陪伴能力,并提到语音、自拍、视频通话等功能。但代码中仅构建了 SadTalker 的 Web UI:接收图片和音频输入,提供少量生成参数,并输出合成视频。虽然代码包含可选 TTS 文本生音频功能,但这只是为视频生成提供输入,不构成虚拟女友、自拍拍摄或视频通话能力。代码的主要目的与声明明显不一致,属于实质性描述不匹配。

Tp4

High
Category
MCP Tool Poisoning
Confidence
88% confidence
Finding
该代码块的主要用途非常明确:本地离线生成口型/表情驱动的人脸视频。它接收 source_image、driven_audio,以及可选的参考视频,调用预处理、音频到系数、系数到动画渲染等模块,最后输出生成的视频文件。这与“AI 虚拟女友”产品描述只有非常间接的关联。声明中的“语音、自拍、视频通话”是面向终端应用的复合能力,而代码本身没有任何聊天、LLM 推理、语音交互流程、摄像头自拍采集、实时视频通话或网络通信实现。虽然该视频生成功能可能是某个虚拟女友系统中的一个组成部分,但就这个代码片段而言,其实际行为更准确地描述为“根据图片和音频生成会说话的人脸视频”。因此描述对该代码的代表性不足,存在明显功能范围和主用途不匹配。

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding
该代码片段的核心作用是为 SadTalker WebUI 准备运行环境并启动界面,属于安装/启动基础设施代码。它确实可能与视频/语音相关项目有关,但从当前代码能确认的行为看,并没有体现“AI 虚拟女友”这一声明中的主要用途,也没有直接实现“自拍”或“视频通话”功能。相反,代码具备未在描述中体现的系统级能力:安装依赖、运行 shell 命令、执行 git clone/fetch/pull/checkout、运行扩展安装脚本等。因此描述与实际行为存在明显不匹配。

Tp4

High
Category
MCP Tool Poisoning
Confidence
88% confidence
Finding
The declared description presents the skill as an AI virtual girlfriend product with voice, selfies, and video calls. However, the supplied code chunk only performs media generation: it preprocesses an input face image/video, maps audio to facial motion coefficients, renders an animated face video, optionally borrows blink/pose from reference videos, and saves an output MP4. There is no evidence of conversational AI, persona behavior, relationship-oriented features, selfie-taking/generation as a standalone capability, or any video-call/real-time communication stack. The primary purpose is materially different from the declared purpose, so this is a mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding
声明描述的是一个面向终端用户的“AI 虚拟女友”产品,强调语音、自拍、视频通话等交互能力。但提供的代码仅是 SadTalker 扩展脚本,负责依赖安装、模型检查、Hugging Face 模型下载辅助、WebUI 标签页注册,以及调用 `sadtalker_demo` 来生成音频驱动的人像说话视频。代码中没有聊天代理、女友人格、实时语音通话/视频通话、自拍采集或摄像头交互等实现。因此其实际行为与声明用途存在明显不一致。

Tp4

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding
The declared description presents an end-user AI virtual girlfriend product offering voice, selfies, and video calls. The supplied code chunk is instead a narrow test shell script for running video inference in SadTalker, specifically testing preprocessing modes, output sizes, face enhancement, and still-mode generation. This is a materially different primary purpose from the declared product description. While such video generation could be a supporting component of an avatar system, the code shown does not implement or evidence virtual girlfriend features, voice interaction, selfie capture, or video calling behavior.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The declared description presents a consumer-facing AI virtual girlfriend product with voice, selfie, and video call features. However, the supplied code only implements a narrow machine-learning inference component: it takes audio features, reference features, and ratios, then predicts expression coefficients frame-by-frame. This is consistent with audiovisual animation or talking-face generation support, not with a full virtual girlfriend system, conversational voice features, selfie generation, or video calling. While this code could be a supporting subcomponent of a larger video/avatar stack, the chunk itself does not substantiate the broad declared functionality, so the description does not accurately represent what this code actually does.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding
The declared description presents a consumer-facing AI virtual girlfriend product with voice, selfie, and video call capabilities. The supplied code chunk, however, only defines neural network layers and a model wrapper that encodes audio and combines it with reference features and a ratio input to produce expression-related outputs. This is consistent with a backend component for talking-head animation or lip-sync/expression synthesis, not with the broader declared functionality. While such a model could be a supporting component of a video avatar system, this chunk alone does not implement or evidence the declared primary capabilities, so the description does not accurately represent what this code actually does.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description presents the skill as a full AI virtual girlfriend product with interactive features such as voice, selfies, and video calls. However, the supplied code chunk is a narrow machine learning component for generating pose motion from audio input. It processes mel-spectrogram features, predicts pose trajectories, and supports inference over frame sequences. There is no evidence here of conversational logic, virtual companion behavior, selfie generation, call handling, messaging, or user interaction features. While this model could be a supporting subcomponent in a video avatar system, the actual code’s primary purpose is materially different from the declared end-user description, so this is a description-behavior mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding
The supplied code chunk is a model component: a convolutional audio encoder that converts input audio sequences into embeddings. It contains no user-facing conversational logic, no image capture/selfie handling, no call/session management, and no virtual girlfriend behavior. While audio processing could be a supporting part of a broader avatar/video system, the declared description presents a full consumer-facing AI virtual girlfriend product with voice, selfies, and video calls, which is not accurately represented by this specific code chunk. Therefore, the description materially overstates and misrepresents the actual behavior shown here.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
该代码片段只实现了一个深度学习模型模块:包含编码器、解码器、重参数化采样,以及对音频特征和姿态数据的融合预测,输出的是 pose_motion_pred(姿态运动预测)。它没有任何与聊天、女友角色逻辑、语音通话、视频通话、自拍、摄像头访问、网络通信或用户交互相关的实现。从描述看,技能应是一个完整的 AI 虚拟女友应用功能;而从代码看,它只是视频/动画生成子系统中的音频到姿态模型。因此描述与实际代码行为存在明显且实质性的不匹配。

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The declared description presents an end-user AI companion application with multimodal interaction features. In contrast, the supplied code chunk is a standalone deep learning model definition (ResUnet) used in an audio2pose subsystem. It only defines convolutional layers, upsampling, skip connections, and a forward pass over tensors. There are no app-level features, no communication/media handling, no camera or microphone access logic, and no virtual girlfriend behavior in this snippet. This is a material description-behavior mismatch because the code’s primary purpose is model architecture implementation, not the declared user-facing functionality.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description presents an end-user AI virtual companion with voice, selfie, and video-call features. The supplied code chunk does not implement any conversational, voice, image capture, or video-calling functionality. Instead, it is a backend machine-learning data loading module for selecting datasets and constructing PyTorch DataLoaders, including distributed training behavior. This is a materially different primary purpose, so the description does not accurately represent the code.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description promises an end-user AI virtual girlfriend product with interactive features such as voice, selfies, and video calls. However, the supplied code does not implement any conversational agent, audio processing, camera handling, networking, or video calling behavior. Instead, it provides internal machine learning dataset infrastructure and affine transform helpers for images and facial landmarks, consistent with face animation or computer vision preprocessing. While such code could be a supporting component inside a larger avatar/video system, this specific chunk’s actual purpose is materially different from the declared feature-level description, so it should be flagged as a mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
声明描述的是一个面向终端用户的 AI 虚拟女友产品,核心能力应包括语音交互、图像/自拍生成或处理、视频通话等。给出的代码却是 SadTalker/Deep3DFaceRecon 相关的数据集类,职责仅限于从文件列表中读取 mask、对应图片和 landmarks,执行人脸对齐、数据增强、归一化矩阵估计,并输出供模型训练使用的张量数据。这属于底层训练数据处理组件,与“AI 虚拟女友”产品描述在主要用途上明显不一致。虽然该模块可能属于某个更大的视频人脸项目的一部分,但就此代码片段本身而言,并未体现所宣称的语音、自拍或视频通话能力,因此应判定为描述与行为不匹配。

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description describes an end-user AI virtual girlfriend application with multimodal interaction features. The supplied code does not implement any such functionality. Instead, it is a generic dataset template for a face3d/video ML component, intended for developers to customize data loading. It contains no communication features, no image capture/selfie handling, no audio processing, and no video call logic. This is a clear description-behavior mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
声明描述的是面向终端用户的陪伴/互动型产品能力,但提供的代码片段并未实现聊天、语音交互、拍照自拍或视频通话逻辑。相反,它执行的是离线视频处理:读取指定目录下的视频文件,逐帧做人脸关键点检测,并将关键点保存到输出目录。这属于人脸分析/动画预处理组件,和“AI 虚拟女友”的声明性功能存在明显偏差。虽然该代码可能是更大视频生成系统中的底层模块,但就该代码片段本身而言,其实际行为与声明用途不一致,且包含未声明的人脸特征提取与批量文件处理能力。

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The declared description presents an end-user conversational/companion product with voice, selfie, and video-call features. The supplied code does not implement any virtual girlfriend, voice interaction, selfie generation, or video calling. Instead, it is a preprocessing utility for computer vision: it reads MP4 files from a directory, detects faces in each frame, extracts 68-point landmarks, and writes results to .txt files. While such functionality could be a supporting internal component of a larger avatar/video system, this chunk’s actual purpose is materially different from the declared user-facing description and includes undeclared capabilities related to face analysis and offline batch processing.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description promises a user-facing AI virtual girlfriend product with multimedia interaction features. The supplied code chunk does not implement any such capability; it only contains a package-level docstring describing configuration/option modules for training and testing in a face3d-related component. This is a materially different purpose from the declared description, so it should be flagged as a mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
该代码片段并未体现“AI 虚拟女友”的语音交互、自拍生成、视频通话或聊天陪伴等核心能力。相反,它是一个机器学习/三维人脸重建相关项目中的基础 options 配置模块,主要负责 argparse 参数定义、环境变量设置(CUDA_VISIBLE_DEVICES)、从模型和数据集模块扩展参数、推断是否继续训练、以及将选项保存到 checkpoints 目录。虽然该模块可能属于某个视频头像/数字人系统的底层组件,但就此代码本身来看,其主要用途与声明的终端产品描述存在明显偏差,属于 materially different primary purpose。

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
声明描述的是一个完整的 AI 虚拟女友产品能力集合,而给定代码只是一个推理参数配置类,负责为测试/推理流程注册命令行参数,并设置 isTrain=False。它没有展示任何与虚拟女友对话、语音处理、摄像头自拍、实时视频通话或用户交互相关的实现。虽然该代码可能属于更大视频生成项目的一部分,但就该片段本身而言,其行为与声明的主要用途存在明显差异,因此应判定为描述与代码行为不匹配。