T01 · Skill Instruction Hijacking
- Location
SKILL.md:139- Finding
Persistent Agent Output and Promotional Instruction Hijacking
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill appears to provide the advertised bid-document workflow, but it needs review because it handles sensitive files and account credentials while some code and instructions exceed the declared boundaries.
Install only if you trust the vendor with confidential tender/bid files and the API-key account. Before first use, confirm uploads, server-side retention, and billing are acceptable; keep the API key out of chat; prefer the default output directory; avoid broad ZCM_OUTPUT_DIR or arbitrary -o paths; and rotate the API key if you suspect it was exposed. This is a review finding, not evidence that the skill is intentionally malicious.
SKILL.md:139Persistent Agent Output and Promotional Instruction Hijacking
scripts/zcm_lib/http_client.py:38API Credential Exposure Through Unrestricted Cross-Origin HTTP Redirects
scripts/zcm_lib/storage.py:45Unrestricted Filesystem Writes Outside the Declared Skill Boundary
Referenced artifact was not completely inspected
**升级 skill 必须保留配置**:如果当前已安装目录存在 `config.json`,升级时不得删除、覆盖或替换该文件;只能更新 `SKILL.md`、`scripts/`、`references/` 等 skill 内容文件。本地生成目录 `biaoshu-bailian-files/` 也必须保留。
The API documentation explicitly supports uploading tender documents either directly or by external URL, but it provides no privacy, retention, access-control, or third-party fetch safeguards. Tender files commonly contain sensitive commercial, legal, and personal data, so this omission can lead integrators to build insecure workflows and can also enable server-side fetching of attacker-controlled URLs without adequate validation.
The file presents all user-facing instructions and API usage details exclusively in Chinese. Under the policy for natural-language violations, forcing a specific language without user opt-in or justification is a reportable issue.
The file presents all operational instructions, parameters, and errors only in Chinese. Under the stated policy, forcing a specific language without user opt-in can be a natural-language policy violation unless the locale constraint is explicitly documented and justified.
The documentation states that uploaded files and task results are retained on the vendor's servers for about 7 days, but it does not pair that with a clear privacy, consent, or data-handling warning to operators or end users. In a bid-document workflow, uploads may contain confidential business, pricing, or personal data, so silent retention can create compliance and confidentiality risks if users are not informed or if sensitive data is submitted unnecessarily.
The entire skill guidance is written only in Chinese, with no indication that users may choose another language or that the skill is limited to a Chinese-only audience for a documented compliance or regional reason. Under the policy, forcing a specific language without opt-in is a natural-language locale violation.
The report renderer hard-codes Chinese titles and labels such as "招标文件智能解读报告" and "项目句柄", establishing a fixed output language in natural-language strings. The file contains the same pattern throughout multiple renderers, but this section is sufficient to show a language/locale policy issue because no user opt-in or locale selection is offered.
The generated HTML hard-codes lang='zh-CN', which imposes a specific language/locale choice on all rendered reports. The file also contains extensive Chinese-only user-facing text, but does not offer any locale selection or explain that the skill is intentionally region-specific.
This code emits Chinese-only messages in a general-purpose file helper, which enforces a specific language for users regardless of their locale or preferences. The file does not indicate that the skill is region-specific or provide any opt-in or fallback language behavior.
The error message string is hard-coded in Chinese ("请求失败 HTTP ...") with no indication that users can select their preferred language. This creates a natural-language locale policy issue because the skill imposes a specific language without opt-in or justification.
This code emits multiple mandatory Chinese-only user messages such as terminal errors and timeout notices, and the file contains no indication that the skill is limited to Chinese-speaking users or provides a language opt-in. Under the policy, forcing a specific language without user choice is a natural-language policy violation.
The download-link and result guidance shown to users is entirely in Chinese, including operational instructions about saving files and partial results. Because the file does not offer language selection or document a justified Chinese-only scope, this violates the language/locale policy.
The progress streaming path prints all monitoring, retry, failure, and timeout messages in Chinese, which effectively forces that locale on users. Since no opt-in, configuration, or documented locale restriction is present in this file, it matches the policy's prohibited language forcing behavior.
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 also emits Chinese UI text. This enforces a specific language/locale in user-facing output with no opt-in, fallback, or documented region-specific justification, which matches the language policy violation criteria.
The function builds all progress and delivery messages in Chinese, including labels like "处理中", "任务已完成", and "我会继续后台监听,完成后交付成品链接". Because the file contains only hard-coded Chinese output and no user language selection or explicit regional scope, it violates the natural-language locale policy rule.
Line L69 states that callers 'must truthfully say' the result is partial or that semantic review is incomplete, but the surrounding file only defines an API contract and response fields, not any code or protocol behavior that would enforce or guarantee that representation. This creates an intent-level divergence within the documentation: the normative instruction implies an assurance about output handling that the described API itself does not implement.
This file is documentation rather than executable code, so only intent-level contradictions are applicable. The security boundary at L25 warns against exposing sensitive links, while earlier global guidance at L22 describes obtaining results via download-url, creating a mild documentation-level tension because the document does not reconcile safe handling of those URLs.
The module docstring is written entirely in Chinese and describes the script’s purpose only in that language, which can indicate a language-specific constraint without offering user choice or opt-in. Under the policy rule for natural-language violations, forcing a specific language without documented choice can be a locale/language policy issue.
This file contains a hard-coded Chinese error message, and the CLI description/help text is also entirely Chinese. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation because the skill does not provide any language or locale choice.
The only user-facing natural-language text in this file is written entirely in Chinese and gives no indication that other languages are supported or that the language choice is configurable. Under the stated policy, forcing a specific language without opt-in can be a natural-language policy violation.
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__":
This helper sends outbound HTTP requests and may include caller-provided headers and request bodies, but the file contains no confirmation prompt, user-facing log/print, or warning text about transmitting data over the network. Because network calls that transmit user or system data are safety-relevant, the lack of any disclosure in the code qualifies under the code-file warning criterion.
The --version string is hard-coded in Chinese, which imposes a specific language on all users regardless of locale or preference. The policy allows locale constraints only when users can opt in or when the restriction is clearly documented and justified, neither of which is present here.
The function emits a fixed Chinese message directing users to a platform, and the file also contains multiple Chinese-only display strings. If organizational policy requires language choice or user opt-in for locale, this hard-coded locale behavior is a natural-language policy concern because no alternative language path is offered here.
Detected: suspicious.dynamic_code_execution