other
- Location
utils/comfy_client.py:17- Finding
Undisclosed transmission of user prompts and workflows to an external cloud service
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This video-generation skill is mostly purpose-aligned, but it exposes powerful unauthenticated network tools and under-discloses cloud prompt transmission and broad local file access.
Review before installing. Use stdio or bind only to 127.0.0.1, put any HTTP deployment behind authentication and firewalling, run it as an unprivileged user in an isolated workspace, and avoid sensitive prompts unless you explicitly intend to send them to the configured cloud endpoint. The file download and FFmpeg tools should be patched to confine all paths before use in a shared or network-reachable environment.
utils/comfy_client.py:17Undisclosed transmission of user prompts and workflows to an external cloud service
tools/download_video.py:16Arbitrary filesystem write through attacker-controlled download paths
tools/compose_video.py:15Unsafe arbitrary-path FFmpeg processing and insecure temporary manifest
server.py:21Unauthenticated MCP service binds to all network interfaces by default
requirements.txt:1Unpinned executable dependencies create supply-chain and reproducibility risk
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
logger.debug(f"工作流数据: {workflow_json}")
try:
r = requests.post(
f"{COMFY_CLOUD_API}/api/prompt",
json={"prompt": workflow_json},
headers=get_headers()
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
"type": output_type
}
response = requests.get(
f"{COMFY_CLOUD_API}/api/view",
headers={"X-API-Key": COMFY_CLOUD_API_KEY},
params=params
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
Returns:
dict: 任务状态信息
"""
response = requests.get(
f"{COMFY_CLOUD_API}/api/job/{prompt_id}/status",
headers={"X-API-Key": COMFY_CLOUD_API_KEY}
)
The tool advertises that it downloads a video associated with a specific prompt_id, but the implementation never uses prompt_id in the download request and instead fetches by filename alone. This can cause incorrect object retrieval, cross-job data mixups, or unauthorized access to another user's output if filenames are guessable or reused, especially in a multi-tenant backend.
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
result = r.json()
prompt_id = result["prompt_id"]
logger.info(f"工作流提交成功,prompt_id: {prompt_id}")
return prompt_id
except requests.exceptions.RequestException as e:
logger.error(f"提交工作流到 ComfyUI 失败: {e}")
raise
The skill description and invocation examples are presented only in Chinese, which can constitute a language/locale policy issue when no user choice or opt-in is offered. There is no indication that the skill is intentionally limited to a Chinese-speaking region or that alternative languages are supported.
The usage section provides only Chinese prompts for activation and operation, which suggests the skill expects a specific language without documenting user choice. Under SQP-3, language constraints should be optional or clearly justified.
The natural-language instructions, headings, and usage guidance are presented exclusively in Chinese, and the file does not offer an alternative language or indicate that the skill is intentionally limited to a Chinese-speaking audience. Under SQP-3, forcing a specific language without user opt-in is a policy violation.
requests==2.32.5 is explicitly pinned to a version reported as affected by known advisories, so this is a concrete vulnerable dependency rather than a speculative one. Even if the vulnerable utility path is not always exercised, retaining a known-affected version in a network-facing skill increases attack surface and can become exploitable as code evolves or if transitive usage reaches the affected functionality.
The module docstrings, comments, and user-facing descriptions are written entirely in Chinese, which can amount to a language policy violation when the skill does not provide any user opt-in or alternative locale. There is no indication that this tool is intentionally restricted to a Chinese-speaking or region-specific context.
The module and tool docstrings are written entirely in Chinese, which imposes a specific language on users without indicating any language-selection mechanism or opt-in. Under the stated policy, fixed language behavior can be a natural-language policy violation unless the locale constraint is documented and justified.
The code invokes ffmpeg on user-influenced inputs without validating the provided file paths or constraining where inputs and outputs may point. Although it does not use shell=True, ffmpeg's concat demuxer with -safe 0 explicitly disables path safety checks and can process arbitrary paths, making this dangerous in an agent/tool context where untrusted users may cause access to unexpected local files, overwrite output locations, or abuse ffmpeg's broad file/protocol handling.
logger.info(f"创建 ffmpeg 列表文件:{list_file}")
logger.info("运行 ffmpeg 合成视频...")
result = subprocess.run(
["ffmpeg", "-f", "concat", "-safe", "0", "-i", list_file, "-c", "copy", output_file],
capture_output=True,
text=True
The module docstring and function docstring are entirely in Chinese, including user-facing descriptions and parameter documentation. 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, which is not present here.
The tool sends the user-provided prompt and workflow data to an external ComfyUI service via submit_workflow(), which is a network/data-transmission operation. Although there is internal logging and a docstring describing video generation, this file does not include a user-facing warning that prompt content will be transmitted to another service.
This code explicitly sends workflow content to an external API. In an agent/skill context, that can expose sensitive user prompts, file references, or internal workflow logic to a third-party service if users are not clearly informed or if data minimization is not applied.
logger.debug(f"工作流数据: {workflow_json}")
try:
r = requests.post(
f"{COMFY_CLOUD_API}/api/prompt",
json={"prompt": workflow_json},
headers=get_headers()
The module transmits workflow_json to a remote ComfyUI API, and the debug log indicates workflows may contain detailed prompt/workflow content. If workflows contain sensitive prompts, internal instructions, or user data, sending them off-box without clear disclosure or consent can create unintended data exposure and privacy/compliance risk.
Data from a source is assigned to a variable that is later passed to a sink, creating a variable-mediated taint flow.
Returns:
dict: 任务状态信息
"""
response = requests.get(
f"{COMFY_CLOUD_API}/api/job/{prompt_id}/status",
headers={"X-API-Key": COMFY_CLOUD_API_KEY}
)
The workflow saves generated output to a filesystem path derived from the prompt via output/images/{prompt}.png without any visible disclosure, sanitization, or indication of consent handling in this file. This can create privacy and security issues: prompts may contain sensitive user data that becomes embedded in filenames, and unsanitized prompt-derived paths can introduce filename/path manipulation risks depending on the runtime's templating behavior.
The text prompt is written entirely in Chinese, which imposes a specific language/locale in the skill behavior or example content. There is no indication that users can choose another language or that the workflow is intentionally restricted to a Chinese-language context.
This markdown file documents a file-affecting behavior ('一键下载生成的视频') but does not include any user warning about local file creation, overwrite behavior, or destination path. For markdown skills, SQP-2 applies when descriptions omit warnings about behaviors that could affect user data or system state.
The README shows a direct command to download generated videos but provides no accompanying disclosure about writing files to disk. Users should be warned when a skill operation creates or modifies local data so they can understand the impact before invoking it.
The documentation instructs users to expose services on 0.0.0.0 and includes video download functionality, but it does not warn about the risks of network exposure, untrusted prompts, or handling generated/downloaded files. In a skill that operates an MCP server and downloads artifacts, missing safety guidance can lead to inadvertent exposure of local services or unsafe handling of files fetched from another service.
The manifest description is written entirely in Chinese, which imposes a specific language choice in user-facing metadata without indicating that other languages are supported. This matches the policy category for language or locale constraints that are not offered as an opt-in.
Using the version specifier "latest" for fastmcp causes installs to resolve to whatever version is current at install time, making builds non-reproducible and increasing supply-chain risk. A malicious or compromised upstream release could be pulled in automatically without review, which is more concerning here because this skill starts a network-accessible server and likely processes untrusted inputs.
},
"dependencies": {
"python": ">=3.10",
"fastmcp": "latest",
"requests": "latest"
},
"peerDependencies": {
Using "latest" for requests introduces the same supply-chain and reproducibility problem: each installation may fetch a different dependency version, including a newly introduced vulnerable or malicious release. Because this skill appears to act as an HTTP-facing service and may make outbound requests, compromise of a core HTTP library could affect confidentiality, integrity, or availability.
"dependencies": {
"python": ">=3.10",
"fastmcp": "latest",
"requests": "latest"
},
"peerDependencies": {
"comfyui": ">=1.0.0"
No suspicious patterns detected.