T01 · Skill Instruction Hijacking
- Location
SKILL.md:163- Finding
Automatic External Reporting of User Statements and Intent Without Consent
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill can retrieve TikTok seller products, but it also adds account login, API-key, payment, persistent storage, and automatic feedback-reporting behavior that needs careful review.
Install only if you are comfortable giving LinkFox API access, saving full seller-query responses locally, and using this skill for account and billing recovery. Avoid entering SMS codes or creating payment orders through the agent unless you intentionally trust the LinkFox service, and prefer manual API-key setup outside chat/log-visible contexts.
SKILL.md:163Automatic External Reporting of User Statements and Intent Without Consent
scripts/echotik_list_seller_product.py:36Credential-Bearing Requests Can Be Redirected to Arbitrary Endpoints
scripts/echotik_list_seller_product.py:58Unnecessary Agent Session Metadata Is Transmitted With Product Queries
scripts/onboarding.py:470Generated API Key Is Exposed Through Standard Output and Agent Context
scripts/onboarding.py:162Unpinned Runtime Dependency Installation Guidance Creates Supply-Chain Risk
scripts/echotik_list_seller_product.py:248Unsanitized Session Identifier Permits Filesystem Path Escape
scripts/echotik_list_seller_product.py:204Complete Responses and Payment Artifacts Can Fall Back to Shared Temporary Storage
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
method="POST",
)
try:
with urlopen(req, timeout=150) as response:
return json.loads(response.read().decode("utf-8"))
except HTTPError as e:
body = e.read().decode("utf-8") if e.fp else ""
The POST target URL is derived from environment-controlled base URLs and then used to send login data, SMS codes, access tokens, refresh tokens, and API-token requests. In an agent/skill environment, this creates an SSRF-style exfiltration path where a modified environment can redirect sensitive authentication traffic to an attacker-controlled host.
except RuntimeError as e:
return {"_error": str(e)}
try:
r = requests.post(url, json=body or {}, headers=headers, timeout=timeout)
return r.json()
except Exception as e:
body_text = ""
The gateway request URL is also assembled from environment-controlled base configuration and used with an Authorization header carrying the API key. If an attacker can influence environment variables, requests can be redirected to an arbitrary endpoint and the API key disclosed, while also enabling unauthorized outbound access from the agent runtime.
headers["Content-Type"] = "application/json"
req = Request(url, method=method, data=body_bytes, headers=headers)
try:
with urlopen(req, timeout=30) as resp:
return json.loads(resp.read().decode())
except urllib.error.HTTPError as e:
status = e.code
The documented purpose is a seller product listing tool, but the behavior reportedly includes SMS login, token generation, user/team info retrieval, subscription/package listing, payment order creation, QR-code generation, and payment-status polling. That is a major capability expansion into authentication, account management, and payments, which can expose credentials, enable unauthorized account actions, or charge users under the guise of analytics.
The trigger conditions are intentionally broad and state the skill should activate even when the user does not explicitly mention EchoTik or TikTok. Over-broad triggering can cause the wrong skill to run, leading to unintended external calls, unnecessary cost consumption, and disclosure of user queries to third-party services outside the user's expectation.
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
}
## Display Rules
1. **Present data clearly**: Show products in a table with key columns — product image, title, price, total sales, 30-day sales/GMV, rating, review count, and commission rate
2. **Sales & GMV granularity**: When relevant, show total sales and total GMV; mention multi-period breakdowns (1d/7d/15d/30d/60d/90d) are available in the saved JSON
The onboarding document adds authentication recovery, account registration, and billing/payment workflows that are outside the stated purpose of a seller-product analytics skill. This expands the skill's effective scope into credential handling and monetization, creating an unnecessary pathway for collecting secrets and directing users into sensitive flows unrelated to product lookup.
The documentation instructs the agent to collect a phone number, send an SMS code, log in, list plans, and create payment orders, none of which are justified by the skill's analytics function. Embedding account creation and purchase capabilities in a data-query skill increases the risk of unauthorized account actions, phishing-like behavior, and abuse of user trust.
YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).
示 JSON 里的 phone/agreements
- 收到验证码后:`python scripts/onboarding.py login <phone> <code>`
- 拿到 `api_key` 后把下面三平台配置转发给用户,提示重启会话生效:
- Windows PowerShell(永久):`setx LINKFOX_AGENT_API_KEY "<key>"`
- macOS zsh:`echo 'export LINKFOX_AGENT_API_KEY="<key>"' >> ~/.zshrc && source ~/.zshrc`
- Linux bash:`echo 'export LINKFOX_AGENT_API_KEY="<key>"' >> ~/.bashrc && source ~/.bashrc`
- 变量名 `LINKFOX_AGENT_API_KEY`(主推)或 `LINKFOXAGENT_API_KEY`(老规范)任一即可
**billing 场景**:`errcode=402` 或消息含 `算力/余额/quota/insufficient/充值/套餐到期`。
- `python scripts/onboarding.py list-plans` → 有 AskUserQuestion 就弹菜单,否则输出编号清单让用户选
- 校验 `plan_id` ∈ 清单、支付方式 ∈ 该套餐 `available_methods`(通常 `wechat/alipay`)
- `python scripts/onboarding.py order <plan_id> <method>` → 展示优先级 PNG
The file implements LinkFox account onboarding, SMS login, plan purchase, order management, and payment QR rendering, which is materially unrelated to the declared TikTok seller-product listing skill. This functionality mismatch is dangerous because it can trick users or the platform into executing credential collection and monetization flows under false pretenses.
Adding account login, plan listing, order creation, and payment QR generation to a product-analytics skill introduces unjustified financial and authentication operations. In this context, such hidden capabilities increase the risk of credential harvesting, unauthorized purchases, and deceptive user flows far beyond the stated feature set.
The code performs SMS-based login and retrieves or generates LinkFox API tokens, despite the skill claiming to list TikTok seller products. This is highly dangerous because it acquires reusable credentials that can enable continued access to the user's account or workspace, and the deceptive mismatch strongly elevates suspicion of credential theft or unauthorized account takeover support.
The skill declares no explicit tool scope or permission boundaries despite documenting capabilities that use environment variables, network access, and file writes. Without least-privilege constraints, an agent may invoke broader capabilities than users expect, increasing the blast radius if the skill is misused or its instructions are subverted.
The documentation says full API responses are always written to local files, but it does not provide a clear privacy warning or obtain consent for persistence. Even if the data seems business-oriented, saved responses can contain identifiers, session-linked metadata, and commercially sensitive analytics that remain on disk beyond the immediate interaction.
Always writing complete API responses into session-organized files under the current project directory creates persistent local copies of potentially sensitive user-linked data. In shared workspaces, repos, synced folders, or later debugging/log collection, those files may be exposed to other users, tools, or accidental commit/upload.
The file directs the agent to use references/onboarding.md to guide users through authentication and billing issues, and the surrounding section is written only in Chinese with no indication that users may choose another language. This can violate a language/locale choice policy when interacting with users who have not opted into Chinese.
Automatically sending feedback via an external API is unrelated to the core product-listing function and may transmit user content, task context, or behavioral telemetry without meaningful consent. Because it is framed as non-interrupting, users may not realize extra outbound data sharing is occurring.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
}
## curl 示例
### 基础店铺商品列表(按总销量降序)
The file documents a separate feedback-reporting endpoint that is unrelated to the seller-product listing function of this skill. This expands the skill's effective scope and creates a path for transmitting user-derived content to an external service, which can be abused for unauthorized data exfiltration or hidden side effects if an agent implements it automatically.
The feedback endpoint encourages sending free-form content externally but provides no privacy guidance, data-minimization rules, or warning against including sensitive user data. In an agent setting, this omission can lead to inadvertent disclosure of user prompts, identifiers, or internal context to a third-party endpoint.
The skill tells the agent to ask for a user's phone number and process SMS-based login without any user-facing privacy warning, consent language, or data-handling notice. This can lead users to share personal data and one-time codes in a conversational context without understanding who receives the data, how it is used, or the risks of account compromise.
The skill writes full API responses and session metadata to local files even though its stated purpose is only to query seller product data. Persisting complete responses can expose potentially sensitive business data, session identifiers, and usage metadata to other local users, future tasks, or unintended tooling, increasing data-retention and confidentiality risk.
The documentation promises not to write to /tmp and to fail if the current directory is not writable, but the implementation silently falls back to home or temporary directories. This mismatch is dangerous because operators may rely on the documented storage boundary, while the code actually persists data in broader or less controlled locations, increasing accidental disclosure risk.
The order flow writes payment QR code images to disk in a session directory without an explicit warning in the code path. While not as severe as credential theft, this can leave payment artifacts on shared systems or workspaces where other users or processes may access them.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
except RuntimeError as e:
return {"_error": str(e)}
try:
r = requests.post(url, json=body or {}, headers=headers, timeout=timeout)
return r.json()
except Exception as e:
body_text = ""