Back to skill

Security audit

Pixel Art Processing

Security checks for vulnerabilities and agentic risk

Overview

This image-processing skill needs Review because it can run local services from unverified sibling code, load third-party browser scripts, remove watermarks without guardrails, and overbroadly terminate local processes.

Install only if you are comfortable reviewing and isolating the operational pieces. Prefer using the local image-processing script or browser tool in a sandbox, do not run deploy.py unless you have verified the sibling backend directory, avoid processing private images through the CDN-backed browser page, and use watermark removal only for media you own or are authorized to modify.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Tool Hijacking and SpoofingModifies or replaces tools so legitimate-looking calls execute attacker logic
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
Findings (4)

T03 · Remote Payload Retrieval and Execution

Error
Location
scripts/browser_tools.html:365
Finding

Unverified Remote JavaScript Executes with Access to User-Selected Files

Content
View full analysis
``` The page also dynamically loads another executable dependency: ```javascript async function loadGifEnc() { return new Promise((resolve, reject) => { const script = document.createElement('script') script.src = 'https://cdn.jsdelivr.net/npm/gifenc@1.0.3/dist/gifenc.esm.min.js' script.onload = () => { window.GIFEncoder = window.GIFEnc.GIFEncoder window.quantize = window.GIFEnc.quantize window.applyPalette = window.GIFEnc.applyPalette resolve() } script.onerror = reject document.head.appendChild(script) }) } ``` ### Technical Analysis The browser tool loads and executes three JavaScript components directly from a third-party CDN. No Subresource Integrity hashes are specified, and the components are not distributed as reviewed local files. Although version strings are present in the URLs, the browser still trusts the response delivered by the CDN at runtime. If the CDN, package publisher, package artifact, DNS resolution, or delivery path is compromised, the returned JavaScript can differ from the code originally reviewed. These scripts execute in the same page context as the application code. They therefore have access to file objects, `FileReader` results, decoded image pixels, generated object URLs, and the document. The remote dependencies are necessary implementations of GIF and ZIP processing, but remote execution is not the minimum privilege required: the same libraries can be bundled locally. ### A ...[truncated 1184 chars]
Remediation
View remediation

T07 · Tool Hijacking and Spoofing

Error
Location
scripts/deploy.py:36
Finding

Deployment Script Executes Backend Code from an Unverified Sibling Directory

Content
View full analysis
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/deploy.py:257
Finding

Backend Stop Routine Can Terminate Unrelated Uvicorn Services

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
scripts/requirements.txt:8
Finding

Unpinned Python Dependencies Create Non-Reproducible Supply-Chain Exposure

Content
View full analysis
=0.104.0 uvicorn[standard]>=0.24.0 python-multipart>=0.0.6 pydantic>=2.5.0 redis>=5.0.0 rq>=1.15.0 ffmpeg-python>=0.2.0 rembg>=2.0.50 pillow>=10.0.0 python-magic-bin>=0.4.14;sys_platform=="win32" python-magic>=0.4.27;sys_platform!="win32" aiofiles>=23.2.0 httpx>=0.25.0 opencv-python-headless>=4.8.0 numpy>=1.24.0 ``` The file also begins with Python triple-quoted text rather than pip-compatible comments: ```text """ pixel-art-processing skill - Python dependencies 像素美术处理技能 - Python依赖 基于 FrameRonin: https://github.com/systemchester/FrameRonin """ ``` ### Technical Analysis Every dependency is specified using only a lower bound. A future installation may therefore resolve versions that did not exist when the Skill was audited, along with a changing set of transitive dependencies. No hashes are provided to verify downloaded distributions. Python package installation and subsequent imports can execute package-controlled code. A compromised publisher account, malicious future release, dependency takeover, or compromised transitive package could therefore introduce executable code into the deployment environment. The triple-quoted header is also not valid requirements-file comment syntax. Depending on pip behavior and version, it can be interpreted as invalid requirement content and make the documented installation procedure fail. This is primarily a reliability issue, but it encourages users to bypass or manually alter the intended dependency process. ### Attack Path 1. A listed dependency or one of its transitive dependencies publishes a compromised future version that still satisfies the lower-bound constraint. 2. A user follows the documented command `pip install -r requirements.txt`. 3. The resolver selects the compromised version because no upp ...[truncated 846 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
Findings (58)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The description presents the skill as an image-processing workflow, but the content also instructs the agent to deploy services, start workers, access localhost endpoints, and manage infrastructure components such as Redis and Docker. This mismatch is dangerous because users or orchestrators may grant or trigger the skill under a low-risk media-processing assumption while it performs much more powerful host and process operations.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The description presents the skill as an image-processing workflow, but the content also instructs the agent to deploy services, start workers, access localhost endpoints, and manage infrastructure components such as Redis and Docker. This mismatch is dangerous because users or orchestrators may grant or trigger the skill under a low-risk media-processing assumption while it performs much more powerful host and process operations.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill explicitly promotes watermark removal, including named-brand watermark removal, without any policy warning, limitation, or requirement to verify authorization. This is dangerous because watermark removal is frequently associated with copyright circumvention, provenance stripping, or misuse of third-party media, and the omission lowers friction for abusive use.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · references/api.md (reported line 113)May include surrounding context.

删除任务 / Delete Job

text
DELETE /jobs/{job_id}

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · references/api.md (reported line 174)May include surrounding context.

删除水印任务 / Delete Watermark Job

text
DELETE /watermark/{job_id}

Natural-Language Policy Violations

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The document explicitly instructs users to remove a third-party 'Gemini' watermark as a standard processing step, without any authorization, ownership check, or legitimate-rights constraint. This facilitates circumvention of provenance/branding markers and can enable misuse of third-party generated or licensed assets, making the skill materially more dangerous because watermark removal is embedded as the default workflow.

Content

No source excerpt is available for this finding.

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · scripts/browser_tools.html (reported line 7)May include surrounding context.

html
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>FrameRonin Browser Tools / 浏览器工具</title>
<!--
  pixel-art-processing skill - Browser Tools
  基于 FrameRonin: https://github.com/systemchester/FrameRonin

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · scripts/browser_tools.html (reported line 210)May include surrounding context.

html
<button class="tab-btn" data-tab="pixelate">像素化</button>
</div>

<!-- GIF ↔ Frames -->
<div class="panel active" id="panel-gif">
  <div class="tabs" style="margin-bottom:16px">
    <button class="tab-btn active" data-subtab="gif-split">GIF拆帧</button>

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · scripts/browser_tools.html (reported line 260)May include surrounding context.

html
</div>
</div>

<!-- Sprite Sheet 拆分 -->
<div class="panel" id="panel-spritesheet">
  <div class="info-box">上传Sprite Sheet大图,按布局拆分为帧序列</div>
  <div class="row">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · scripts/browser_tools.html (reported line 260)May include surrounding context.

html
</div>
</div>

<!-- Sprite Sheet 拆分 -->
<div class="panel" id="panel-spritesheet">
  <div class="info-box">上传Sprite Sheet大图,按布局拆分为帧序列</div>
  <div class="row">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · scripts/browser_tools.html (reported line 318)May include surrounding context.

html
</div>
</div>

<!-- 超级拆分 -->
<div class="panel" id="panel-super">
  <div class="info-box">
    按透明行/列智能切割图像,无需指定行列数。适用于Sprite Sheet行间距/列间距不一致的情况。

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · scripts/browser_tools.html (reported line 318)May include surrounding context.

html
</div>
</div>

<!-- 超级拆分 -->
<div class="panel" id="panel-super">
  <div class="info-box">
    按透明行/列智能切割图像,无需指定行列数。适用于Sprite Sheet行间距/列间距不一致的情况。

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
60% confidence
Finding

Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.

Content

Scanner excerpt · scripts/deploy.py (reported line 221)May include surrounding context.

python
return
    
    # 准备环境 / Prepare environment
    env = os.environ.copy()
    env["UPLOAD_DIR"] = str(SKILL_DIR / "workspace" / "uploads")
    env["OUTPUT_DIR"] = str(SKILL_DIR / "workspace" / "outputs")
    env["TEMP_DIR"] = str(SKILL_DIR / "workspace" / "temp")

Possible Typosquatting: 'uvicorn' resembles popular package 'gunicorn'

High
Category
Supply Chain
Confidence
70% confidence
Finding

Package name closely resembles a popular package, suggesting possible typosquatting. Attackers publish malicious packages with similar names to trick developers into installing them.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
85% confidence
Finding

The skill advertises capabilities that imply shell, network, file, and environment access, but it does not declare any explicit tool scope or permission boundary. In an agent ecosystem, this creates an unsafe default where a caller may invoke deployment and system-level actions that exceed the expected image-processing purpose, increasing the chance of unintended local command execution or file/system modification.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The trigger list is broad and includes common terms such as 'background removal', 'pixelate', 'sprite', and image-processing phrases in multiple languages, which can cause the skill to activate in contexts the user did not intend. Because the skill also includes deployment and local-service instructions, accidental activation raises the risk of unnecessary privileged actions or confusing the agent into selecting an overpowered skill.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This markdown file describes endpoints for creating, retrieving, downloading, and deleting watermark-removal jobs, but it provides no warning that removing watermarks may violate rights, terms of service, or require authorization. Because the described behavior can affect protected content and user compliance obligations, the skill description should include a clear user-facing warning.

Content

No source excerpt is available for this finding.

Ssd 4

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The workflow normalizes removal of another system's watermark as routine preprocessing ('原始图片 → 去Gemini水印 → ...'), which lowers friction for potentially unauthorized content laundering. In this skill context, that is more dangerous because the document is an operational guide for batch asset processing, so the instruction can be scaled across many images rather than appearing as a narrowly contextual exception.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The tool is presented as a local browser utility, but it imports executable JavaScript from third-party CDNs at runtime. That creates a supply-chain and privacy risk: opening the file can contact external servers and execute whatever code those domains serve, which is especially risky for a tool users may trust with local images and GIFs.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

External CDN script loading happens without any visible notice to the user, so users may reasonably believe the tool operates fully locally. This weakens informed consent and can expose metadata such as IP address, timing, and possibly usage context to third parties whenever the HTML is opened.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The code dynamically loads an additional remote script for GIF encoding during use, extending the same supply-chain risk to a just-in-time path that may be less visible during review. This allows external code execution in the user's browser at the moment they process files, despite the tool's stated local/offline workflow.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The dynamic fetch of gifenc occurs silently when the GIF creation feature is used, so the network behavior is hidden until a specific workflow is triggered. That lack of disclosure increases trust risk because users cannot make an informed decision before processing local content.

Content

No source excerpt is available for this finding.

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/deploy.py (reported line 65)May include surrounding context.

python
def run_cmd(cmd: list[str], cwd: Path | None = None, capture: bool = True, timeout: int = 30) -> subprocess.CompletedProcess:
    """执行命令 / Run command"""
    kwargs = {"cwd": cwd or BACKEND_DIR, "capture_output": capture, "text": True, "timeout": timeout}
    return subprocess.run(cmd, **kwargs)


def load_state() -> dict:

Tainted flow: 'cmd' from os.getenv (line 283, credential/environment) → subprocess.run (code execution)

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/deploy.py (reported line 65)May include surrounding context.

python
def run_cmd(cmd: list[str], cwd: Path | None = None, capture: bool = True, timeout: int = 30) -> subprocess.CompletedProcess:
    """执行命令 / Run command"""
    kwargs = {"cwd": cwd or BACKEND_DIR, "capture_output": capture, "text": True, "timeout": timeout}
    return subprocess.run(cmd, **kwargs)


def load_state() -> dict:

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/deploy.py (reported line 91)May include surrounding context.

python
"""查找FFmpeg路径 / Find FFmpeg path"""
    for name in ["ffmpeg", "ffmpeg.exe", "C:\\workspace\\ffmpeg\\win\\ffmpeg.exe"]:
        try:
            result = subprocess.run(
                [name, "-version"], capture_output=True, timeout=5
            )
            if result.returncode == 0:

Static analysis

No suspicious patterns detected.