Back to skill

Security audit

ai-writing-assist

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Flyelep writing API helper, but it can upload user local images to permanent unsigned public URLs without a clear consent checkpoint.

Review before installing. Only use this skill with non-sensitive prompts and images you are comfortable sending to Flyelep. Do not provide confidential product images, personal photos, regulated data, credentials, or private documents unless the publisher adds explicit consent, retention, deletion, and access-control guarantees for uploads.

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:102
Finding

Local Images Are Uploaded to Permanently Public, Unsigned URLs Without Explicit Consent

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 102–113; related upload commands appear at lines 131–134
Vulnerability Type: Unsafe external file disclosure and indefinite public retention
Risk Level: Medium

Vulnerable Code Snippet

The following is an English rendering of the relevant instructions in SKILL.md:

markdown
## Local File Upload

When the user provides a local file path instead of a public direct URL,
upload the file to obtain a direct URL before calling the generation API.

- URL: POST https://www.flyelep.cn/prod-api/poster-design/api/v1/file/upload
- Request method: multipart/form-data
- The file field name is fixed as file
- Authentication: pass secretKey in the request header

Use data.fullPath from a successful response as the public direct URL,
which is permanently valid and does not contain a signature.

Related executable examples:

bash
curl.exe -X POST "https://www.flyelep.cn/prod-api/poster-design/api/v1/file/upload" -H "secretKey: YOUR_KEY" --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: YOUR_KEY" --max-time 120 -F "file=@./product.png"

Technical Analysis

The skill directs the agent to upload user-selected local images to a third-party service whenever a local path is supplied. The resulting data.fullPath value is explicitly described as a permanently valid, unsigned public URL.

An unsigned public URL acts as a bearerless resource: possession of the URL is sufficient to access the image, and no authentication or expiration is required. The instructions do not require the agent to:

  • Explain that the image will become publicly retrievable.
  • Obtain explicit informed consent before uploading.
  • Check whether the image contains confidential, personal, regulated, or proprietary information.
  • Apply access controls or a limited retention pe ...[truncated 1931 chars]
Remediation
View remediation

Remediation Suggestions

  1. Require explicit informed consent before every local-file upload. State the destination service, purpose, expected retention period, and access model.
  2. Do not describe or use permanent unsigned URLs as the default. Store uploads privately and return short-lived signed URLs with the minimum lifetime required for generation.
  3. Delete uploaded objects automatically after the generation request completes or after a short, documented retention period.
  4. Add a deletion endpoint or documented revocation workflow and provide the object identifier to the user.
  5. Warn users not to upload credentials, identity documents, confidential business files, regulated data, or images containing sensitive metadata.
  6. Require confirmation of the exact file path before reading or uploading it. Do not infer additional files or expand directories.
  7. Validate file type and size locally, strip unnecessary metadata where appropriate, and reject unsupported or unexpectedly sensitive files.
  8. Avoid printing or persistently logging returned public URLs. Redact them from diagnostics, transcripts, and error reports where possible.
  9. Document the third party's retention, geographic storage, privacy, deletion, and access-control policies.
  10. If private storage and reliable deletion cannot be provided, restrict the feature to user-supplied public URLs and disable automatic local-file uploads.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (8)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill describes uploading local files and obtaining permanent public direct links, but the warning is not prominent enough relative to the sensitivity of that action. Users could provide local images expecting transient processing, while the actual behavior exposes them via durable public URLs, creating significant privacy and data leakage risk.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The manifest description lacks clear invocation boundaries, so the skill may be selected for generic writing-related tasks without users understanding that a third-party service will be used. In the context of a skill that can send prompts and file references externally, ambiguous routing materially increases privacy and consent risk.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

L004-L005 以及全文说明均以中文规定技能用途和交互预期,且没有提供语言可选项或声明该技能仅面向特定中文区域用户。根据自然语言政策要求,若技能隐含强制特定语言而无用户选择或明确合理范围,属于语言/locale 约束问题。

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger description is broad enough to overlap with common everyday requests for brainstorming, prompt optimization, or copy generation. That ambiguity can cause the agent to invoke a third-party API in situations where a local response would suffice, unnecessarily transmitting user content outside the system.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The main API sends user-provided text and file URLs to an external service, but the skill does not provide a strong privacy notice or data-handling warning at the point of use. This can lead to unintentional disclosure of prompts, product plans, marketing drafts, or referenced media to a third party without meaningful user awareness.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill is presented as a writing-assistance tool, but it also instructs the agent to upload local user files to a third-party service and obtain public links. This expands the skill’s effective capability from text generation to external data transfer, increasing the risk of unintended disclosure because users may not expect local files to be transmitted and exposed when asking only for copywriting help.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The documented upload flow creates permanent public URLs for user-supplied files, which is a data-hosting behavior not obviously necessary for a writing-assist skill. If sensitive images or documents are uploaded, they may become publicly accessible indefinitely, creating confidentiality and privacy risks disproportionate to the stated purpose of the skill.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
80% confidence
Finding

The skill explicitly performs external transmission of local files to a remote endpoint, which is security-relevant in this context because the uploaded content is later represented as permanently accessible public URLs. External transmission is expected for an API skill, but here it is more dangerous because it involves local file exfiltration from the user environment in a skill whose primary purpose appears to be writing assistance.

Content

Scanner excerpt · SKILL.md (reported line 130)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