T01 · Skill Instruction Hijacking
- Location
SKILL.md:140- Finding
Mandatory Promotional Output and Instruction-Priority Hijacking
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly matches a bid-document cloud workflow, but it has under-scoped local file-writing and persistence behavior that should be reviewed before installation.
Use this skill only if you are comfortable uploading sensitive tender and bid documents to the 百炼标书 service and using an account API key that can spend word balance. Before installing, review or fix the output-path handling and the undeclared ~/.zcm project metadata cache; avoid custom --out-dir, --basename, ZCM_HOME, ZCM_OUTPUT_DIR, or arbitrary save paths unless you trust the execution context.
SKILL.md:140Mandatory Promotional Output and Instruction-Priority Hijacking
scripts/zcm_lib/storage.py:62Undeclared Persistent Tender Metadata Outside the Filesystem Boundary
scripts/report_lib/generator.py:21Path Traversal and Arbitrary Report Output Through Unsanitized Filenames
scripts/zcm_lib/jobs.py:45Potential API-Key Disclosure Through Unrestricted HTTP Redirects
Referenced artifact was not completely inspected
**升级 skill 必须保留配置**:如果当前已安装目录存在 `config.json`,升级时不得删除、覆盖或替换该文件;只能更新 `SKILL.md`、`scripts/`、`references/` 等 skill 内容文件。本地生成目录 `biaoshu-bailian-files/` 也必须保留。
The permissions/data section says "提交前脚本会预检可用字数" (the script will precheck available balance before submission), but earlier documentation explicitly says generation should not warn about insufficient balance before submit and should not block on balance, and even says "提交生成后不做字数不足示警". These instructions conflict about whether the skill prechecks or warns on balance prior to generation.
The instruction to always present wallet_balance to users as the Chinese phrase “可用字数” imposes a specific user-facing language/locale. The file does not provide any opt-in, fallback, or justification for requiring Chinese output, so it constitutes a natural-language locale policy concern.
This markdown file contains user-facing operational instructions exclusively in Chinese, and nowhere indicates that the skill is region-specific or that users may choose another language. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation.
The entire skill documentation is written only in Chinese and does not indicate that users may choose another language or that the API is restricted to a Chinese-only regulatory context. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation.
Line L149 instructs that script output and reports are automatically converted to Chinese and should be presented directly in Chinese. This is a natural-language locale policy constraint, and the file does not indicate any user opt-in or alternative language choice.
The raised error message is hard-coded in Chinese, which imposes a specific language on users without any opt-in or locale selection. This is a natural-language policy concern because the skill does not offer an alternative language or document a justified region-specific constraint.
The argparse description and help strings are presented only in Chinese, forcing a specific language for all users. Under the policy, locale-specific language should be optional or clearly justified as a region-specific tool.
The generated HTML explicitly sets lang='zh-CN', which forces a specific language/locale in the output. Under the policy, locale constraints should offer user opt-in or be clearly documented as justified; this code provides neither in the file.
This code emits error text in Chinese in user-visible failure paths, which forces a specific language without offering user opt-in or documenting a justified region-specific scope. The policy for natural-language violations applies to code string literals, so these messages constitute a locale-policy issue.
This code emits multiple user-facing status and error messages entirely in Chinese, including terminal error and timeout text. The file provides no opt-in, fallback, or documented justification for forcing a specific language, which matches the language/locale policy violation criteria.
The progress streaming interface prints all operational updates, retry notices, failure states, and timeout messages in Chinese. Because these are user-visible runtime messages and no language choice or region-specific justification is present in the file, this is a natural-language policy violation.
Tool defaults are unsafe or overly permissive (e.g. disabled TLS verification, no authentication, world-writable permissions). Unsafe defaults widen the attack surface.
contract_snapshot,
funcs,
description,
include_skillhub_auth=False,
allow_remote_files=False,
include_feedback=False,
):
The formatting helpers return Chinese-only time strings such as '分钟', '小时', and '天', and the rest of the file continues this pattern with fixed Chinese status messages. Because the file does not offer any locale selection or opt-in mechanism, it appears to force a specific language in user-facing output.
The function emits a fixed Chinese platform reminder, and the file also hard-codes Chinese display translations and log strings elsewhere. This indicates a locale-specific user experience without any visible user choice or justification, which fits the language/locale policy violation criteria.
This code generates and writes HTML and DOCX files to the filesystem, but there is no confirmation prompt, warning comment/docstring, or other user-facing disclosure near the write operations. Because file creation modifies user storage, the skill should make that behavior explicit unless it is already clearly disclosed elsewhere in the skill documentation.
This file contains user-facing natural-language documentation entirely in Chinese, which can impose a specific language on users without offering an alternative. The policy explicitly calls for flagging language or locale constraints when no user choice or opt-in is provided.
Dynamic getattr() with a non-literal attribute name can access arbitrary object attributes, potentially bypassing access controls.
from zcm_lib import cli as _cli
globals().update({name: getattr(_cli, name) for name in dir(_cli) if not name.startswith("__")})
if __name__ == "__main__":
The function returns user-facing status text entirely in Chinese (e.g. '预计/本次需要约' and '当前可用') with no indication that the skill is China-specific or that users can choose their language. This is a natural-language locale policy concern because it hardcodes one language for all users.
The code constructs user-facing CLI output using Chinese text literals such as "请求失败" and arrow-prefixed hints, but there is no indication in this file that the skill offers a language choice or that it is intentionally limited to a Chinese-speaking locale. This can violate language/locale policy requirements for natural-language behavior when users are not given opt-in or justification.
The user-visible version string is hard-coded in Chinese, which imposes a specific language on all users of the CLI. The file does not provide any opt-in, locale selection, or documented regional justification for this language constraint.
Detected: suspicious.dynamic_code_execution