T09 · Insecure Skill Coding Practices
- Location
scripts/utils/validator.js:3- Finding
Unrestricted URL Fetching Enables SSRF and Internal Data Exfiltration
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill does what it advertises, but it can upload arbitrary local files and fetch arbitrary web URLs with weaker limits and disclosure than users should expect.
Review before installing. Use this only with videos you intentionally want to send to the GuaiKei service and its storage provider. Do not let untrusted pages, prompts, or collaborators choose the --file path or URL. Avoid sensitive local paths, private/internal URLs, and very large remote files until the publisher adds explicit confirmation, media validation, host restrictions, size limits, and accurate destination disclosure.
scripts/utils/validator.js:3Unrestricted URL Fetching Enables SSRF and Internal Data Exfiltration
scripts/utils/validator.js:11Arbitrary Readable Local Files Can Be Uploaded to Remote Storage
scripts/utils/helper.js:28Unbounded Remote Downloads Can Exhaust Local Disk Space
scripts/utils/upload.js:10API-Controlled Upload Destination Is Not Restricted to Trusted Storage Hosts
scripts/api/video.js:17Presign Requests Disclose Complete Local Filesystem Paths
The skill advertises processing arbitrary public video URLs and likely performs generic network download and local file write behavior to handle them. Without explicit restrictions on allowed domains, file size, storage paths, redirect handling, and protocol validation, this can create SSRF-like fetch abuse, unexpected internal network access in permissive runtimes, or disk/resource exhaustion from attacker-controlled URLs.
The skill advertises processing arbitrary public video URLs and likely performs generic network download and local file write behavior to handle them. Without explicit restrictions on allowed domains, file size, storage paths, redirect handling, and protocol validation, this can create SSRF-like fetch abuse, unexpected internal network access in permissive runtimes, or disk/resource exhaustion from attacker-controlled URLs.
The skill advertises processing arbitrary public video URLs and likely performs generic network download and local file write behavior to handle them. Without explicit restrictions on allowed domains, file size, storage paths, redirect handling, and protocol validation, this can create SSRF-like fetch abuse, unexpected internal network access in permissive runtimes, or disk/resource exhaustion from attacker-controlled URLs.
The skill advertises processing arbitrary public video URLs and likely performs generic network download and local file write behavior to handle them. Without explicit restrictions on allowed domains, file size, storage paths, redirect handling, and protocol validation, this can create SSRF-like fetch abuse, unexpected internal network access in permissive runtimes, or disk/resource exhaustion from attacker-controlled URLs.
The skill advertises processing arbitrary public video URLs and likely performs generic network download and local file write behavior to handle them. Without explicit restrictions on allowed domains, file size, storage paths, redirect handling, and protocol validation, this can create SSRF-like fetch abuse, unexpected internal network access in permissive runtimes, or disk/resource exhaustion from attacker-controlled URLs.
The README encourages users to submit local video files or public video links to a cloud-backed processing service, but it does not clearly warn at the point of use that content is transmitted to a remote third-party server for processing. This can mislead users into sending sensitive or regulated media under the assumption the tool operates locally, creating privacy, confidentiality, and compliance risk.
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.
4. 同时传入文件路径与任务ID,优先执行 `--id`,忽略 `--file`
5. 无自定义 prompt 时,默认完整转录视频全部文字
| 用户自然语言指令 | 自动生成命令 |
| -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| 视频提取 https://example.com/video.mp4 中的文字 | `node scripts/video2text/index.js --file "https://example.com/video.mp4"` |
| 把本地 /path/to/your/video.mp4 改成小红书风格的文案 | `node scripts/video2text/index.js --file "/path/to/your/video.mp4" --prompt "改写成小红书风格的文案"` |
Without declared permissions the skill's intent is opaque and cannot be validated.
The skill description is extremely broad ('handle all video-to-text needs') and overlaps with general content analysis and copywriting tasks. Overbroad activation increases the chance that an agent invokes this skill for ordinary requests and unnecessarily uploads local files or third-party URLs to an external service, causing unintended data disclosure and spend.
The manifest description is entirely in Chinese and frames the skill's use cases and outputs from a Chinese-language perspective, but does not indicate language choice or opt-in. For a generally scoped skill, this can amount to an implicit locale/language constraint without documenting user selection.
The guidance says to prioritize the skill whenever any matching intent appears, and the listed categories include broad writing and analysis scenarios. In an agentic environment, that can steer unrelated user requests into a networked third-party workflow, increasing privacy exposure, wrong-tool execution, and unnecessary token-billed operations.
Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.
当用户用自然语言下达指令时,按以下映射生成命令,保证识别与执行一致:
| 用户自然语言指令 | 生成的命令 |
| ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| 提取 https://example.com/video.mp4 里的文字 | `node scripts/video2text/index.js --file "https://example.com/video.mp4"` |
| 总结这个视频的核心观点 https://example.com/video.mp4 | `node scripts/video2text/index.js --file "https://example.com/video.mp4" --prompt "总结这个视频的核心观点"` |
The package description advertises very broad capabilities across local files, public links, transcription, analysis, summarization, rewriting, and style transformation without stating clear trigger boundaries, supported-source restrictions, or abuse-prevention constraints. In an agent ecosystem, this can cause over-invocation, unsafe handling of arbitrary remote content, and use in higher-risk content transformation scenarios without explicit user confirmation.
This JavaScript file uses Chinese-only natural-language documentation and error/status strings throughout, such as comments and thrown messages, with no indication that the skill supports user language selection or is intentionally limited to a Chinese-only context. That can violate language/locale policy when a skill imposes a language without user opt-in or explicit justification.
The stop() and __removeFile() logic can unlink downloaded files when removeOnStop or removeOnFail is enabled, which is a destructive file operation covered by the missing-warning rule. The code includes no confirmation prompt and no direct user-facing warning that stopping or failed downloads may delete partially downloaded files.
This downloader accepts arbitrary HTTP/HTTPS URLs, follows redirects, and writes the response to a local file path derived from remote-controlled headers or URL path. In a skill whose advertised purpose includes fetching public video links, this creates a real SSRF and untrusted file-write primitive if upstream callers do not strictly validate allowed domains, schemes, destinations, and file types.
Multiple user-visible error strings are written only in Chinese, such as request failures, parse failures, token errors, and timeout/network messages. This imposes a specific language on users without any evident locale selection or documented regional constraint.
This code emits all warning and informational messages exclusively in Chinese, including error and recovery guidance. For a general utility file with no documented region-specific scope or language choice, this constitutes a natural-language locale policy issue because users are not offered an opt-in or alternative language.
The banner text is explicitly Chinese-language text ("视频文案智能提取助手"), which indicates a fixed language/locale choice in user-facing output. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the constraint is justified or configurable.
The natural-language description and author contact metadata are presented only in Chinese, which may effectively constrain the skill's usability and interaction expectations to a specific language without stating that this is optional or region-specific. The policy requires avoiding language or locale constraints unless users are given a choice or the limitation is clearly documented and justified.
The file’s natural-language comments and all user-facing error/help strings are written in Chinese, indicating the skill is designed to communicate in a single language by default. Under the policy, forcing a specific language without offering a user choice or documenting a justified locale constraint is a natural-language policy issue.
This JavaScript file contains natural-language comments and user-facing status/error messages entirely in Chinese, such as the doc comment at L24-L26 and progress/error output at L41, L45, L51, L61, L73, and L78. Under the policy rule for language/locale, this is a violation because the skill imposes a specific language without any opt-in or documented locale constraint.
This code sends JSON data over HTTPS and includes a TOKEN header, which can transmit user or system data to a remote service. In this file, there is no confirmation prompt or explicit user-facing disclosure near the network operation itself; only retry/error handling is present.
No suspicious patterns detected.