Back to skill

Security audit

Tom Video Understanding

Security checks for vulnerabilities and agentic risk

Overview

This video-analysis skill is mostly coherent, but it advertises local processing while allowing cloud LLM analysis of video-derived content without a clear opt-in warning.

Review carefully before installing if you plan to process private or regulated videos. Use it only with trusted package and model sources, avoid arbitrary mirrors, and treat cloud LLM summarization as opt-in: do not use remote analysis unless you are comfortable sending extracted transcript and frame information to that provider.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
README.md:9
Finding

Unpinned Third-Party Packages and Unverified AI Model Downloads

Content
View full analysis

Vulnerability Details

File Location: README.md:9-30; additional runtime model-loading guidance in SKILL.md:32-47
Vulnerability Type: T08: Insecure Dependencies
Risk Level: Medium

Vulnerable Code

bash
**Windows:**
1. Download Ollama from https://ollama.com/download
2. Install and verify: `ollama --version`

**Pull the model:**
```bash
ollama pull qwen3-vl:8b

macOS/Linux:

bash
brew install ollama  # or download from ollama.com
ollama pull qwen3-vl:8b

Audio Recognition - FunASR

Create conda environment:

bash
conda create -n asr-local python=3.11
conda activate asr-local
pip install funasr
text

The related model-loading instructions in `SKILL.md:32-47` are:

```bash
conda run -n asr-local python -c "
import os
os.environ['MODELSCOPE_CACHE'] = 'C:/Users/TOM/.cache/modelscope'
from funasr import AutoModel
model = AutoModel(
    model='iic/speech_seaco_paraformer_large_asr_nat-zh-cn-16k-common-vocab8404-pytorch',
    model_revision='v2.0.4',
    disable_update=True,
    ncpu=4
)
result = model.generate(input='AUDIO_PATH')
print(result)
"
bash
ollama run qwen3-vl:8b "Describe this image in detail: /path/to/frame.jpg"

The troubleshooting guidance in README.md:58-61 also permits changing the model source:

bash
**Model download slow:**
```bash
# Use a mirror if needed
OLLAMA_BASE_URL=https://example.com ollama pull qwen3-vl:8b
text

### Technical Analysis

The installation instructions use `pip install funasr` without an exact version, dependency lock file, or integrity hashes. Consequently, the installed FunASR version and its transitive dependency graph can change between installations. Python packages can execute package-controlled build or installation logic, so compromise of an upstream package, registry account, or dependency resolution process could result in code execution during installation or import.

The Ollama and ModelScope artifacts are also identified by mutable names or rev
...[truncated 2173 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin FunASR and all transitive dependencies to reviewed versions using a lock file.
  2. Use hash-verified installation, such as a requirements file containing exact versions and --hash entries, and install with pip install --require-hashes.
  3. Record the supported Python, Conda, Ollama, ffmpeg, and model-runtime versions to make installations reproducible.
  4. Pin AI models to immutable manifests or cryptographic digests where the relevant tooling supports them.
  5. Publish trusted SHA-256 checksums or signed provenance for downloaded model artifacts and document verification before first use.
  6. Restrict downloads to explicitly approved official registries. Remove the generic mirror recommendation or replace it with a documented, authenticated allowlist of trusted mirrors.
  7. Perform package and model retrieval in a least-privileged environment without administrator rights.
  8. Isolate video processing in a dedicated container, virtual machine, or restricted operating-system account with minimal file and network access.
  9. Scan locked dependencies for known vulnerabilities and review updates before changing pinned versions.
  10. Document that the initial model download requires network access and provide an offline installation procedure for security-sensitive deployments.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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 (7)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The instruction 'Use this skill when you need to understand the content of a video' is a very broad activation description for a markdown skill file. It does not define specific trigger phrases, scope limits, or exclusion conditions, which could cause the skill to be invoked for many general video-related requests without clear boundaries.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The note specifically treats paths containing Chinese characters as a special case and directs users to avoid them, which creates a locale/language handling restriction in the instructions. The file does not offer an alternative, user choice, or documented justification for this limitation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The workflow defines audio transcription as 'FunASR (local, Chinese speech recognition)', which implicitly fixes the speech-recognition language/tooling to Chinese. The skill does not indicate that users can choose another language workflow or that the limitation is region-specific and intentional.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill is described as a local video comprehension workflow, but it explicitly allows sending summary or analysis data to a cloud LLM API. That creates a trust-boundary violation because users may reasonably expect all extracted video, transcript, and frame-derived content to remain local. For sensitive videos, this can lead to unintended disclosure of private or regulated information.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation mentions cloud LLM use for summary or analysis without a user-facing warning that processed video-derived content may leave the local system. Since the skill handles transcripts and image descriptions extracted from videos, omission of this warning can cause silent disclosure of sensitive content to third-party services. This is especially problematic because the skill branding emphasizes local processing.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The note 'For Chinese audio, FunASR is preferred over Whisper' introduces a language-specific policy preference in the skill text. There is no corresponding user choice, multilingual guidance, or justification that this skill is intentionally limited to a Chinese-audio use case.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The manifest describes a 'Local video comprehension skill,' which implies processing stays local. However, the documentation states that FunASR models are downloaded automatically on first use and explicitly requires internet connectivity, which means the skill's operation is not purely self-contained/local in practice.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.