Back to skill

Security audit

gen-hot-video

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it claims, but it can upload private videos to long-lived public URLs and exposes API keys in command examples without requiring clear user confirmation.

Review before installing. Use this only with media you are authorized to upload and comfortable making accessible through a long-lived public URL. Avoid confidential, personal, regulated, unreleased, or copyrighted videos unless you have permission and understand the retention risk. Prefer user-controlled hosting or expiring private links if available, and avoid passing real API keys directly in shell commands or logs.

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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:169
Finding

Permanent Unsigned Public Exposure of Uploaded Videos

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:199
Finding

API Secret Exposed Through Command-Line Arguments and Shell History

Content
View full analysis
" \ --max-time 300 \ -F "file=@C:/path/to/reference.mp4" curl -X POST "https://www.flyelep.cn/prod-api/poster-design/api/v1/file/upload" \ -H "secretKey: " \ --max-time 300 \ -F "file=@./reference.mp4" ``` The same command-line header pattern is repeated for task creation and result polling: ```bash curl -X POST "https://www.flyelep.cn/prod-api/poster-design/api/v1/aiTool/generateHotVideo" \ -H "Content-Type: application/json; charset=utf-8" \ -H "secretKey: " \ --max-time 120 \ --data-binary '' curl -X POST "https://www.flyelep.cn/prod-api/poster-design/api/v1/poster/queryTaskResult" \ -H "Content-Type: application/json; charset=utf-8" \ -H "secretKey: " \ --max-time 30 \ --data-binary '' ``` ### Technical Analysis The skill instructs the agent to interpolate the user's real API secret directly into a `curl` command-line argument. Although the repository contains only placeholders and no hardcoded credential, actual execution would place the supplied secret in process arguments. Depending on the operating system, shell, agent runtime, and logging configuration, command-line arguments can be exposed through: - Shell command history. - Process inspection utilities and process-monitoring APIs. - Agent execution traces or tool-call logs. - Terminal recording and command auditing. - CI/CD logs or centralized observability systems. - Error reports that reproduce the complete command. The temporary JSON body does not contain the API key, but that does not mitigate exposure because the credential remains embedded in the `-H` argument. ### Attack P ...[truncated 1435 chars]
Remediation
View remediation
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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The trigger condition is broad ('when the user wants to replicate hot videos or imitate reference style') and does not define exclusions such as copyright-sensitive, privacy-sensitive, or unauthorized impersonation scenarios. This can cause the skill to activate in risky contexts and facilitate policy-violating or abusive media generation without an explicit gating step.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The upload section states that uploaded files become public via a permanent direct URL ('永久有效、不带签名') but does not clearly warn users, before upload, that their videos and generated result URLs may remain remotely accessible. This creates a meaningful risk of unintended disclosure of proprietary, personal, or sensitive media if users assume transient or private processing.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest frames this as a video-generation API skill, but the file also instructs using curl commands and local temporary-file creation/deletion to perform uploads and requests. Spawning shell commands and manipulating local files are not inherently required by the declared end-user purpose, especially since the skill is described as an HTTP API calling skill rather than a shell-execution helper.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

The skill instructs uploading user-provided local video files to an external third-party service, which is a real external data transmission event. In this context it is expected functionality, but it is still security-relevant because the content may be sensitive and the same document indicates the resulting URLs are publicly accessible and long-lived.

Content

Scanner excerpt · SKILL.md (reported line 198)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 300 -F "file=@C:/path/to/reference.mp4"

# macOS/Linux