Back to skill

Security audit

视频文案智能提取大师

Security checks for vulnerabilities and agentic risk

Overview

This video transcription skill mostly matches its stated purpose, but it can upload any readable local file or fetch arbitrary URLs without enough scoping or confirmation.

Review before installing. Use this only with media you are authorized to send to the GuaiKei service, avoid confidential recordings unless you have separate privacy assurances, pass explicit trusted file paths yourself, and do not let untrusted prompts choose local paths or video URLs. A sandbox with restricted filesystem and network egress would materially reduce the risk.

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

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/utils/validator.js:3
Finding

Arbitrary URL Fetching Enables Private-Network Access and Unsafe Redirects

Content
View full analysis
this.__opts.maxRedirects) { const err = new Error("Too many redirects"); this.__setState(this.__states.FAILED); this.emit("error", err); return reject(err); } const redirectedURL = /^https?:\/\//.test(response.headers.location) ? response.headers.location : new URL(response.headers.location, this.url).href; this.__isRedirected = true; this.__initProtocol(redirectedURL); this.emit("redirected", redirectedURL, this.url); return this.__start(); } ``` ```js // scripts/utils/download.js:591-598 __isRequireRedirect(response) { const redirectCodes = [301, 302, 303, 307, 308]; return ( redirectCodes.includes(response.statusCode) && response.headers.hasOwnProperty("location") && response.headers.location ); } ``` ```js // scripts/utils/download.js:975-997 __initProtocol(url) { const defaultOpts = this.__getReqOptions( this.__opts.method, url, this.__headers, ); this.requestURL = url; if (url.indexOf("https://") > -1) { this.__protocol = https; defaultOpts.agent = this.__defaultHttpsAgent; this.__reqOptions = Object.assign( {}, defaultOpts, this.__opts.httpsRequestOptions, ); } else { this.__protocol = http; defaultOpts.agent = this.__defaultHttpAgent; this.__re ...[truncated 2791 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/utils/validator.js:10
Finding

Unrestricted Local File Selection Allows Arbitrary File Upload

Content
View full analysis
{ const fileStats = fs.statSync(filename); const totalSize = fileStats.size; let uploadedSize = 0; let settled = false; const fileStream = fs.createReadStream(filename); ``` ```js // scripts/utils/upload.js:34-42 const options = { host: url.hostname, path: url.pathname + url.search, method: "PUT", headers: uploadHeaders, }; const req = https.request( { ...options, timeout: constants.REQUEST_TIMEOUT }, (res) => { ``` ### Technical Analysis The local path validator accepts any object for which `fs.statSync()` reports a regular file. It does not restrict the file to video or audio formats, validate a file signature, enforce an approved root directory, reje ...[truncated 2039 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/utils/download.js:34
Finding

Unbounded Remote Downloads Permit Disk and Network Resource Exhaustion

Content
View full analysis
{ const options = { retry: { maxRetries: constants.CREATE_MAX_ATTEMPTS, delay: constants.RETRY_INTERVAL, }, override: { skip: true, skipSmaller: true }, }; let progressLog = ""; const dl = new Downloader(url, path, options); ``` ```js // scripts/utils/download.js:519-550 __startDownload(response, resolve, reject) { let readable = response; if (!this.__isResumed) { const _fileName = this.__getFileNameFromHeaders(response.headers); this.__filePath = this.__getFilePath(_fileName); this.__fileName = this.__filePath.split(path.sep).pop(); if (fs.existsSync(this.__filePath)) { const downloadedSize = this.__getFilesizeInBytes(this.__filePath); const totalSize = this.__total ? this.__total : 0; if ( typeof this.__opts.override === "object" && this.__opts.override.skip && (this.__opts.override.skipSmaller || downloadedSize >= totalSize) ) { this.emit("skip", { totalSize: this.__total, fileName: this.__fileName, filePath: this.__filePath, downloadedSize: downloadedSize, }); ...[truncated 2134 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (26)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Token gating plus promotional/contact output is not inherently malicious, but if the implementation pauses execution, returns empty tokens, or injects marketing behavior not disclosed in the skill purpose, it creates a deceptive control-flow mismatch. This can disrupt automated workflows, confuse operators, and conceal where credentials are validated or how failure states are handled, especially when the skill already requests a sensitive API token.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Token gating plus promotional/contact output is not inherently malicious, but if the implementation pauses execution, returns empty tokens, or injects marketing behavior not disclosed in the skill purpose, it creates a deceptive control-flow mismatch. This can disrupt automated workflows, confuse operators, and conceal where credentials are validated or how failure states are handled, especially when the skill already requests a sensitive API token.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Token gating plus promotional/contact output is not inherently malicious, but if the implementation pauses execution, returns empty tokens, or injects marketing behavior not disclosed in the skill purpose, it creates a deceptive control-flow mismatch. This can disrupt automated workflows, confuse operators, and conceal where credentials are validated or how failure states are handled, especially when the skill already requests a sensitive API token.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Token gating plus promotional/contact output is not inherently malicious, but if the implementation pauses execution, returns empty tokens, or injects marketing behavior not disclosed in the skill purpose, it creates a deceptive control-flow mismatch. This can disrupt automated workflows, confuse operators, and conceal where credentials are validated or how failure states are handled, especially when the skill already requests a sensitive API token.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Token gating plus promotional/contact output is not inherently malicious, but if the implementation pauses execution, returns empty tokens, or injects marketing behavior not disclosed in the skill purpose, it creates a deceptive control-flow mismatch. This can disrupt automated workflows, confuse operators, and conceal where credentials are validated or how failure states are handled, especially when the skill already requests a sensitive API token.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README makes strong privacy and retention guarantees ('automatic destruction', 'permanent non-retention') that are not substantiated anywhere in this file. For a skill that uploads user videos to a remote service, unverified deletion and non-retention claims can mislead users into sending sensitive media under false assumptions, creating privacy, compliance, and trust risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill instructs users to submit local videos or public video links to a cloud-backed service, but does not clearly warn that content is transmitted off-device to a third-party system. Because the skill is designed for meetings, interviews, courses, and business content, users may upload sensitive or regulated media without informed consent or organizational approval.

Content

No source excerpt is available for this finding.

Whitespace Padding

Medium
Category
Prompt Injection
Confidence
70% confidence
Finding

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.

Content

Scanner excerpt · README.md (reported line 99)May include surrounding context.

md
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 "改写成小红书风格的文案"`       |

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The documentation repeats that source video files are automatically deleted after processing, while the documented workflow only shows token setup and remote API usage. In this context, the risk is not code execution but deceptive or unsupported security assurances that may cause users to upload confidential recordings they otherwise would not share.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest description is entirely framed in Chinese and specifies Chinese content-generation styles such as 小红书、抖音、公众号文案, but does not indicate that other languages are supported or that the user can choose the output language. This creates a natural-language locale constraint without explicit user opt-in, which matches the language/locale policy concern for this rule.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

All examples, command mappings, and usage guidance assume Chinese prompts and Chinese-style outputs, while the skill does not state that users may select another language or locale. Because the guidance operationalizes a single language/locale by default, it presents a policy-relevant language constraint in the natural-language instructions.

Content

No source excerpt is available for this finding.

Whitespace Padding

Medium
Category
Prompt Injection
Confidence
70% confidence
Finding

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.

Content

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

md
当用户用自然语言下达指令时,按以下映射生成命令,保证识别与执行一致:

| 用户自然语言指令                                     | 生成的命令                                                                                                  |
| ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| 提取 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 "总结这个视频的核心观点"` |

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The package metadata is written primarily in Chinese and includes Chinese-only usage descriptors and keywords, which signals a language-specific skill experience without any opt-in or alternative language option. Under the policy, locale or language constraints should either be optional for the user or clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This JavaScript file contains natural-language comments, parameter descriptions, operation labels, and error messages exclusively in Chinese, including user-visible strings such as error text and request labels. Under the policy rule, forcing a specific language without offering a language/locale choice or documenting a justified regional constraint is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This downloader performs network requests to arbitrary URLs and writes the received content to disk, but the file contains no confirmation prompt, print/log statement, or comment/docstring warning users that remote data will be fetched and saved locally. Because these are safety-relevant operations in a reusable utility, users integrating the skill may not receive any visible disclosure before data is transmitted and files are created.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

This JavaScript file contains multiple user-facing strings in Chinese, including status and error messages such as download progress, retry notices, and failure output. The file does not provide any indication of user language selection or a justified region-specific constraint, which creates a natural-language locale policy violation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The code constructs and sends an HTTPS POST containing arbitrary JSON data plus a TOKEN header, which may include user or system data and credentials. In this file, there is no confirmation prompt, user-facing notice, or explanatory comment/docstring warning that data and a token will be transmitted to a remote service.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The user-facing strings in this file are all hard-coded in Chinese, including warnings and status messages, with no indication that the skill supports user language selection or is intentionally restricted to a Chinese-speaking context. This is a natural-language policy concern because it imposes a specific language on users without opt-in or justification.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The comment makes privacy and lifecycle guarantees ('not leaked', 'not retained', 'auto-deleted after processing') that are not technically enforced anywhere in this function. This creates a security and trust gap: sensitive video content is transmitted to a remote endpoint, but deletion, retention limits, and use restrictions rely entirely on external parties and undocumented behavior rather than code-level controls or verifiable checks.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This code reads an arbitrary local file and uploads its full contents to a remote HTTPS presigned URL, but the file itself provides no runtime consent gate, destination allowlist, or explicit user-facing disclosure. In a skill whose purpose is converting videos to text, exfiltration risk is contextually expected to some degree, but it is still dangerous because videos may contain highly sensitive personal, business, or meeting data and the upload target is trusted solely via a supplied URL.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The README presents all instructions and expected prompts in Chinese and frames outputs such as rewrite targets around Chinese platforms and Chinese-language usage. There is no indication that users may choose another language or that the Chinese-only orientation is a documented regional limitation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

This JavaScript file contains user-facing comments and error/help strings in Chinese, starting with the module description and continuing throughout the parser. Per the policy, forcing a specific language without user opt-in can be a locale-policy violation when no alternative or opt-in is provided.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

User-visible error messages such as missing-value and unknown-option errors, along with generated help text, are all hard-coded in Chinese. Because the file does not provide a language/locale choice or state a justified locale restriction, this constitutes a natural-language locale policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The string literal returned for authentication failures is fixed in Chinese, which imposes a specific language on users regardless of their locale. There is no indication in this file that the user opted into Chinese output or that the skill is intentionally limited to a Chinese-only context.

Content

No source excerpt is available for this finding.