Back to skill

Security audit

Skill Tiktok Ads Video

Security checks for vulnerabilities and agentic risk

Overview

This is a local video-captioning skill with some documentation and dependency-hygiene issues, but no evidence of hidden data access, exfiltration, persistence, or destructive behavior.

Install only if you are comfortable running a local Python video-processing script that resolves third-party packages. For sensitive environments, use a locked dependency environment or sandbox. Also note that the current script is narrower than the README: it does not actually mix background audio or consume the documented captions JSON, and its ad copy includes UAE/AED-specific text.

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
scripts/overlay.py:3
Finding
Unpinned Runtime Dependencies Allow Mutable Supply-Chain Code Execution## Vulnerability Details **File Location**: `scripts/overlay.py:3-5` **Additional Location**: `SKILL.md:17`, `SKILL.md:49` **Vulnerability Type**: Unpinned third-party runtime dependencies **Risk Level**: Medium ### Vulnerable Code ```python # /// script # requires-python = ">=3.10" # dependencies = ["moviepy>=2.0", "pillow>=10.0", "numpy"] # /// ``` The documented execution commands also resolve dependencies dynamically: ```bash uv run --with moviepy --with pillow scripts/overlay.py \ --video base.mp4 \ --output final.mp4 \ --product rain_cloud \ --style subtitle_talk ``` ### Technical Analysis The script declares mutable dependency ranges for `moviepy` and `pillow`, while `numpy` has no version constraint. The documented `uv run --with` workflow can resolve and install packages at execution time. The project does not include a reviewed lockfile, exact package versions, or package hashes. Consequently, the code executed by the Skill can change even when the audited project files remain unchanged. If an allowed future dependency release or its distribution account is compromised, malicious package initialization code may execute when the dependency is installed or imported. Broad constraints can also introduce incompatible releases, although compatibility failures alone are a reliability concern rather than a security vulnerability. ### Attack Path 1. An attacker compromises an upstream dependency release or its package-publishing account. 2. The attacker publishes a malicious version satisfying the declared constraints, such as a later `moviepy` or `pillow` release, or any selected `numpy` version. 3. A user follows the documented `uv run --with moviepy --with pillow` execution workflow in an environment without a previously verified, immutable resolution. 4. `uv` resolves and installs the attacker-controlled package version. 5. Malicious package code executes during installation or Python import. 6. The payload runs with the privileges and ...[truncated 898 chars]
Remediation
## Remediation Suggestions 1. Replace broad dependency ranges with exact, reviewed versions for every direct dependency, including `numpy`. 2. Generate and commit a `uv` lockfile containing the complete transitive dependency graph. 3. Require execution in locked or frozen mode so dependency resolution fails rather than silently selecting newer versions. 4. Use hash verification for downloaded distributions where supported. 5. Restrict package resolution to an explicitly configured, trusted registry and disable unintended supplemental indexes to reduce dependency-confusion exposure. 6. Update the documented commands so they use the project's locked environment instead of unconstrained `--with moviepy --with pillow` resolution. 7. Perform dependency updates through a controlled review process that includes vulnerability scanning, provenance checks, and testing before regenerating the lockfile. 8. Run video processing in a sandbox or container with minimal filesystem access, no unnecessary credentials, and restricted network access to reduce the impact of a compromised dependency.
Vulnerability Patterns
  • 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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (2)

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding
The code broadly matches the core idea of creating TikTok-style ad videos with animated caption overlays on a base MP4 using built-in presets. It includes multiple overlay styles, timing logic, CTA pills, and video export. However, the description claims it 'mixes background audio,' while the code explicitly preserves native audio and performs no background music loading, mixing, or audio composition. Also, while the description says no captions JSON is needed due to product presets, the implementation is narrower than implied: it only supports three hardcoded product templates and no general caption input path. The primary mismatch is the undeclared absence of background audio mixing, which is a material part of the declared purpose.

Natural-Language Policy Violations

Low
Confidence
91% confidence
Finding
This JSON content includes region-specific natural language such as the UAE currency and delivery area ('149 AED' and 'Free delivery UAE'). Under the policy rule for natural-language locale constraints, this forces a specific locale/region in the generated content without any opt-in or documented justification in the file itself.

Static analysis

No suspicious patterns detected.