Back to skill

Security audit

async-free-creation

Security checks for vulnerabilities and agentic risk

Overview

The skill is purpose-aligned for Flyelep image generation, but uploading local images creates permanent unsigned public URLs without a clear user-facing consent or deletion control.

Install only if users understand that prompts, API keys, and reference images are sent to Flyelep. Do not use local images containing confidential, regulated, personal, or unreleased material unless you accept that uploaded files may remain accessible to anyone who gets the returned URL and may not be revocable.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:187
Finding

Local Images Are Uploaded as Permanent, Unauthenticated Public Objects

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 187–221
Vulnerability Type: Permanent public exposure of user-provided local files
Risk Level: Medium

Vulnerable Code Snippet

markdown
## 本地文件上传

用户提供的是本地文件路径而不是公网直链时,先把文件上传换取直链,再调用本接口。已安装 `file-upload` 技能时以该技能为准;未安装时按下面的说明直接调用上传接口。

- **URL**: `POST https://www.flyelep.cn/prod-api/poster-design/api/v1/file/upload`
- **请求方式**: `multipart/form-data`,文件字段名固定为 `file`,单次只能上传一个文件,多个文件并发调用多次
- **认证方式**: 请求头传 `secretKey`,与本技能使用同一个密钥
- **超时时间**: 图片建议 60-120 秒
- **不要手动设置 `Content-Type` 请求头**,让 HTTP 客户端自动生成带 boundary 的值,手写会导致服务端解析失败
- 图片仅支持 `bmp`、`gif`、`jpg`、`jpeg`、`png`,`webp` 需先转成 `png` 或 `jpg`;文件名必须带正确后缀,服务端靠它判断格式
- 原文件名不会出现在 URL 里,中文名、空格、特殊字符都能直接上传,不需要提前改名
- 上传不消耗算力,但服务端不做去重:同一个文件在一次任务里只上传一次,记下 `fullPath` 复用

成功响应取 `data.fullPath` 作为公网直链,永久有效、不带签名:

```json
{
  "code": 200,
  "msg": null,
  "data": {
    "relativePath": "cos_ai_agent/2026-08-11/3f2a9c1b7d84e6f5a012.png",
    "fullPath": "https://agent-1404002717.cos.ap-guangzhou.myqcloud.com/cos_ai_agent/2026-08-11/3f2a9c1b7d84e6f5a012.png",
    "serviceProvider": null
  }
}
bash
curl.exe -X POST "https://www.flyelep.cn/prod-api/poster-design/api/v1/file/upload" -H "secretKey: 你的密钥" --max-time 120 -F "file=@C:/path/to/product.png"

curl -X POST "https://www.flyelep.cn/prod-api/poster-design/api/v1/file/upload" -H "secretKey: 你的密钥" --max-time 120 -F "file=@./product.png"
text

### Technical Analysis

The skill instructs the agent to upload a user-selected local image to a third-party service whenever the image is not already available through a public URL. The returned object URL is explicitly described as permanently valid and unsigned. Consequently, possession of the URL is sufficient to retrieve the uploaded image without authentication.

The workflow does not require explicit, informed confirmation immediately before the upload. It also documents no expiration policy, deletion mechanism, revocation process, or authenticated a
...[truncated 1984 chars]
Remediation
View remediation

Remediation Suggestions

  1. Require explicit informed consent immediately before every local-file upload. State the destination service, the purpose of the transfer, and the expected retention and accessibility properties.
  2. Replace permanent public objects with private storage and short-lived signed URLs scoped to the minimum duration needed for image generation.
  3. Add a documented deletion endpoint or automatic expiration policy, and invoke deletion after the generation task completes.
  4. If the provider cannot support private or expiring objects, prominently warn users that the file will become accessible to anyone with the URL and may remain available indefinitely.
  5. Display and require confirmation of the exact local path before reading or uploading it to prevent accidental file selection.
  6. Advise users not to upload confidential, regulated, or personally sensitive images. Where feasible, detect and block clearly sensitive paths or content.
  7. Minimize propagation of returned URLs: do not print them unnecessarily, persist them in configuration, or include them in verbose logs.
  8. Strip unnecessary image metadata, such as EXIF location and device information, before upload when doing so does not interfere with the requested task.
  9. Document a revocation and incident-response procedure for cases where an uploaded URL is disclosed.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (3)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The trigger description is broad enough to match many ordinary image-generation requests, which can cause the skill to activate outside its intended scope. That increases the chance of unnecessary credential collection (secretKey) and unintended transmission of user prompts or image URLs to a third-party service.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
89% confidence
Finding

This skill instructs the agent to transmit user-supplied files, prompts, and an API secret to an external third-party service. Even though external transmission is the intended function of the skill, it still creates real data-exfiltration risk if the skill is invoked unintentionally, with sensitive local files, or without clear user consent about what leaves the environment.

Content

Scanner excerpt · SKILL.md (reported line 217)May include surrounding context.

判断成功只看 code,业务失败时 HTTP 状态码仍是 200,code 为 500 或 9999,原因在 msg 里。

bash
# Windows/PowerShell(用 curl.exe,PowerShell 里的 curl 是 Invoke-WebRequest 的别名)
curl.exe -X POST "https://www.flyelep.cn/prod-api/poster-design/api/v1/file/upload" -H "secretKey: 你的密钥" --max-time 120 -F "file=@C:/path/to/product.png"

# macOS/Linux

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The natural-language description is written as an instruction set entirely in Chinese and does not indicate that language should follow the user's preference or offer a locale choice. Under the policy, forcing a specific language or locale without opt-in is a reportable natural-language policy issue unless clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.