T01 · Skill Instruction Hijacking
- Location
SKILL.md:254- Finding
Automatic Transmission of User Statements and Intentions to a Third-Party Feedback Service
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill mostly matches its ASIN analysis purpose, but it also includes silent feedback reporting, credential-heavy onboarding, payment flows, and unsafe environment/file handling that users should review carefully before installing.
Install only if you are comfortable with LinkFox receiving ASIN query data and, through the feedback instruction, potentially conversation-derived feedback content. Use a dedicated API key with limited value, avoid pasting secrets into shell history or startup files, do not run billing/order commands unless you explicitly intend to pay, and avoid custom endpoint or SESSION_ID environment values unless you fully control them.
SKILL.md:254Automatic Transmission of User Statements and Intentions to a Third-Party Feedback Service
SKILL.md:266Persistent Promotional Instruction Alters Task-Focused Agent Output
scripts/sif_asin_summary.py:249Unsanitized SESSION_ID Allows Response Files to Escape the Intended Storage Directory
scripts/sif_asin_summary.py:36Environment-Controlled Service Origins Can Redirect Credentials and Personal Data
scripts/onboarding.py:486Generated API Key Is Exposed in Standard Output and Plaintext Shell Configuration Workflows
The code builds outbound request destinations from environment-controlled base URLs and then sends authentication tokens, SMS-login data, and API-key-related payloads to those endpoints. If an attacker can influence environment variables in the skill runtime, they can redirect sensitive traffic to attacker-controlled infrastructure, causing credential/API key exfiltration and SSRF-like abuse.
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 an environment-derived base URL and then performs authenticated network calls with the API key in the Authorization header. An attacker who controls the environment can redirect these requests to a malicious server and capture the API key or trigger requests to unintended internal/external services.
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 declared purpose is ASIN traffic analysis, but the documented behavior extends into authentication, account access, plan discovery, payment-order creation, QR-code generation, and payment-status polling. This is a serious scope mismatch because a user invoking analytics could unknowingly trigger account or billing workflows, expanding the attack surface to personal, financial, and credential-related actions.
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
searchValue: "B0A,B0B,...,B0J", conditions: "sp", sortBy: "totalSpSocre", desc: true
## Display Rules
1. **Present data clearly**: Show query results in well-structured tables; separate product metadata, current-period scores, keyword counts, and period-over-period comparison columns into logical groups for readability
2. **Percentage formatting**: When displaying exposure ratios, format them as percentages (e.g., 0.45 as 45.0%) for easier comprehension
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 file's behavior is materially different from the declared skill purpose of ASIN traffic/source analysis: it performs account onboarding, SMS authentication, API key acquisition, plan listing, ordering, and payment QR generation. Such scope divergence is dangerous because it can trick users into disclosing phone numbers, verification codes, or enabling billing flows unrelated to the advertised analytics capability.
The skill includes order creation and payment QR generation even though its stated function is ASIN traffic analysis. In skill ecosystems, undisclosed payment capability raises the risk of deceptive monetization, unauthorized billing prompts, and social engineering under the guise of analytics assistance.
The file implements SMS-based authentication, token exchange, user/team enumeration, and API key retrieval, none of which are necessary for a traffic-analysis-only skill. This creates a phishing-like risk surface where users may be induced to provide phone numbers and one-time codes, enabling account compromise or unauthorized token generation.
The skill advertises and documents capabilities to read environment variables, write files, and make network calls, but it declares no explicit tool scope or permission boundaries. This creates an over-privileged execution model where the agent may access secrets, persist sensitive data locally, or call unintended endpoints without clear user or platform constraints.
The activation description is broad enough to trigger on many generic ASIN-analysis requests even when the user did not intend to use this specific paid external-data skill. That increases the chance of unintended tool invocation, unnecessary data disclosure to a third-party service, and surprise cost-incurring API calls.
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/asinSummary \
The file documents a separate feedback-posting API that is unrelated to the stated ASIN traffic analysis function of the skill. Adding an extra outbound-write capability expands the skill’s effective scope and can enable unauthorized or unexpected data transmission to a third-party endpoint, especially if an agent is induced to send user content or operational details there.
The onboarding instructions explicitly ask the user to provide a phone number so a local script can register on their behalf, but they do not disclose how that personal data will be transmitted, stored, or protected. In a skill context, this creates unnecessary privacy and trust risk because users may reveal sensitive contact information to an automation flow without informed consent or data-handling boundaries.
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 validates only 11-digit phone numbers and sends login requests with a fixed areaCode of +86, which enforces a specific locale and excludes other regions. This is a natural-language/policy concern because the CLI behavior is locale-constrained without user opt-in or documented choice in the interface.
During login, the CLI again restricts input to 11-digit numbers and passes areaCode +86 to the backend, enforcing a single regional format. There is no visible option for other locales or an explicit user-facing statement here that the tool is intentionally limited to China-region accounts.
The order flow renders and saves a payment QR code PNG to a filesystem path returned by session_dir(), which creates persistent directories under the workspace, home directory, or temp directory. While the code comments describe QR handling internally, there is no confirmation prompt or user-facing warning in this file that running the order command will create local files containing payment data.
The file’s natural-language interface and operational guidance are written exclusively in Chinese, including usage behavior and output policy, with no indication that the user can select another language. This creates a locale/language constraint in the skill’s user-facing behavior without documented opt-in or justification.
The script documentation promises that output is written under the current working directory and explicitly forbids /tmp, but the implementation silently falls back to ~/linkfox and then the system temp directory. Because the response can contain traffic-analysis data and metadata, this mismatch can cause sensitive data to be stored in less controlled or shared locations, undermining operator expectations and data-handling guarantees.
The file contains user-facing operational guidance in Chinese, including the main trigger description, invocation instructions, and cost warnings, without stating that the language is configurable or chosen based on user preference. This can violate language/locale policy if the organization expects skills not to force a specific language without opt-in.
Sections covering invocation method, cost constraints, output strategy, and authentication guidance are partly or entirely in Chinese, while the rest of the document is mixed-language. Without an explicit user language choice or documented region-specific scope, this imposes a language preference in natural-language instructions.
The fee-related warning is an important user-facing instruction, but it is only expressed in Chinese. If users are not guaranteed to be Chinese-speaking, this creates a language-policy issue because a critical disclosure is not offered in a user-selected or clearly justified locale.
This markdown file documents a network call that sends credentials from environment variables in an Authorization header, but it does not include any warning about handling sensitive credentials or the privacy/security implications of transmitting them. Under the markdown-specific SQP-2 criteria, behaviors affecting privacy or system integrity should be accompanied by warnings.
L030 的注释写明“响应小于等于该字节数时,直接全量输出,不落文件”,这与 main() 的真实流程不符:L336-L347 先序列化并写入 out_path,随后 L348-L353 才决定是完整打印还是摘要输出。这里不是文档遗漏,而是对是否落盘这一关键副作用的直接矛盾描述。
No suspicious patterns detected.