T07 · Tool Hijacking and Spoofing
- Location
scripts/run.py:14- Finding
Runtime Module Resolution Outside the Audited Skill Enables Import Hijacking
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a disclosed cloud listing generator, but its reviewed package is not self-contained and can load unaudited neighboring Python client code while using an API key.
Review before installing. Use a scoped, rotatable TOKENAPI_KEY, avoid shared writable skill or _shared directories, verify that the packaged yufluent_api.py is present and from the publisher, and assume submitted product details and identifiers are processed by Yufluent's remote service. Pin dependencies for controlled deployments.
scripts/run.py:14Runtime Module Resolution Outside the Audited Skill Enables Import Hijacking
requirements-dev.txt:1Editable Development Dependencies Trust Mutable Packages Outside the Project
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
## 快速开始(3 步,60 秒)
1. **注册获取 API 密钥** → https://claw.changzhiai.com/login (新用户即送体验积分,无需绑卡)
2. **设置环境变量**:export TOKENAPI_KEY=*** 或写入 .env 文件
3. **运行**:参照下方 Examples 示例执行 python scripts/run.py ...
> 还没注册?前往 https://claw.changzhiai.com/login 免费获取密钥。
The README instructs users to export a live API credential and explicitly reuse the same tk-* token across OpenClaw conversations and run.py, but it does not provide adequate guidance on secret handling, token scoping, rotation, or avoiding accidental disclosure in logs, shells, screenshots, and shared environments. In a cloud-harness/agent context, shared credentials increase blast radius because compromise of one channel or component can expose billing-backed access across both interactive and scripted workflows.
The listed trigger phrases include broad requests like "优化产品标题" and "写个 Shopify 产品描述," which overlap with common conversational requests and do not clearly define when this skill should or should not activate. The section also provides only positive examples and no exclusion conditions or narrow invocation context, increasing the chance of unintended activation.
The prompt text is written in Chinese and frames the interaction in that language, while only the output language is parameterized later via {language_prompt}. This can violate language/locale policy because the skill forces a specific instruction language without offering the user a choice or documenting a justified locale constraint.
The prompt is written as a fixed Chinese instruction ('你是一位顶级 Shopify 电商文案专家') and does not offer any user choice of interface language or explain why Chinese is required. Under the policy, forcing a specific language without opt-in can be a natural-language policy violation unless clearly justified as region-specific.
The instruction requires output in a specific age-coded style: "年轻人口吻". This is a language/locale-style constraint expressed in natural language, and the file does not indicate that the user can opt out or choose a different register.
The prompt explicitly instructs the model to use language that matches "Z 世代表达习惯". This imposes a specific linguistic style without documenting user choice or a justified region-specific requirement, which fits the policy's language/style violation category.
This markdown guide is written as a normative specification for Amazon listing copy in Chinese, including requirements such as Chinese character limits and capitalization rules, but it does not state that the guidance is limited to a Chinese-language or China-facing marketplace context. Under the policy, forcing a specific language or locale without user choice or clear justification is a natural-language policy violation.
The title and the entire document are written as a Chinese-only rule source, and the file does not indicate that language selection is optional or limited to a China-specific workflow. Under the policy, forcing a specific language without user opt-in is a natural-language locale violation unless clearly justified.
The title and the substantive guidance throughout the file are written in Chinese, and there is no visible statement that users may choose another language or that the content is limited to a China-specific workflow. Under the policy, forcing a specific language without opt-in can be a natural-language policy violation unless the locale constraint is clearly documented and justified.
Line L259 states that core search terms and long-tail scenario terms must match the output language, giving a specific example that Chinese sites use Chinese search terms. This imposes a locale/language constraint in natural language without presenting user choice or documenting it as a justified region-specific requirement for this skill file.
The file presents itself as an authoritative rule source while simultaneously warning that the content requires manual verification and citing at least one community source. In a policy/RAG context, that mismatch can cause downstream agents or users to over-trust inaccurate compliance guidance, leading to unsafe or noncompliant marketplace content.
The module docstring and function docstrings are written only in Chinese, which indicates a language-specific constraint in the skill's natural-language guidance. The policy allows locale constraints only when they are optional or clearly justified, and no such opt-in or justification appears here.
The script sends user-supplied product data and potentially user-associated identifiers such as user_id, external_id, asin, listing_id, and sku to a remote API via self.harness.run("listing", payload) without any explicit disclosure, consent flow, or minimization guardrails in the CLI. In this skill context, remote transmission is expected for LLM listing generation, but the inclusion of identifiers increases privacy and data-governance risk if operators assume the tool is local-only or pass sensitive business/customer data.
The CLI sets --lang to zh by default, which imposes a specific language choice when the user does not explicitly select one. This is a natural-language locale policy concern because the skill does not offer neutral default behavior or require opt-in before using Chinese.
This plain-text template immediately instructs the model to generate Amazon listing copy but does not specify any trigger phrases, activation boundaries, or exclusion conditions for when the template should or should not be used. For prompt-template assets, that lack of trigger specificity can make downstream invocation logic overly broad if this file is used as a general-purpose skill prompt.
This markdown file contains user-facing instructions only in Chinese, which can constitute a language/locale policy issue when no opt-in or alternative language is offered. The file does not indicate that the skill is region-specific or otherwise justified to require Chinese-only documentation.
The entire pricing document is written in Chinese, and the line item for multilingual translation indicates a surcharge, but the file does not state that the content is region-specific or provide any user opt-in for language/locale selection. Under the stated policy, forcing a specific language without user choice can be a natural-language policy violation.
Line L257 states this file is an "authoritative rules source," implying reliable, verified guidance. However, earlier content includes questionable absolutes such as search-weight claims and unsupported policy-style assertions (for example L013 and other prescriptive sections) without clear sourcing inline, which conflicts with the file's self-described authoritative status.
The dependency specifier requests>=2.31.0 is unpinned, so installs may resolve to different versions over time and across environments. This weakens reproducibility and can unexpectedly introduce vulnerable or breaking releases into development workflows, especially when combined with a package that has a history of security advisories.
-e ../../packages/tokenapi-sdk
-e ../../packages/tokenapi-harness
requests>=2.31.0
Because requests is not pinned to a specific version, it is impossible to verify from this manifest whether the installed release includes fixes for known advisories or resolves to an affected version. In a dev dependency file this is less severe than a runtime production manifest, but it still creates supply-chain uncertainty and may expose local tooling, tests, or CI jobs to known library flaws.
The dependency is specified as requests>=2.31.0, which allows any newer version to be installed and makes builds non-reproducible. This increases supply-chain risk because a future vulnerable or incompatible release could be pulled in without review, and it also prevents auditors from confirming exactly which version is deployed.
requests>=2.31.0
The manifest does not pin the requests version, while the package has multiple known advisories across different releases. Because the installed version is not fixed, it is impossible to verify from this file alone whether deployment will use a vulnerable release, which creates avoidable supply-chain and patch-management risk.
The top-level natural-language documentation is entirely in Chinese and the usage example defaults to '--lang zh', which can be read as imposing a specific language context. Although the code technically supports multiple locales, the visible user-facing instructions in this file do not offer an explicit language choice or opt-in in the documentation itself.
This code passes lang="zh" directly when composing the listing prompt, and the surrounding natural-language strings and assertions are all Chinese-specific. Under the policy, forcing a specific language without user choice or an explicit documented justification can be a locale-policy violation.
No suspicious patterns detected.