Back to skill

Security audit

Video Analyzer

Security checks for vulnerabilities and agentic risk

Overview

This is a real video-analysis skill, but it makes misleading offline claims while performing default and optional network actions, including remote downloads with TLS checks disabled.

Install only if you are comfortable with a media tool that may contact GitHub, model hosts, video platforms, and user-provided URLs. Use --no-update-check in restricted environments, avoid sensitive/internal URLs, prefer local media files, and treat downloaded or untrusted videos as potentially resource-intensive.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (41)

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill documents capabilities that imply file read/write, shell execution, and network access, but it does not declare permissions or clearly scope those capabilities. This creates a trust and review gap: users may believe the tool is purely local or minimally privileged while it can download remote content, invoke ffmpeg/yt-dlp, and write artifacts to disk.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The documented purpose emphasizes a local analysis tool, but the behavior includes broader remote media retrieval, GitHub update checks, command generation, and log export that are not prominently captured in the top-level description. This mismatch can mislead users and downstream policy systems, causing unexpected data transmission, command production, or handling of untrusted remote inputs.

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
The document claims the tool is fully offline, yet other sections describe downloading models, retrieving remote URLs, and checking GitHub for updates. Contradictory security claims reduce informed consent and can cause users in restricted or sensitive environments to expose metadata or content unexpectedly.

Intent-Code Divergence

Medium
Confidence
96% confidence
Finding
The security section states that all processing stays local with no uploads, but the same document advertises remote URL fetching and automatic update checks. Even if uploads are not performed, outbound requests still disclose IP address, timing, and requested resources, so the claim is materially misleading.

Intent-Code Divergence

Medium
Confidence
94% confidence
Finding
The Apple GPU detection branch returns the subprocess result object instead of the expected info dictionary, and it also references info['total_gb'] even though that field does not exist in the local GPU info structure. This type/field mismatch can trigger crashes or inconsistent downstream decisions, potentially disabling safeguards such as correct resource limits and GPU selection in a tool that auto-tunes workload execution.

Description-Behavior Mismatch

Medium
Confidence
82% confidence
Finding
The skill is described as a local video/audio analysis utility, but this adapter silently fetches remote content from WeChat. That capability changes the trust boundary and can enable unintended network access, privacy leakage, policy bypass, or SSRF-like behavior in environments that expect local-only processing.

Context-Inappropriate Capability

Medium
Confidence
98% confidence
Finding
Disabling TLS certificate validation with --no-check-certificates allows man-in-the-middle interception or tampering of downloaded video data and metadata. In a tool that processes external media automatically, this can feed malicious or spoofed content into downstream pipelines and undermine authenticity guarantees.

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The module performs outbound network access to GitHub to check for updates, which conflicts with the skill’s positioning as a local-only video/audio analysis tool. Even though only version metadata is fetched, this creates an unexpected external communication path that can leak IP address, usage timing, and environment/network metadata, and may violate offline or privacy-sensitive deployment assumptions.

Description-Behavior Mismatch

Medium
Confidence
94% confidence
Finding
The skill is presented as a local-only video analysis tool, but it explicitly accepts HTTP URLs as input. That expands the trust boundary to remote content fetching, which can enable unexpected network access, privacy leakage, SSRF-like behavior in downstream components, or processing of untrusted remote media without clear disclosure.

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The automatic update check performs outbound network activity that is not obvious from a tool described as local analysis. Even if non-blocking, it can leak environment metadata or usage patterns and violates user expectations about offline/local-only operation.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
Platform link parsing and metadata extraction introduce additional network-facing behavior beyond simple local media analysis. This increases exposure to untrusted remote services, may fetch or process third-party content/metadata, and broadens the attack surface in a way not clearly aligned with the stated tool scope.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The documentation and banner characterize the tool as local-only while the code supports URL-based input. This mismatch is security-relevant because users may supply sensitive environments under the assumption that no network access occurs, when in fact remote retrieval may happen.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill describes automatic model downloads, remote video retrieval, and update checks without a prominent privacy or data-transmission warning near the primary usage instructions. Users may provide sensitive URLs or run the tool in environments where any outbound request is prohibited, creating privacy and compliance risk.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
Claiming the tool is fully offline while documenting network-dependent features without a prominent exception warning is misleading and undermines user trust. In security-sensitive contexts, this can result in unintended outbound connections and accidental handling of untrusted remote media.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The hardware probe collects detailed host metadata including platform node/hostname, machine type, OS release, CPU/GPU details, and memory characteristics without any visible user notice, minimization, or consent gate. In a local media-analysis skill this is more sensitive than necessary for basic tuning, and if logged, surfaced, or transmitted elsewhere it can aid fingerprinting and privacy compromise.

Missing User Warnings

Medium
Confidence
74% confidence
Finding
Resolving b23.tv short links performs an outbound network request automatically, which can disclose IP address, user agent, and usage patterns to a third party without explicit user awareness in this component. In an agent skill context, hidden network access is more sensitive because users may expect local analysis while the tool silently reaches external services.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
The download path creates files on disk and launches an external downloader to fetch remote content, but this file contains no explicit user-facing disclosure or consent gate. In an agent environment, silent file creation and network retrieval can violate least surprise and may expand risk if users pass untrusted links or run the tool in sensitive environments.

Missing User Warnings

Medium
Confidence
80% confidence
Finding
Metadata extraction triggers a remote fetch through yt-dlp and processes returned JSON without any user-facing indication in this file that remote access will occur. In a local-analysis skill, undisclosed outbound requests are more dangerous because they can leak usage metadata and surprise operators who expect purely offline processing.

External Transmission

Medium
Category
Data Exfiltration
Content
# GitHub 仓库信息(用于检查更新)
GITHUB_REPO = "njhskills/video-analyzer"
GITHUB_API_URL = f"https://api.github.com/repos/{GITHUB_REPO}/releases/latest"
GITHUB_TAGS_URL = f"https://api.github.com/repos/{GITHUB_REPO}/tags"

# 本地版本文件缓存
Confidence
91% confidence
Finding
The hard-coded GitHub API endpoint indicates intentional external transmission to a third party. In the context of a purportedly local analysis skill, this is security-relevant because it introduces undisclosed outbound connectivity and associated privacy, policy, and supply-chain trust concerns.

External Transmission

Medium
Category
Data Exfiltration
Content
# GitHub 仓库信息(用于检查更新)
GITHUB_REPO = "njhskills/video-analyzer"
GITHUB_API_URL = f"https://api.github.com/repos/{GITHUB_REPO}/releases/latest"
GITHUB_TAGS_URL = f"https://api.github.com/repos/{GITHUB_REPO}/tags"

# 本地版本文件缓存
CACHE_FILE = ".update_cache.json"
Confidence
91% confidence
Finding
The tags API endpoint is a second external transmission path used as fallback when release lookup fails. This broadens outbound behavior and reinforces that the component will contact GitHub automatically, which is risky in restricted, private, or air-gapped environments despite the limited data exchanged.

Unvalidated Output Injection

High
Category
Output Handling
Content
video_path
        ]
        
        result = subprocess.run(cmd, capture_output=True, text=True)
        if result.returncode != 0:
            error_msg = result.stderr or "未知错误"
            # 检查是否是文件损坏
Confidence
74% confidence
Finding
Although the command invocation itself is safely structured, the code trusts and parses ffprobe JSON output from an external binary operating on attacker-supplied media, with no timeout or size/resource controls. In a video-analysis skill that may process untrusted uploads, malformed media can trigger hangs, excessive resource consumption, or parser failures, creating a realistic denial-of-service surface.

Unvalidated Output Injection

High
Category
Output Handling
Content
output_path
        ]
        
        result = subprocess.run(cmd, capture_output=True)
        if result.returncode != 0:
            error_msg = result.stderr.decode() if result.stderr else "未知错误"
            if "Invalid data" in error_msg:
Confidence
77% confidence
Finding
This ffmpeg extraction path processes untrusted media without a timeout or resource limits and writes derived output to disk, which can be abused for denial of service via crafted files that consume CPU, disk, or hang the tool. In the context of a media-analysis skill handling arbitrary user videos/audio, external decoder invocation materially increases exposure to malicious file formats and ffmpeg parser bugs.

Unvalidated Output Injection

High
Category
Output Handling
Content
output_pattern
        ]
        
        result = subprocess.run(cmd, capture_output=True)
        if result.returncode != 0:
            error_msg = result.stderr.decode() if result.stderr else "未知错误"
            raise RuntimeError(f"帧提取失败: {error_msg}")
Confidence
77% confidence
Finding
Frame extraction can generate very large numbers of files and consume significant CPU and disk when pointed at long or malformed media, especially if fps is caller-controlled. Because this skill is explicitly built to analyze user-provided media, missing bounds and timeout controls make the external-tool usage meaningfully dangerous from a resource-exhaustion perspective.

Unvalidated Output Injection

High
Category
Output Handling
Content
output_path
            ]
            
            result = subprocess.run(cmd, capture_output=True)
            if result.returncode != 0:
                logger.warning(f"关键帧提取失败 (t={ts}s): {result.stderr.decode()}")
Confidence
72% confidence
Finding
Repeated ffmpeg invocations over a list of timestamps can amplify resource usage, and there is no validation of timestamp count/range or execution timeout. In a service that may accept attacker-influenced timestamp lists derived from prior analysis or user input, this can be abused to cause excessive processing or storage use.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# 安装命令: pip install -r requirements.txt

# === 核心依赖 ===
openai-whisper>=20231117
numpy>=1.24.0
PyYAML>=6.0
Pillow>=10.0.0
Confidence
94% confidence
Finding
Using a lower-bound specifier for openai-whisper allows future installs to resolve to unreviewed versions, which can introduce breaking changes or newly published malicious/compromised releases. In a media-processing skill that may be installed repeatedly across environments, this weakens supply-chain control and reproducibility.

Static analysis

Detected: suspicious.insecure_tls_verification

HTTPS certificate verification is disabled.

Warn
Code
suspicious.insecure_tls_verification
Location
core/input_handler.py:287