Back to skill

Security audit

bizyair-video

Security checks for vulnerabilities and agentic risk

Overview

This skill mainly performs disclosed BizyAir video generation, but it also bundles under-disclosed image-processing tools and permits overly broad BizyAir workflow use under the user's API key.

Install only if you intend to use BizyAir with your BIZYAIR_API_KEY and are comfortable sending prompts plus image or frame URLs to api.bizyair.cn. Review or remove the bundled bozo-jiaodu image-angle scripts, avoid arbitrary web_app_id use, and do not pass untrusted JSON, URLs, or prompts through these shell scripts without proper escaping and validation.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/create_angle_task.sh:37
Finding

Unsafe JSON Construction Allows Authenticated API Payload Manipulation

Content
View full analysis
\ .+ ]]; then echo -e "${RED}❌ Error: The camera prompt must begin with ${NC}" echo "💡 Correct format example: left side view low-angle shot close-up" exit 1 fi # Build request data REQUEST_DATA=$(cat < `. It does not prevent embedded quotation marks, backslashes, control characters, or JSON delimiters. `IMAGE_URL` receives no validation or escaping at all. Consequently, specially constructed arguments can terminate the intended JSON string, add fields, override adjacent values, or produce malformed payloads. The third argument is especially sensitive because `WEB_APP_ID` is inserted as a raw JSON value rather than a quoted string. An attacker can supply JSON syntax instead of a numeric workflow identifier. The resulting payload is then submitted to BizyAir with the victim's `BIZYAIR_API_KEY`. This is JSON injection rather than local shell command injection: the variables are not evaluated as shell commands in the heredoc. The security consequence occurs when the manipulated authenticated payload is sent to the remote API. ### Attack Path ...[truncated 1334 chars]
Remediation
View remediation
&2 exit 1 ;; esac ``` 3. If arbitrary workflow IDs are genuinely required, require a digits-only value and enforce an appropriate numeric range: ```bash [[ "$WEB_APP_ID" =~ ^[0-9]+$ ]] || exit 1 ``` 4. Validate image URLs using a URL parser or a strict policy. Permit only required schemes, normally `https`, and reject control characters. 5. Validate the entire prompt against the documented set of approved camera prompts rather than checking only its prefix. 6. Add tests containing quotation marks, backslashes, newlines, and JSON delimiters to verify that untrusted values remain JSON string data and cannot change the payload structure. ]]>

T05 · Unauthorized Access and Privilege Escalation

Note
Location
scripts/create_angle_task.sh:37
Finding

Undocumented Image-Processing Capability Expands Authenticated API Scope

Content
View full analysis
\ .+ ]]; then echo -e "${RED}❌ Error: The camera prompt must begin with ${NC}" echo "💡 Correct format example: left side view low-angle shot close-up" exit 1 fi REQUEST_DATA=$(cat <
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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (28)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

描述的核心能力是“视频生成”,包括多种图生视频和首尾帧视频模式;而代码并未进行任何视频生成,也没有处理视频输入/输出、首尾帧逻辑或 5 种模式选择。它只是向 BizyAir 的一个 web_app_id 工作流提交图片和摄像机提示词,以生成不同角度的图片结果,属于图片编辑而非视频制作。虽然同样使用 BizyAir API 且也支持异步任务ID查询,但这只是实现层面的部分相似,无法掩盖主要用途的实质性不一致。

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

声明的核心能力是“视频生成助手”,包括多种图生视频/首尾帧视频模式,并强调异步提交任务后返回任务ID再查询结果。实际代码仅覆盖了异步流程中的“查询结果”这一环,而且查询成功后统计的是图片数量、输出图片 URL,并以“摄像机角度调整结果”命名结果,错误提示也提到“摄像机提示词格式”“原始图片 URL”,都表明该脚本针对图片类任务或其他图像相关工作流,而不是所声明的视频生成能力。虽然“用户可随时查询结果”的部分与轮询逻辑有部分重合,但主功能和输出对象与声明不符,属于明显描述-行为不匹配。

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The README documents image angle-adjustment shell scripts, while the skill metadata says this skill must be used for video generation workflows. This kind of capability/documentation mismatch is dangerous because it can cause the agent to invoke the wrong functionality, mishandle user requests, or expose unintended API actions and data flows under a misleading skill identity.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The manifest says this skill is a '视频生成助手' limited to five video-generation modes and should be used for requests like '生成视频' or '首尾帧视频'. This script's own header and request payload show it creates a camera-angle adjustment task for a single image, which is an image-editing capability outside the declared video-generation scope.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill invokes shell/curl and bundled shell scripts but declares no tool scope or allowed-tools restrictions. That gives the agent broader execution latitude than necessary and weakens containment if the skill is misused or later modified.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The trigger is overly broad and mandatory for common video-related phrases, increasing the chance of unnecessary activation and data transfer to an external service. Over-triggering magnifies the risk of sending prompts or image URLs without sufficient user intent or informed consent.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill sends prompts and image URLs to BizyAir but does not clearly warn users that their content will be transmitted to a third-party external API. This creates a privacy and consent gap, especially when images or prompts may contain personal, proprietary, or sensitive material.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill claims a bounded set of 5 video modes but also permits user-specified arbitrary web_app_id and parameter maps. That effectively turns a narrow media skill into a generic remote API driver, bypassing intended safety boundaries and enabling invocation of unforeseen BizyAir apps, including potentially sensitive or unsafe workflows.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Allowing the user to drive arbitrary BizyAir applications gives the skill broad remote capability unrelated to its stated purpose. In context, this is more dangerous because the skill is auto-invoked for common video phrases, so users may unknowingly trigger a much more general integration than advertised.

Content

No source excerpt is available for this finding.

Ssd 4

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The document explicitly normalizes adding new modules and arbitrary app/parameter mappings over time. This is a capability-expansion anti-pattern: it erodes the original safety boundary and makes it easy to repurpose the skill into a generic executor for remote workflows with little review.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

  1. 使用 curl 执行以下 POST 请求:
bash
curl -s -X POST "https://api.bizyair.cn/w/v1/webapp/task/openapi/create" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${BIZYAIR_API_KEY}" \
  -H "X-Bizyair-Task-Async: enable" \

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file defines two distinct prompt families, "elevated shot" and "high-angle shot", but maps the Chinese term "高角度" to "elevated shot" while tests also expect "高角度" to produce "high-angle shot" outputs. This inconsistency can cause incorrect prompt generation, unreliable behavior, and evaluation failures, especially when downstream systems depend on exact prompt tokens.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file repeatedly claims BizyAir image angle-adjustment behavior that contradicts the declared video-generation intent of the skill. In an agent setting, contradictory documentation increases the chance of unsafe tool selection, incorrect parameter handling, and user deception about what data is being sent to external services.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

All user-facing messages, usage text, and operational output are hard-coded in Chinese throughout the script. This creates a language/locale policy concern because the skill does not offer any opt-in, locale selection, or documented justification for restricting interaction to a single language.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

Hardcoding a call to https://api.bizyair.cn means the skill always sends task content to an external domain. In this skill, that is more sensitive because the declared purpose is media generation and inputs may contain private user images or prompts; the transfer is expected functionally, but still constitutes a real data-exposure boundary that should be treated as a security issue if not clearly disclosed and controlled.

Content

Scanner excerpt · scripts/create_angle_task.sh (reported line 67)May include surrounding context.

sh
echo "🎬 摄像机提示词: ${CAMERA_PROMPT}"
echo ""

RESPONSE=$(curl -s -X POST "https://api.bizyair.cn/w/v1/webapp/task/openapi/create" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${BIZYAIR_API_KEY}" \
  -d "$REQUEST_DATA")

External Transmission

Medium
Category
Data Exfiltration
Confidence
86% confidence
Finding

Hardcoding a call to https://api.bizyair.cn means the skill always sends task content to an external domain. In this skill, that is more sensitive because the declared purpose is media generation and inputs may contain private user images or prompts; the transfer is expected functionally, but still constitutes a real data-exposure boundary that should be treated as a security issue if not clearly disclosed and controlled.

Content

Scanner excerpt · scripts/create_angle_task.sh (reported line 67)May include surrounding context.

sh
echo "🎬 摄像机提示词: ${CAMERA_PROMPT}"
echo ""

RESPONSE=$(curl -s -X POST "https://api.bizyair.cn/w/v1/webapp/task/openapi/create" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${BIZYAIR_API_KEY}" \
  -d "$REQUEST_DATA")

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

User-facing strings such as the description, usage text, examples, and status/error messages are presented entirely in Chinese. Because no language selection or opt-in is provided, the skill effectively forces a specific language, which matches the language/locale policy violation category.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
92% confidence
Finding

The hardcoded external endpoint confirms that task creation is sent to BizyAir infrastructure, which can expose sensitive prompts, media references, and operational metadata outside the local environment. The risk is elevated in this skill because the advertised purpose is media generation from user inputs, making third-party transmission central but insufficiently disclosed.

Content

Scanner excerpt · scripts/create_video_task.sh (reported line 245)May include surrounding context.

sh
echo "🔧 工作流 ID: ${WEB_APP_ID}"
echo ""

RESPONSE=$(curl -s -X POST "https://api.bizyair.cn/w/v1/webapp/task/openapi/create" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${BIZYAIR_API_KEY}" \
  -H "X-Bizyair-Task-Async: enable" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
92% confidence
Finding

The hardcoded external endpoint confirms that task creation is sent to BizyAir infrastructure, which can expose sensitive prompts, media references, and operational metadata outside the local environment. The risk is elevated in this skill because the advertised purpose is media generation from user inputs, making third-party transmission central but insufficiently disclosed.

Content

Scanner excerpt · scripts/create_video_task.sh (reported line 245)May include surrounding context.

sh
echo "🔧 工作流 ID: ${WEB_APP_ID}"
echo ""

RESPONSE=$(curl -s -X POST "https://api.bizyair.cn/w/v1/webapp/task/openapi/create" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${BIZYAIR_API_KEY}" \
  -H "X-Bizyair-Task-Async: enable" \

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script transmits user-provided prompts and image/frame URLs, along with the API credential, to an external BizyAir service without an explicit privacy notice, consent step, or data-handling warning. In an agent-skill context, users may reasonably assume local processing, so silent off-system transmission can expose sensitive prompts, private image URLs, or internal resource locations.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest describes a BizyAir video-generation assistant covering five video modes and asynchronous task-result queries. This script's header and output handling explicitly describe and render generated images (e.g. '获取生成的图片', counting '张图片', Markdown image previews), which does not match the stated video-oriented scope.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The file comments say the script gets task results and generated images, and later user-facing messages label the output as '摄像机角度调整结果'. Those comments and strings actively describe a different capability than the manifest's video-generation assistant, indicating intent/documentation divergence within the skill.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

This shell script presents its purpose and all user-facing interaction in Chinese, which imposes a specific language on users without any apparent opt-in or alternative. The policy applies to natural-language content in code files, including comments and printed messages, and this file consistently forces one locale.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

md
# 发送查询请求
query_task() {
    curl -s -X GET "https://api.bizyair.cn/w/v1/webapp/task/openapi/outputs?requestId=${REQUEST_ID}" \
      -H "Authorization: Bearer ${BIZYAIR_API_KEY}"
}

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

md
# 发送查询请求
query_task() {
    curl -s -X GET "https://api.bizyair.cn/w/v1/webapp/task/openapi/outputs?requestId=${REQUEST_ID}" \
      -H "Authorization: Bearer ${BIZYAIR_API_KEY}"
}

Static analysis

No suspicious patterns detected.