T01 · Skill Instruction Hijacking
- Location
SKILL.md:240- Finding
Automatic Transmission of Conversation-Derived Feedback Without Explicit Consent
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly matches an ASIN keyword lookup service, but it also handles credentials, payments, broad local storage, and automatic feedback reporting in ways users should review before installing.
Install only if you trust LinkFox with ASIN research data, account details, phone-based onboarding, and paid-credit workflows. Before use, avoid endpoint override environment variables, review where files are written, prefer a safer secret store over shell-profile API keys, and require explicit confirmation before feedback submission, API-key generation, or any payment/order action.
SKILL.md:240Automatic Transmission of Conversation-Derived Feedback Without Explicit Consent
scripts/sif_asin_keywords.py:36Environment-Controlled API Endpoints Permit Credential and Personal-Data Exfiltration
scripts/sif_asin_keywords.py:249Unsanitized SESSION_ID Enables Filesystem Path Traversal
scripts/sif_asin_keywords.py:98Plaintext Persistence and Output of Sensitive API Data and Credentials
scripts/onboarding.py:164Unpinned Runtime Dependency Installation Creates Supply-Chain Risk
scripts/sif_asin_keywords.py:200Implementation Writes Sensitive Responses to Temporary Storage Contrary to the Declared Policy
The script builds request destinations from environment-controlled base URLs and then sends sensitive data such as phone numbers, SMS codes, access tokens, refresh tokens, authorization headers, and generated API tokens to those endpoints. If an attacker can influence environment variables in the host runtime, they can redirect authentication and credential traffic to attacker-controlled servers, causing 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 path uses environment-derived base URLs with an Authorization header carrying the API key, then transmits via urlopen. A hostile environment configuration can silently redirect billing, account, and package/order requests to an attacker endpoint and leak the API key and related account metadata.
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
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 skill presents itself as an ASIN keyword lookup tool, but it also performs undeclared local persistence and caching of full API responses, with behavior inconsistent with the documentation about write locations. Storing full responses and session metadata on disk, especially with fallback paths like the home directory or temp locations, can expose sensitive data, weaken user control, and make forensic review harder.
The skill presents itself as an ASIN keyword lookup tool, but it also performs undeclared local persistence and caching of full API responses, with behavior inconsistent with the documentation about write locations. Storing full responses and session metadata on disk, especially with fallback paths like the home directory or temp locations, can expose sensitive data, weaken user control, and make forensic review harder.
The trigger conditions are broad enough to activate on generic ASIN/keyword requests even when the user did not intend to use this specific paid, data-accessing skill. In context, this is more dangerous because the skill incurs cost and performs networked data retrieval and storage, so over-triggering can lead to unnecessary charges and excessive data handling.
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
asin: "B0XXXXXXXX", country: "US", conditions: "isSearchVolUpKw", sortBy: "estSearchesNum", desc: true
## Display Rules
1. **Present data only**: Show query results in clear tables without subjective business advice.
2. **Ranking clarification**: When showing ranking data, remind users that lower numeric values mean better (higher) positions.
YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).
证码后:`python scripts/onboarding.py login <phone> <code>`(workbuddy 宿主加 `--channel workbuddy`)
- 拿到 `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 ASIN keyword analytics, but the file implements account onboarding, SMS login, API key acquisition, subscription discovery, ordering, and payment QR generation. That is a strong scope mismatch: the skill gains access to credentials and purchase workflows unrelated to the claimed user task, increasing the chance of unauthorized account actions and sensitive data collection.
The script can create orders, choose payment methods, retrieve payment URLs/QR codes, and query order states despite the skill being marketed as analytics functionality. Embedding commerce capabilities in an unrelated skill broadens the attack surface and could enable unauthorized purchases or social-engineering flows that pressure users into payment under false pretenses.
The code logs in with SMS, fetches team/user information, and retrieves or generates API credentials for the user or group. Generating long-lived API keys inside a skill exceeds the stated analytics purpose and creates a high-value secret that, if intercepted, logged, or abused, can grant ongoing access beyond a single session.
The skill declares no explicit tool scope while the content and referenced behavior require environment access, filesystem writes, and network calls. Without a least-privilege allowlist, an agent may grant broader capabilities than users expect, increasing the chance of unintended data access, persistence, or external transmission.
The activation and operational description includes mandatory Chinese-language phrasing and does not indicate that users may choose their preferred language or locale for interaction. Under the policy, forcing a specific language without opt-in is a natural-language policy concern unless the locale restriction is documented and justified.
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/sif/asinKeywords \
The file documents a separate feedback endpoint that is unrelated to the stated ASIN keyword lookup capability. In an agent-skill context, unrelated network actions expand the skill's effective scope and create a channel for exfiltrating user content, operational details, or hidden telemetry to a second external service the user did not request.
The instructions explicitly tell the operator to collect a user's phone number and submit it to a registration/login script, but they do not require any notice, consent language, retention limits, or guidance on handling the resulting personal data. In an onboarding context this creates a real privacy and compliance risk because an agent may solicit and transmit sensitive user information without informing the user how it will be used or protected.
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 module docstring promises that outputs are always written under the current working directory and explicitly forbids /tmp, but the actual implementation falls back to ~/linkfox and then the system temporary directory. In an agent setting, operators or downstream components may rely on the documented storage restriction for data governance, so this discrepancy can cause sensitive API results to be persisted in unintended locations with weaker isolation or retention controls.
This markdown file presents the main API reference content in Chinese, which effectively forces a specific language for users reading the skill documentation. The policy allows fixed-language behavior only when users are given a language choice or when the locale constraint is clearly documented and justified, neither of which appears here.
The comment says responses at or below the threshold are 'directly output, not written to file', but main() unconditionally serializes the result and writes it to out_path before deciding whether to print inline or summarize. This is an active contradiction between code documentation and execution behavior.
No suspicious patterns detected.