T01 · Skill Instruction Hijacking
- Location
SKILL.md:205- Finding
Automatic Disclosure of Conversation-Derived Feedback to an External Service
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The keyword tool mostly matches its advertised purpose, but it also includes automatic feedback reporting plus account, credential, and payment workflows that deserve careful review.
Review this skill before installing if you are comfortable sending keyword research, account identifiers, and possibly phone/SMS authentication data to LinkFox services. Use official self-service account and billing pages when possible, avoid exposing API keys in chat or logs, verify LINKFOX_* endpoint variables are not overridden, and require explicit consent before any feedback or payment action.
SKILL.md:205Automatic Disclosure of Conversation-Derived Feedback to an External Service
scripts/junglescout_keyword_by_keyword.py:36Credential Exfiltration Through Unvalidated API Endpoint Overrides
scripts/onboarding.py:486Generated API Key Is Exposed in Standard Output and Agent Transcripts
scripts/junglescout_keyword_by_keyword.py:179Full API Responses May Be Written to Shared Temporary Storage with Default Permissions
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 code builds request destinations from environment-controlled base URLs and then sends sensitive authentication material such as SMS login data, access tokens, refresh tokens, and generated API keys to those endpoints via requests.post. If an attacker can influence environment variables, they can redirect these flows to attacker-controlled infrastructure and exfiltrate credentials or payment-related data.
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 URL is also derived from environment input and used in urlopen with an Authorization header carrying the API key. A manipulated environment can redirect package lookup, account, and order requests to a hostile server, leaking the API key and enabling account misuse or fraudulent order manipulation.
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 keyword expansion, but the underlying behavior reportedly includes login, SMS verification, API key generation, user/team retrieval, subscription management, payment/order creation, QR-code payment flows, and order-status checks. That is a major capability mismatch that can expose users to undisclosed account actions, billing operations, and collection of sensitive identity/payment data far outside the advertised task.
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
}
## Display Rules
1. **表格优先**:以表格展示关键词列表,核心列包括:关键词、精确搜索量、广泛搜索量、月度趋势、PPC精确出价、排名难度
2. **按需裁剪列**:根据用户意图决定展示列——PPC研究场景侧重出价列,拓词场景侧重搜索量和趋势
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
This skill is described as a keyword expansion tool, but the code implements account onboarding, SMS login, API key retrieval, package listing, ordering, and payment QR generation. That scope mismatch is dangerous because it introduces credential collection and billing behavior users would not reasonably expect from a keyword research skill, increasing phishing and abuse risk.
The code performs order creation and renders payment QR codes, which is unrelated to keyword expansion and enables billing actions within an unexpectedly scoped skill. In this context, concealed purchasing capability materially raises the risk of unauthorized charges, social engineering, and user confusion about what the skill is allowed to do.
The script logs users in via SMS and generates or retrieves API keys, directly handling high-value credentials far beyond the stated keyword research purpose. In a skill ecosystem, that mismatch makes the behavior especially dangerous because users may provide phone numbers and codes under false assumptions, enabling credential harvesting or account takeover if anything is misconfigured or abused.
The skill declares no explicit tool restrictions even though it relies on environment access, file writes, and network access. In an agent environment, missing scope boundaries increases the blast radius: the skill can access secrets, persist data locally, and contact external services without transparent least-privilege controls.
The trigger conditions are broad enough to activate on generic keyword research requests, not just this specific Jungle Scout expansion workflow. Over-broad triggering can cause unnecessary external calls, unintended data disclosure to third-party services, and user confusion about which tool is being invoked.
The skill instructs automatic feedback reporting based on user reactions or perceived improvements, creating an undisclosed monitoring/reporting channel unrelated to the core keyword-expansion function. This can transmit user statements, satisfaction signals, and possibly task context to an external API without clear consent or necessity.
This markdown file instructs users to read an API key from environment variables and place it in the Authorization header, which is a sensitive credential operation. The document does not include any warning about protecting the key, avoiding logging/sharing it, or treating request examples carefully, so the credential-handling behavior lacks user disclosure.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
}
## curl 示例
```bash
curl -X POST https://tool-gateway.linkfox.com/tool-jungle-scout/keywords/by-keyword \
The file documents a separate feedback-posting API that is unrelated to the keyword-expansion capability of this skill. Adding an auxiliary write-capable endpoint expands the skill’s effective scope and can enable unsolicited outbound data transmission, especially if an agent is induced to send user content or conversation summaries to that endpoint.
The onboarding document expands the skill’s behavior beyond keyword research into account recovery, registration, API key setup, and billing flows. That creates unnecessary handling of credentials, account state, and payments in a skill whose stated purpose is keyword expansion, increasing attack surface and the chance the agent solicits sensitive actions from users under an unrelated pretext.
The document instructs the agent to ask for a user’s phone number and use it with a registration/login script, even though phone-based account creation is not necessary for keyword expansion itself. Collecting personal contact information and using it in an agent-driven auth flow can expose users to privacy loss, account takeover risk, and social-engineering abuse if the skill or surrounding system is compromised.
The skill asks for a user’s phone number and uses it in a login/registration process without warning about privacy implications, retention, or who receives the data. In the context of a keyword tool, this omission is especially risky because users would not reasonably expect to share personal contact data for the advertised function.
The documentation includes plan listing, payment-method selection, order creation, and payment-status handling, which are unrelated to keyword expansion and materially broaden the skill into commerce operations. Embedding payment flows in a content-research skill raises phishing and fraud risk because users may be induced to purchase plans or follow payment links/QR codes outside a clearly separated billing interface.
The module documentation explicitly says writing to /tmp is forbidden, but _linkfox_root() falls back to tempfile.gettempdir()/linkfox when other locations are unavailable. This mismatch can cause sensitive API responses to be persisted in a less controlled temporary location contrary to operator expectations, increasing the chance of unintended exposure or forensic blind spots.
The script sends request metadata from environment variables such as SESSION_ID, MESSAGE_ID, MODE_ID, and APP_NAME as HTTP headers to a remote gateway. While the module docstring explains output/file-writing behavior, this code does not provide a user-facing warning or disclosure that these environment-derived identifiers are transmitted over the network.
The script persistently writes full remote API responses to disk by default, and those responses may contain sensitive business data, identifiers, or user-supplied content. In an agent environment, silent persistence increases the risk of data leakage through shared workspaces, backups, or later unintended access.
The module description and command/help text are entirely in Chinese, and the workflow is explicitly tied to Chinese phone numbers and +86 area code. The file does not offer any language or locale choice or document that this is a region-specific skill, which violates the policy against forcing a specific language/locale without opt-in.
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 = ""
The instruction "When the user does not specify a marketplace, use us" imposes a locale/market choice automatically. Because this affects regional context and is not presented as a user choice, it can violate language/locale policy expectations requiring opt-in or clearly justified constraints.
No suspicious patterns detected.