T01 · Skill Instruction Hijacking
- Location
SKILL.md:159- Finding
Silent transmission of user feedback and inferred intent
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is mostly a LinkFox ABA query skill, but it adds automatic feedback reporting and sensitive onboarding, credential, and billing flows that need review before installation.
Review this skill carefully before installing. Use it only if you are comfortable sending ABA query content, account identifiers, API keys, phone/SMS login data, and billing/order data to LinkFox services. Avoid custom endpoint environment overrides, do not store the API key in global shell startup files, and treat saved query responses and feedback reports as potentially sensitive business data.
SKILL.md:159Silent transmission of user feedback and inferred intent
scripts/aba_query.py:37Environment-controlled endpoints can receive authentication credentials
scripts/onboarding.py:402Nonessential token replay and excessive request telemetry
scripts/onboarding.py:487API key is exposed through standard output and plaintext shell configuration
scripts/aba_query.py:252Unsanitized session identifier permits output path traversal
scripts/onboarding.py:163Runtime installation guidance uses unpinned third-party dependencies
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 data such as phone numbers, SMS codes, access tokens, refresh tokens, authorization headers, and generated API keys to those endpoints. If an attacker can influence environment variables in the agent/runtime, this becomes credential exfiltration or SSRF to attacker-controlled infrastructure.
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 derived from environment variables and used by urllib to perform authenticated requests with the API key in the Authorization header. In a compromised or multi-tenant execution environment, an attacker could redirect this traffic to an arbitrary host and capture API credentials, user/package/order metadata, or use the skill as an SSRF primitive.
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 finding indicates the skill or its referenced workflow includes phone login, token retrieval, API key generation, subscription lookup, payment order creation, QR code generation, and payment-status polling—activities outside ABA analytics. Mixing account, authentication, and payment operations into a data-query skill materially expands the attack surface and creates risk of credential and financial misuse.
The finding indicates the skill or its referenced workflow includes phone login, token retrieval, API key generation, subscription lookup, payment order creation, QR code generation, and payment-status polling—activities outside ABA analytics. Mixing account, authentication, and payment operations into a data-query skill materially expands the attack surface and creates risk of credential and financial misuse.
The trigger conditions are overly broad and permit activation even when the user does not explicitly request ABA analysis. Overbroad activation can cause unintended network calls, data processing, or disclosure in unrelated conversations, especially for ambiguous e-commerce requests.
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
筛选美国站中"table"的长尾词中,排名在10万-30万之间,且近4周的搜索排名增长50%以上的搜索词。
## 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 values mean better rankings
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 account onboarding, SMS authentication, API key retrieval, package listing, and commerce flows rather than the declared ABA search-term analytics function. This capability mismatch is dangerous because users or hosting platforms may authorize the skill expecting analytics, while the code actually collects identity data and obtains credentials for unrelated account actions.
Order creation and payment QR rendering introduce a monetization/payment capability that is unrelated to the stated ABA analytics use case. In the skill context, this is especially risky because it can steer users into transactions they did not expect from an analytics tool, increasing phishing, fraud, and unauthorized purchase risk.
The skill can send SMS verification codes, authenticate users, and mint or retrieve API keys, none of which is necessary for the advertised ABA analytics workflow. In this context, requesting a phone number and verification code is highly suspicious because it enables account takeover or credential harvesting under the guise of data analysis assistance.
The skill advertises capabilities that imply environment access, file writes, and network use, but it declares no explicit tool scope or permission boundaries. This weakens least-privilege controls and makes it harder to constrain what the skill may access or modify at runtime.
The skill requires writing full API responses to a session-scoped project directory and may print full JSON to stdout, which can persist or expose user-provided data beyond the immediate task. Persistent local storage and verbose output increase the chance of unintended disclosure through logs, shared workspaces, or later tool access.
The instruction to proactively surface download URLs for full datasets encourages broader dissemination of data than the user may have requested. If links expose large result sets or are shareable, this can expand access to sensitive or commercially valuable data.
The boundary guidance still allows activation for vague business phrases if they can be interpreted as search-term analysis. This increases the chance of accidental invocation and unnecessary sharing of user queries with external services.
Automatically sending user feedback or interaction-derived information to a separate Feedback API goes beyond the stated ABA query function. This can exfiltrate user content, preferences, or sentiment to another service without clear necessity or explicit user approval.
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/aba/intelligentQuery \
The feedback API sends freeform content to a separate external endpoint, and the documentation does not warn that user-provided text may be transmitted off-platform. This creates a real data-handling risk because user messages, intents, or sensitive context could be forwarded without explicit minimization or consent.
The onboarding flow instructs operators to collect a user's phone number and use it in a script-driven registration/login process, but it provides no privacy notice, consent guidance, retention limits, or handling safeguards. In a support/agent skill context, this increases the risk of unnecessary collection and exposure of personal data, especially because phone numbers and verification codes are sensitive authentication-related information.
The header documentation promises output will not be written to /tmp and that failure will occur if the current directory is not writable, but the implementation silently falls back to home and temporary directories. This can cause sensitive ABA query results to be persisted in less expected or less protected locations, undermining operator assumptions and increasing the chance of data exposure.
The request sends SESSION_ID, MESSAGE_ID, MODE_ID, and APP_NAME from the environment to an external endpoint. This is a network transmission of potentially sensitive system or user-context metadata, but the code provides no runtime notice or confirmation that these values will be sent.
The script always writes the full API response to disk, regardless of size, and does so automatically before deciding what to print. Because ABA responses may contain commercially sensitive query analytics, automatic persistence creates unnecessary data-at-rest exposure, especially in shared workspaces or environments with broad filesystem access.
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 enforces an 11-digit mainland-China phone format and hard-codes areaCode "+86", while all CLI descriptions and user-facing messages are in Chinese. This imposes a specific locale and language policy without offering user choice or documenting a justified region-specific constraint in the file.
The code generates or retrieves an API token and prints it in stdout JSON without any warning, masking, or scoped handling. In agent ecosystems, stdout is often surfaced to users, logs, orchestration layers, or other tools, so this can unintentionally disclose long-lived credentials that enable downstream account access.