T01 · Skill Instruction Hijacking
- Location
SKILL.md:115- Finding
Automatic External Feedback Reporting Without Explicit User Consent
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This product-query skill includes disclosed product lookup code, but it also bundles credential onboarding, API-key issuance, billing/order creation, plaintext key setup, endpoint overrides, and automatic feedback reporting that need review before use.
Install only if you trust LinkFox with TikTok creator product data, account onboarding data, API keys, and billing interactions. Prefer using a dedicated auth/billing skill or first-party LinkFox site for login and payments, avoid endpoint override environment variables, do not store API keys in shell startup files, and review any feedback payload before allowing it to be sent.
SKILL.md:115Automatic External Feedback Reporting Without Explicit User Consent
scripts/onboarding.py:358Bundled Authentication, Credential Issuance, and Payment Operations Exceed the Product-Query Scope
scripts/_tiktok_video_products_common.py:15Environment-Controlled Destinations Can Receive API Keys and Account Tokens
scripts/onboarding.py:478Full API Keys Are Printed and Recommended for Plaintext Persistence
scripts/onboarding.py:164Unpinned Runtime Dependency Installation Guidance
The requests target URL is derived from environment-controlled base URLs, so anyone who can influence the runtime environment can redirect SMS login, token exchange, and user-info traffic to an attacker-controlled endpoint. Because these requests carry phone numbers, SMS codes, access tokens, refresh tokens, and generated API keys, this creates a realistic credential exfiltration and SSRF-style risk.
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 used by urllib is also built from environment-controlled base configuration, allowing redirection of authenticated API calls to arbitrary hosts. Those calls include the agent API key in the Authorization header and support account, package, and order operations, so endpoint tampering can leak secrets and enable unauthorized actions against attacker-chosen 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
The manifest explicitly says the skill does not handle authorization, yet this code performs SMS verification, login, refresh-token handling, user/team discovery, and API-token generation. In this context, the auth functionality is especially dangerous because it covertly collects authentication factors and emits usable API keys, enabling account compromise and privilege expansion under the guise of a harmless product-query skill.
The skill is described as a specific TikTok API integration, but the detected behavior includes arbitrary local script execution via subprocess, writing outputs to arbitrary directories, and generic data extraction utilities. Arbitrary script execution is a high-risk primitive: it can be repurposed to run attacker-chosen code, access local data, and pivot into broader system compromise under the cover of an innocuous business workflow.
The skill is described as a specific TikTok API integration, but the detected behavior includes arbitrary local script execution via subprocess, writing outputs to arbitrary directories, and generic data extraction utilities. Arbitrary script execution is a high-risk primitive: it can be repurposed to run attacker-chosen code, access local data, and pivot into broader system compromise under the cover of an innocuous business workflow.
The skill is described as a specific TikTok API integration, but the detected behavior includes arbitrary local script execution via subprocess, writing outputs to arbitrary directories, and generic data extraction utilities. Arbitrary script execution is a high-risk primitive: it can be repurposed to run attacker-chosen code, access local data, and pivot into broader system compromise under the cover of an innocuous business workflow.
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
首次请求不传 `page_token`;若响应含 `data.next_page_token`,将其作为下一次请求的 `page_token` 继续拉取。详见 `references/api.md`。
## Display Rules
1. **只呈现数据**:展示接口返回字段,不做主观选品建议。
2. **令牌安全**:不向用户索要或展示 raw token。
The skill metadata explicitly says it does not include authorization, yet this file instructs operators to use the skill’s own onboarding script to resolve auth failures and obtain API keys. That mismatch is dangerous because it can mislead users and downstream systems about the skill’s true privileges, causing unauthorized credential collection and trust-boundary violations.
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 implements a full onboarding and monetization CLI—SMS login, API-key issuance, plan listing, order creation, and payment QR generation—which is unrelated to the declared TikTok product-query skill. The mismatch is dangerous because it expands the skill into credential handling and billing flows users and reviewers would not expect, increasing the chance of covert account takeover, secret harvesting, or unauthorized purchases.
Billing and payment-order creation are unjustified for a skill whose declared purpose is querying TikTok product lists. Embedding purchase flows in an unrelated skill creates a hidden capability to initiate financial transactions and render payment artifacts, which can be abused for unauthorized charges or social-engineering users into paying through attacker-influenced flows.
Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.
# Force the child process to emit UTF-8 regardless of the host console
# encoding (Windows defaults to cp936 / gbk and would otherwise corrupt
# non-ASCII bytes when we read them back).
child_env = os.environ.copy()
child_env["PYTHONIOENCODING"] = "utf-8"
timed_out = False
The skill declares no explicit tool or permission scope even though its documented and inferred behavior involves shell, filesystem, environment, and network capabilities. That creates an over-privileged execution surface: downstream agents may invoke powerful operations without a clear least-privilege boundary, increasing the chance of misuse or prompt-induced abuse.
The manifest-style description says the skill triggers when the user mentions phrases like “可带货商品”, “视频挂车选品”, and “查询达人可推广商品”. These phrases are fairly broad in normal e-commerce discussion and the file does not provide exclusion conditions or negative examples to clarify when this skill should not activate.
This markdown file describes POST requests to an external gateway and instructs callers to supply both an API key and a creator access token, but it does not include any warning about sending credentials or request data to third-party services. Under the markdown-specific SQP-2 criteria, documentation should disclose behaviors that may affect user data or privacy.
The file adds account onboarding, login, API key setup, and billing/payment flows to a skill whose declared purpose is only querying TikTok product lists. This expands the skill’s effective capability into credential handling and purchases, creating unnecessary attack surface and increasing the chance an agent collects secrets or initiates financial actions outside user expectations.
The instructions tell the operator to collect a user’s phone number and use it for send-code and login flows, but there is no explicit privacy notice, consent language, retention policy, or warning about handling personal data. In an agent setting, this creates a real risk of over-collection of sensitive information and improper processing of account-recovery or registration data.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
print(f"DEPENDENCY_MISSING: {json.dumps(payload, ensure_ascii=False)}", file=sys.stderr)
sys.exit(DEPENDENCY_EXIT_CODE)
try:
result = subprocess.run(
[sys.executable, str(checker)],
capture_output=True,
text=True,
The helper constructs and sends POST requests to external endpoints, including request parameters and an Authorization header derived from an environment variable. While the code handles errors, it provides no user-facing print/log/comment warning that data will be transmitted to a remote service.
This function packages potentially sensitive user or account-related fields such as openId, request path, query string, and body, then sends them to the developer proxy endpoint. The operation is not accompanied by a confirmation prompt, user-visible notice, or explanatory comment warning about remote transmission.
The module advertises itself as a LinkFox onboarding CLI rather than a TikTok product-query helper, directly contradicting the published skill purpose. Such a mismatch is a strong indicator of deceptive packaging: reviewers may approve one capability while the deployed code performs a broader and more sensitive workflow.
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 login command prints the generated API key to stdout JSON, which is commonly captured by host logs, transcripts, agent tool histories, or downstream automation. Exposing long-lived credentials in normal command output materially increases the chance of secret leakage and unauthorized reuse.
Output size or generation rate is not bounded. Unbounded output enables denial-of-service through resource exhaustion, log flooding, or context-window stuffing.
"""Cap the sample's value fields when it has many keys.
`shape.*.item_keys` is the single source of truth for the full key list
(always complete, no truncation). The sample only ever shows up to
SAMPLE_KEY_CAP fields with their concrete values, since the agent only
needs a feel for value shapes — for the full menu of available fields,
they read `shape`.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
timed_out = False
try:
proc = subprocess.run(
[sys.executable, str(main_script), args.params],
capture_output=True,
text=True,
No suspicious patterns detected.