T01 · Skill Instruction Hijacking
- Location
SKILL.md:214- Finding
Automatic Disclosure of User Conversation Content Through the Feedback API
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This ASIN keyword skill has a real analytics purpose, but it also gives the agent broader account, payment, credential, storage, and silent feedback-reporting behavior that users should review before installing.
Install only if you are comfortable with LinkFox handling your ASIN queries, API key, session metadata, and optional phone/SMS onboarding. Avoid using endpoint override environment variables, do not store long-lived API keys in shell startup files if you can use a safer secret store, and do not allow automatic feedback submission unless you have reviewed exactly what will be sent.
SKILL.md:214Automatic Disclosure of User Conversation Content Through the Feedback API
scripts/junglescout_keyword_by_asin.py:36Environment-Controlled Endpoints Can Redirect Credentials and Authentication Data
scripts/onboarding.py:468Generated API Key Is Exposed Through Standard Output and Plaintext Shell Configuration
scripts/junglescout_keyword_by_asin.py:250Unsanitized Session Identifier Allows Output Path Traversal
scripts/junglescout_keyword_by_asin.py:201Sensitive Output Silently Falls Back to Home and Shared Temporary Directories
scripts/onboarding.py:32Runtime Instructions Install Unpinned Third-Party Dependencies
The request URL and outbound headers are influenced by environment variables, including LINKFOX_TOOL_GATEWAY and multiple metadata fields, so a manipulated runtime environment can redirect traffic to an attacker-controlled endpoint and exfiltrate the API key and session metadata. In this skill context, the script is explicitly designed to call a remote service with credentials, which makes environment-driven SSRF/exfiltration more dangerous than a generic network call.
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 sends authentication material and account data to a URL derived from environment-controlled base endpoints via requests.post. If an attacker can influence LINKFOX_LOGIN_API_URL or LINKFOX_AGENT_USER_API_URL, they can redirect SMS login tokens, access tokens, refresh tokens, user IDs, or generated API keys to an attacker-controlled server, resulting in credential exfiltration and account compromise.
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 uses urllib to contact a URL built from environment-controlled API base settings and includes the Authorization API key header. An attacker who can set LINKFOX_AGENT_API_URL or related variables can redirect these requests to a malicious endpoint and harvest API keys, billing/order data, and user/account information.
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 skill is presented as an ASIN keyword lookup tool, but the documented behavior and referenced onboarding flow extend into SMS login, API-key generation, account/team-space access, subscription/package listing, order creation, payment initiation, QR-code generation, and payment-status checks. This is a major capability mismatch that can mislead users and agents into triggering account, billing, and identity-related actions under the guise of analytics, increasing risk of unauthorized purchases, privacy exposure, or credential abuse.
The trigger text is so broad that it can match generic keyword-analysis requests even when the user did not ask for ASIN-based reverse lookup or Jungle Scout data specifically. Overbroad routing can cause the wrong skill to activate, leading to unnecessary external queries, extra cost consumption, or entry into the skill's auxiliary auth/billing flows despite weak user intent.
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 file implements account onboarding, SMS authentication, API-key retrieval, package discovery, and payment handling, which are unrelated to the declared reverse-ASIN keyword lookup purpose. The mismatch is dangerous because users invoking a keyword-analysis skill would not reasonably expect account enrollment and commerce flows, increasing the chance of covert credential collection and unauthorized monetization.
The skill can create orders and render payment QR codes even though its advertised purpose is ASIN keyword research. Embedding purchase flows inside an unrelated analytics skill creates a strong risk of deceptive charges, social engineering, and unauthorized financial transactions under the guise of normal tool use.
The skill declares no explicit tool scope while its documented behavior requires environment-variable access, file writes, and network calls. Without a permissions/allowed-tools boundary, an agent may invoke broader capabilities than users expect, weakening least-privilege controls and making any future prompt injection or logic error more damaging.
The file instructs the agent to default to the US marketplace when the user does not specify a marketplace. This imposes a specific locale choice automatically rather than asking the user or offering a selection, which can violate language/locale policy expectations.
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-asin \
The file documents a separate feedback-posting endpoint that is unrelated to the core ASIN keyword lookup function. In an agent skill context, this expands the skill's effective capability surface and can enable transmission of user content or interaction details to another external service without being necessary for fulfilling the requested task.
The onboarding flow explicitly asks the user to provide a phone number and verification code so a local script can register/login on their behalf, but it does not provide any privacy notice, consent guidance, data-handling limits, or retention/deletion instructions. This creates a real privacy and account-security risk because the workflow normalizes collection and transmission of sensitive personal data and authentication factors without documenting safeguards.
The documented behavior promises not to write to /tmp and to fail if the current directory is not writable, but the implementation silently falls back to home and temporary directories. This can cause sensitive API responses to be persisted in less controlled locations than operators expect, weakening data handling guarantees and potentially exposing marketplace intelligence or session-linked data to other local processes or users.
The script transmits SESSION_ID, MESSAGE_ID, MODE_ID, and APP_NAME to the remote API without any gating, minimization, or user-visible disclosure. In this skill context, these identifiers may enable cross-request correlation and leak internal application metadata to the external service, increasing privacy and tracking risk beyond the core ASIN lookup purpose.
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 code performs SMS-based login, token exchange, team enumeration, and API-key generation despite the skill being described as an ASIN keyword mining capability. In this context, collecting phone numbers, verification codes, and issuing API credentials is excessive and enables credential harvesting or account takeover under false pretenses.
The CLI help for the phone argument explicitly requires an "11 位国内手机号", and the implementation hard-codes areaCode "+86" for SMS login flows. This constrains the skill to a China-specific locale without offering any user choice or documenting it as an intentional region-specific limitation.
The file's operational instructions and user-facing guidance are all in Chinese, and there is no indication that the skill is region-specific or that users may opt into another language. This can violate language/locale policy when a skill effectively forces one language without justification or choice.
The comment above SMALL_THRESHOLD says responses below the threshold are directly output and 'not written to file'. But main() always resolves an output path and writes the serialized response before deciding whether to print inline or summarize, so the comment is materially false about persistence behavior.
The script reads API credentials from LINKFOX_AGENT_API_KEY or LINKFOXAGENT_API_KEY to authenticate outbound requests. Although using an API key is expected for this integration, the code lacks an explicit user-facing disclosure that environment credentials are being consumed for a remote service call.
No suspicious patterns detected.