Back to skill

Security audit

Nano Banana Cut 图片生成切割,用于短视频创作,解决角色一致性问题和故事叙事

Security checks across malware telemetry and agentic risk

Overview

This is a real image-generation and cutting tool, but its local web server exposes broad unauthenticated file, admin, credential, and shutdown controls.

Review before installing. Run it only on a trusted local machine, keep the server bound to localhost and away from untrusted networks, use limited AceData credentials, and avoid sensitive images or prompts until authentication/CSRF checks are added, arbitrary file serving is removed, path handling is confined to an app workspace, and secrets are protected.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (16)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
cmd.extend(['-out', out])
        
        # 执行裁剪命令
        result = subprocess.run(cmd, capture_output=True, text=True, encoding='utf-8')
        
        if result.returncode == 0:
            return jsonify({
Confidence
95% confidence
Finding
result = subprocess.run(cmd, capture_output=True, text=True, encoding='utf-8')

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

Medium
Category
Data Flow
Content
ext = 'png'
                        main_path = os.path.join(save_dir, f'main.{ext}')
                        
                        img_response = requests.get(image_url, stream=True, timeout=60)
                        img_response.raise_for_status()
                        with open(main_path, 'wb') as f:
                            for chunk in img_response.iter_content(chunk_size=8192):
Confidence
97% confidence
Finding
img_response = requests.get(image_url, stream=True, timeout=60)

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

Medium
Category
Data Flow
Content
ext = 'png'
        main_path = os.path.join(save_dir, f'main.{ext}')
        
        img_response = requests.get(image_url, stream=True, timeout=60)
        img_response.raise_for_status()
        with open(main_path, 'wb') as f:
            for chunk in img_response.iter_content(chunk_size=8192):
Confidence
92% confidence
Finding
img_response = requests.get(image_url, stream=True, timeout=60)

Tainted flow: 'files' from open (line 74, file read) → requests.post (network output)

High
Category
Data Flow
Content
files = {
            "file": open(file_path, "rb")
        }
        response = requests.post(UPLOAD_URL, headers=headers, files=files, timeout=60)
        response.raise_for_status()
        result = response.json()
        url = result.get('url')
Confidence
89% confidence
Finding
response = requests.post(UPLOAD_URL, headers=headers, files=files, timeout=60)

Lp3

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding
The documentation describes capabilities to read/write local files, access environment-stored secrets, invoke shell commands, and make network requests, but no permissions are declared. This creates a transparency and consent problem: operators may grant or run the skill without realizing it can touch sensitive files, invoke local commands, and exfiltrate data over the network.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The documented behavior exceeds the stated purpose by exposing administrative and host-affecting operations such as opening local folders, shutting down the service, and potentially serving arbitrary absolute-path files. Those features materially increase risk because they can be abused for local file disclosure, service disruption, or unintended host interaction, especially if exposed over HTTP without strong access controls.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
The application exposes administrative endpoints that can open local folders on the host and terminate the server process, with no authentication or authorization visible in this file. In a network-accessible Flask app with CORS enabled globally, these routes provide direct remote operational control over the host process and desktop environment, which is far beyond an image-generation tool's justified scope.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
The service accepts arbitrary filesystem paths for image cutting and also serves arbitrary local files by mapping URL paths to absolute filesystem paths under '/'. This enables unauthorized access to host files and arbitrary processing of local content, which is highly dangerous and unjustified for the stated skill purpose.

Description-Behavior Mismatch

Medium
Confidence
94% confidence
Finding
The UI exposes a direct service shutdown action via `/api/shutdown`, which is outside the stated image-generation/cutting purpose and is a disruptive administrative capability. If this endpoint is reachable by an untrusted or low-privilege user, it enables denial of service by terminating the application on demand.

Description-Behavior Mismatch

Medium
Confidence
89% confidence
Finding
The page exposes administrative retry and delete operations through `/api/admin/retry/{id}` and `/api/admin/delete/{id}` even though the declared skill purpose is normal work management for image generation/cutting. If these endpoints are not tightly access-controlled, users may tamper with task records, erase evidence of failures, or trigger unintended backend processing.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The 'open folder' feature calls `/api/open-folder/{id}`, exposing a local file-system interaction capability that is not necessary for a typical end-user image web tool. Such functionality can leak host environment details, trigger unsafe local operations, or be abused to probe server-side file locations depending on backend implementation.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill instructs users to save API credentials into a local .env file but does not warn that the file contains secrets that must be protected from disclosure, backup leakage, or accidental inclusion in archives/repositories. In a tool that also performs file operations and packaging, undocumented secret-handling increases the chance of credential exposure and downstream account abuse.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The skill supports image upload and image-editing workflows that send user-provided images to third-party services, but the documentation does not clearly disclose that content leaves the local environment. This is dangerous because users may upload sensitive or proprietary images without informed consent, creating confidentiality and compliance risk.

Missing User Warnings

High
Confidence
93% confidence
Finding
The configuration endpoint allows runtime submission of API credentials and writes them directly to a .env file on disk, with no authentication visible. This creates an unauthorized secret-management surface: an attacker could overwrite service credentials, disrupt outbound requests, or implant their own tokens for abuse and persistence.

Missing User Warnings

High
Confidence
99% confidence
Finding
The /api/shutdown endpoint immediately terminates the process via os._exit(0) without any authentication, confirmation, or local-only restriction. Any reachable client can cause a trivial denial of service against the application.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The code uploads local file contents to a third-party service without any visible user-facing warning, consent flow, or disclosure in this component. In a tool that handles user images and arbitrary file paths, this increases the risk of accidental data exfiltration, especially if users assume processing is local.

VirusTotal

65/65 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.