Back to skill

Security audit

AI Image & Video Toolkit — Free Upscale, Face Enhance, BG Remove & Generation

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real image and video toolkit, but it needs Review because it combines cloud media upload, unverified runtime downloads, broad automatic dependencies, and face-swap/NSFW features without enough safeguards.

Install only if you are comfortable with first-run package/model downloads, local model caches, and sending prompts or reference images to Atlas Cloud for cloud generation. Avoid using it on private or sensitive faces/media unless you trust the provider and dependencies; face-swap and NSFW use should require clear authorization and stronger safeguards.

Vulnerability Patterns
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (3)

T08 · Insecure Dependencies

Warning
Location
scripts/ai-generate.py:1
Finding

Automatically Installed Dependencies Are Not Reproducibly Pinned

Content
View full analysis
=3.10" # dependencies = [ # "requests>=2.31", # "pillow>=10.0", # ] # /// ``` Other scripts use the same automatically resolved pattern, including broad constraints such as: ```python # dependencies = [ # "ultralytics>=8.3.0", # "opencv-python-headless>=4.8", # "numpy<2", # "pillow>=10.0", # "torch>=2.0", # "torchvision>=0.15", # ] ``` The automatic installation behavior is explicitly documented at `SKILL.md:43`: ```markdown All scripts use `uv run` for zero-setup execution — dependencies are automatically installed on first run. ``` ### Technical Analysis The scripts rely on PEP 723 inline dependency metadata and execute through `uv run`. Dependencies use lower-bound or broad range constraints rather than exact reviewed versions. The project contains no audited lockfile or package hashes. Consequently, the effective code executed by a command can change after the Skill itself has been reviewed. A newly published version satisfying a constraint such as `requests>=2.31` or `ultralytics>=8.3.0` may be selected on a clean installation. Third-party package installation and import can execute code with the same privileges as the user invoking the Skill. This is a supply-chain weakness rather than evidence that the currently named packages are malicious. ### Attack Path 1. An allowed dependency release or its package-distribution account is compromised. 2. The attacker publishes a malicious version that satisfies one of the broad dependency ...[truncated 796 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
scripts/face-swap.py:29
Finding

Face-Swap Model Is Downloaded from a Mutable URL Without Integrity Verification

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/media-process.py:165
Finding

Predictable FFconcat Control File Allows Symlink Overwrite and Manifest Injection

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
Findings (24)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The documented behavior is materially broader than what is evidenced, and the stated requirement to use Atlas MCP discovery tools first is not enforced by the skill itself. This mismatch can mislead users or agent orchestrators about what the skill actually does, increasing the chance of unsafe invocation paths, unexpected networked behavior, or bypass of intended validation steps.

Content

No source excerpt is available for this finding.

YARA rule 'agent_skill_prompt_injection_hidden_instructions': Prompt injection or hidden instructions embedded in AI agent skill text [agent_skills]

High
Category
YARA Match
Confidence
80% confidence
Finding

YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

Content

Scanner excerpt · scripts/ai-generate.py (reported line 12)May include surrounding context.

python
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.10"
# dependencies = [
#   "requests>=2.31",
#   "pillow>=10.0",
# ]
# ///

"""
AI Image & Video Generation via Atlas Cloud API
Supports any model available on Atlas Cloud (300+ models)
AI agents should use Atlas Cloud MCP tools to search models before calling this script
Powered by Atlas Cloud (Gold Sponsor)
"""

import argparse
import os
import sys
import time
import json
import requests
from pathlib import Path


API_BASE = "https://api.atlascloud.ai/api/v1/model"


def get_api_key():
    key = os.environ.get("ATLAS_CLOUD_API_KEY") or os.environ.get("ATLASCLOUD_API_KEY")
    if not key:
        env_files = [".env"]
        for env_file in env_files:
            if os.path.exists(env_file):
                with open(env_file) as

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/ai-generate.py (reported line 32)May include surrounding context.

python
def get_api_key():
    key = os.environ.get("ATLAS_CLOUD_API_KEY") or os.environ.get("ATLASCLOUD_API_KEY")
    if not key:
        env_files = [".env"]
        for env_file in env_files:
            if os.path.exists(env_file):
                with open(env_file) as f:

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/ai-generate.py (reported line 48)May include surrounding context.

python
def get_api_key():
    key = os.environ.get("ATLAS_CLOUD_API_KEY") or os.environ.get("ATLASCLOUD_API_KEY")
    if not key:
        env_files = [".env"]
        for env_file in env_files:
            if os.path.exists(env_file):
                with open(env_file) as f:

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/ai-generate.py (reported line 48)May include surrounding context.

python
print()
        print("Setup (choose one):")
        print("  1. Environment: export ATLAS_CLOUD_API_KEY=your_key")
        print("  2. .env file:   echo 'ATLAS_CLOUD_API_KEY=your_key' >> .env")
        print()
        print("Get your free API key: https://www.atlascloud.ai?utm_source=github&utm_campaign=free-image-and-video-generation-skill")
        print("New users get free credits, no credit card required")

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill advertises capabilities that require shell execution, network access, environment-variable access, and file writes, but it does not declare any explicit tool scope such as allowed-tools or permissions. In an agent environment, that omission weakens least-privilege controls and can let the skill be invoked with broader authority than reviewers or policy engines expect.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger guidance is extremely broad ('process, enhance, upscale, generate, or edit images/videos'), which overlaps with common user requests and can cause the skill to activate in many routine contexts. Overbroad triggering increases the chance that an agent routes unrelated or sensitive media tasks into a powerful skill with shell, file, and network capabilities without sufficient user intent confirmation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

Face-swap functionality enables realistic identity manipulation, but the skill presents it as a routine feature without any warning, consent requirement, or abuse safeguards. In context, this makes the skill more dangerous because it directly supports deceptive or privacy-invasive media editing that can be used for impersonation, harassment, or non-consensual intimate-content creation.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/ai-generate.py (reported line 26)May include surrounding context.

python
from pathlib import Path


API_BASE = "https://api.atlascloud.ai/api/v1/model"


def get_api_key():

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/ai-generate.py (reported line 251)May include surrounding context.

python
from pathlib import Path


API_BASE = "https://api.atlascloud.ai/api/v1/model"


def get_api_key():

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The script transmits user prompts, model selections, optional negative prompts, and potentially full reference images to a third-party cloud service. In the context of an agent skill that may process user-provided media, this is a real privacy and data-governance risk if users are unaware that local content is being uploaded externally.

Content

Scanner excerpt · scripts/ai-generate.py (reported line 59)May include surrounding context.

python
def submit_request(endpoint, payload, api_key):
    url = f"{API_BASE}/{endpoint}"
    headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
    resp = requests.post(url, json=payload, headers=headers, timeout=30)
    if resp.status_code != 200:
        print(f"API error ({resp.status_code}): {resp.text[:500]}")
        sys.exit(1)

Tainted flow: 'url' from requests.post (line 75, network input) → requests.post (network output)

Medium
Category
Data Flow
Confidence
65% confidence
Finding

Data from a source is assigned to a variable that is later passed to a sink, creating a variable-mediated taint flow.

Content

Scanner excerpt · scripts/ai-generate.py (reported line 59)May include surrounding context.

python
def submit_request(endpoint, payload, api_key):
    url = f"{API_BASE}/{endpoint}"
    headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
    resp = requests.post(url, json=payload, headers=headers, timeout=30)
    if resp.status_code != 200:
        print(f"API error ({resp.status_code}): {resp.text[:500]}")
        sys.exit(1)

Tainted flow: 'url' from requests.post (line 238, network input) → requests.get (network output)

Medium
Category
Data Flow
Confidence
65% confidence
Finding

Data from a source is assigned to a variable that is later passed to a sink, creating a variable-mediated taint flow.

Content

Scanner excerpt · scripts/ai-generate.py (reported line 80)May include surrounding context.

python
start_time = time.time()
    while time.time() - start_time < max_wait:
        try:
            resp = requests.get(url, headers=headers, timeout=30)
        except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
            time.sleep(3)
            continue

Tainted flow: 'url' from requests.post (line 75, network input) → requests.get (network output)

Medium
Category
Data Flow
Confidence
88% confidence
Finding

The script downloads arbitrary URLs returned by the remote API without validating scheme, host, redirect behavior, or content size. If the upstream service is compromised or malicious, this can turn the client into a server-side fetcher and force downloads of unexpected or very large content, causing network exposure or disk exhaustion.

Content

Scanner excerpt · scripts/ai-generate.py (reported line 103)May include surrounding context.

python
def download_file(url, output_path):
    resp = requests.get(url, stream=True, timeout=60)
    resp.raise_for_status()
    with open(output_path, "wb") as f:
        for chunk in resp.iter_content(chunk_size=8192):

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This Python file contains natural-language comments in Chinese such as '构建请求参数,直接透传用户指定的参数' and '根据用户传入的参数动态添加' without offering any language choice. That violates the language/locale policy criterion because the skill embeds a fixed language rather than accommodating user opt-in or documenting a justified locale constraint.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The script is described as a local face-swap tool, but it silently performs a runtime download of a model from Hugging Face if the file is missing. Undeclared network access expands the trust boundary, leaks usage metadata to a third party, and introduces supply-chain risk because execution now depends on remote content that may change or become unavailable.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The script reaches out at runtime to a third-party model host even though the documented behavior suggests local-only processing. In this skill context, that mismatch is more concerning because users may select the tool specifically to avoid cloud interaction for privacy-sensitive face imagery, yet the script still initiates external network access.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · scripts/media-process.py (reported line 29)May include surrounding context.

python
print("Error: FFmpeg not found")
        print("Install:")
        print("  macOS:   brew install ffmpeg")
        print("  Ubuntu:  sudo apt install ffmpeg")
        print("  Windows: winget install ffmpeg")
        sys.exit(1)

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/media-process.py (reported line 38)May include surrounding context.

python
cmd = ["ffmpeg", "-y"] + args
    if desc:
        print(f"  {desc}")
    result = subprocess.run(cmd, capture_output=True, text=True)
    if result.returncode != 0:
        print(f"  FFmpeg error: {result.stderr[:500]}")
        return False

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/media-process.py (reported line 48)May include surrounding context.

python
cmd = ["ffmpeg", "-y"] + args
    if desc:
        print(f"  {desc}")
    result = subprocess.run(cmd, capture_output=True, text=True)
    if result.returncode != 0:
        print(f"  FFmpeg error: {result.stderr[:500]}")
        return False

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The docstring instructs AI agents to search models via Atlas Cloud MCP tools before using this script. Yet the code later adds a models subcommand that directly queries Atlas Cloud for available models, creating an intent/documentation mismatch about the expected usage path.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The manifest describes this skill as an image and video processing/generation toolkit and specifically says cloud generation should use Atlas Cloud MCP tools to find model IDs and parameter schemas before invoking this script. However, this script also implements its own models discovery command and allows filtering for text and audio model types, which exceeds the described image/video-focused purpose.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The script performs a file write via cv2.imwrite to a user-specified or default output path. Although it prints the saved path afterward, there is no prior warning, confirmation, or docstring/comment disclosing that it will create files under ./output or overwrite an explicitly provided path.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

The merge operation always writes to a predictable internal path, ./output/.merge_list.txt, and later deletes it. In multi-user or concurrent environments, this can cause clobbering of another process's file, race conditions, or accidental deletion if the path is replaced with a symlink, especially since the tool operates on filesystem paths supplied at runtime.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.