AI Image Generator & Splitter

PassAudited by VirusTotal on May 10, 2026.

Overview

Type: OpenClaw Skill Name: banana-v2 Version: 1.1.0 The skill contains multiple critical security vulnerabilities that could be exploited for Remote Code Execution (RCE) and arbitrary file exfiltration. Specifically, `server/index.js` uses `child_process.exec` on unsanitized user input in the `/api/open-folder` route, allowing for command injection. Additionally, `server/services/upload.js` implements a feature that reads arbitrary local files via `fs.readFileSync` and uploads them to a remote endpoint (platform.acedata.cloud) without path validation. While these functions support the tool's stated purpose of managing images and using the AceData API, the lack of security controls makes the skill highly dangerous if the AI agent is prompted to access sensitive system files or execute malicious commands.

Findings (0)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

If the local service is reachable or misused, files from arbitrary local paths could be sent to the external upload service, not just images the user intentionally selected.

Why it was flagged

The upload service is not limited to browser-selected images; it accepts local absolute paths, reads the file from disk, and uploads the content to the configured provider using a platform token.

Skill content
支持多种输入格式... 2. 本地绝对路径 - 从硬盘读取文件上传 ... const buffer = fs.readFileSync(filePath); ... axios.post(config.server.upload_url, formData, { headers: { 'Authorization': `Bearer ${platformToken}`
Recommendation

Restrict uploads to explicit user-selected image files, validate MIME type and extension, block arbitrary absolute paths by default, and require a clear confirmation before any local file is uploaded.

ConcernMedium Confidence
ASI05: Unexpected Code Execution
What this means

A crafted request to the local service may be able to trigger operating-system command execution behavior, especially if command arguments are not safely escaped.

Why it was flagged

The open-folder endpoint takes a path from the HTTP request and the static scan shows it reaches child_process.exec, creating shell-execution risk around a user-controlled path.

Skill content
app.post('/api/open-folder', (req, res) => { ... const { path: folderPath } = req.body; ... fs.existsSync(folderPath) ... exec(command, (error) => {
Recommendation

Avoid shell exec for opening folders; use safer spawn/execFile APIs with argument arrays, restrict paths to the app’s generated image directory, and require local-only authenticated access.

What this means

Provider tokens can remain available to later requests while the server runs and may appear in local logs, increasing the impact of any misuse of the local API.

Why it was flagged

The service persists a request-supplied platform token in process.env and logs the full upload request object, which may include credentials or file data.

Skill content
const platformToken = data.platform_token || process.env.PLATFORM_TOKEN; ... if (data.platform_token) { process.env.PLATFORM_TOKEN = data.platform_token; } ... console.log(data)
Recommendation

Do not log request bodies containing tokens, store credentials in a scoped secret store instead of process.env, and clear or isolate credentials per user/session.

ConcernMedium Confidence
ASI05: Unexpected Code Execution
What this means

If attacker-controlled script text can enter the loaded UI content, it could run in the browser context and potentially access locally stored API keys.

Why it was flagged

The frontend dynamically executes text from the DOM, which is not necessary for the stated image-generation purpose and can magnify any HTML/script injection issue.

Skill content
eval($(this).text());
Recommendation

Remove eval and load trusted scripts through static files or explicit module imports; avoid executing script text extracted from HTML.

What this means

Installing later may pull dependency versions that were not the exact versions reviewed here.

Why it was flagged

The skill depends on standard Node packages for its purpose, but caret ranges and no included lockfile mean npm install may resolve different package versions over time.

Skill content
"dependencies": { "axios": "^1.13.6", "cors": "^2.8.6", "express": "^5.2.1", "form-data": "^4.0.0", "sharp": "^0.34.5", "sqlite3": "^6.0.1" }
Recommendation

Use a lockfile or pinned dependency versions and install only from trusted package registries.