T09 · Insecure Skill Coding Practices
- Location
scripts/utils/validator.js:12- Finding
Arbitrary Local Files Can Be Uploaded to an External Service
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill appears to implement its advertised cloud video transcription workflow, but its file and URL handling can send broader local or internal data to remote services than the documentation clearly scopes.
Install only if you are comfortable sending selected media, prompts, task IDs, and some local path metadata to this third-party service. Use it only with non-sensitive videos from explicit paths or public URLs you trust; avoid private files, internal URLs, localhost URLs, cloud metadata addresses, and regulated or confidential recordings unless you have verified the provider's retention and data-handling practices.
scripts/utils/validator.js:12Arbitrary Local Files Can Be Uploaded to an External Service
scripts/utils/validator.js:3Server-Side Request Forgery Through Unrestricted URLs and Redirects
scripts/utils/helper.js:27Unbounded Downloads Permit Disk and Process Resource Exhaustion
scripts/api/video.js:11Full Local Filesystem Paths Are Disclosed to the Remote API
scripts/utils/upload.js:10Remote API Can Select an Unrestricted HTTPS Upload Destination
If the implementation only validates the token and emits promotional or contact text instead of performing the declared transcription workflow, the skill is deceptive and may improperly collect secrets or mislead operators into granting sensitive credentials. In a security context, undisclosed credential gating plus nonfunctional behavior is dangerous because it can be used for phishing-like token harvesting or policy evasion.
If the implementation only validates the token and emits promotional or contact text instead of performing the declared transcription workflow, the skill is deceptive and may improperly collect secrets or mislead operators into granting sensitive credentials. In a security context, undisclosed credential gating plus nonfunctional behavior is dangerous because it can be used for phishing-like token harvesting or policy evasion.
If the implementation only validates the token and emits promotional or contact text instead of performing the declared transcription workflow, the skill is deceptive and may improperly collect secrets or mislead operators into granting sensitive credentials. In a security context, undisclosed credential gating plus nonfunctional behavior is dangerous because it can be used for phishing-like token harvesting or policy evasion.
If the implementation only validates the token and emits promotional or contact text instead of performing the declared transcription workflow, the skill is deceptive and may improperly collect secrets or mislead operators into granting sensitive credentials. In a security context, undisclosed credential gating plus nonfunctional behavior is dangerous because it can be used for phishing-like token harvesting or policy evasion.
The README explicitly promotes cloud-side processing of local files and public video links, but it does not give a prominent, upfront warning that uploaded videos leave the user's device and are sent to a remote third-party service for processing. Because videos may contain sensitive personal, corporate, or regulated data, insufficient disclosure can lead users to unknowingly transmit confidential content off-device.
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 "改写成小红书风格的文案"` |
The skill declares use of an environment variable for authentication but does not define an explicit tool scope such as permissions or allowed-tools. In agent ecosystems, missing scope declarations can cause over-broad execution privileges or make it unclear what sensitive resources the skill may access, weakening review and policy enforcement.
The activation description is broad enough to trigger on common writing, summarization, and analysis requests that may not involve video transcription. Over-broad routing can cause unnecessary transmission of user files or content to an external service, creating avoidable privacy and data-minimization risks.
The 'when to use' section lists many broad content-production intents without strict trigger boundaries, increasing the chance the agent invokes this skill for unrelated tasks. Because the skill uploads user-provided media or fetches remote URLs, mistaken activation can expose data to third parties unnecessarily.
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.
## 6. 🧠 自然语言 → 命令 映射(AI 执行参考)
| 用户自然语言指令 | 生成的命令 |
| ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| 提取 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 "总结这个视频的核心观点"` |
This JavaScript file contains natural-language strings and comments in Chinese for download progress and error reporting, indicating the skill forces a specific language for user-visible output. The policy allows locale-specific behavior only when it is clearly justified or when the user is given a language/locale choice, neither of which is present here.
The code emits user-facing error strings entirely in Chinese, including operational guidance, with no indication that the skill is China-specific or that users can select another language. This can violate language/locale policy for general-purpose skills because it imposes a specific language without user opt-in.
The skill prints all user-facing warning and status messages in Chinese, including error and recovery instructions, with no indication that language is configurable or user-selected. This creates a locale policy issue because the skill imposes a specific language without opt-in or documented regional scope.
The comment makes a privacy and retention guarantee that the code does not enforce: this function only uploads a local video to a remote presigned URL and contains no deletion, lifecycle, or verification logic. In a skill handling user videos for transcription, this mismatch can mislead users and integrators into believing sensitive media is automatically deleted, creating privacy, compliance, and trust risks if the backend or storage retains the data longer than promised.
The banner text on L07 is hardcoded in Chinese, which imposes a specific language on users without any opt-in or indication that the skill is region-specific. The policy explicitly calls for flagging language or locale constraints when the skill does not offer a language choice or document a justified limitation.
The description forces a specific language/locale in the skill metadata, which can conflict with language-choice policy when no opt-in or region-specific justification is provided. The file does not state that the skill is intended only for Chinese-speaking users or offer alternative language support.
This file presents all user-facing natural-language output, including errors, usage text, and help content, only in Chinese. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is explicitly justified.
No suspicious patterns detected.