other
- Location
SKILL.md:112- 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 does perform Shopee lookup, but it also handles account login, API keys, paid-plan ordering, automatic feedback reporting, and broad local persistence with weak controls.
Install only if you are comfortable giving this skill a LinkFox API key, using LinkFox account/billing onboarding, and having lookup responses cached locally. Avoid entering phone/SMS codes through an agent unless you trust the publisher, do not persist API keys in shell startup files if a secret store is available, and do not use environment endpoint overrides outside a controlled development setup.
SKILL.md:112Automatic transmission of conversation-derived feedback without explicit consent
scripts/shopee_product_detail.py:36Sensitive credentials can be transmitted to arbitrary environment-controlled endpoints
scripts/onboarding.py:486Complete API key is printed to stdout and recommended for plaintext persistence
scripts/onboarding.py:163Onboarding directs users to install unpinned runtime dependencies
scripts/shopee_product_detail.py:248Unsanitized session identifier permits output-path traversal
scripts/shopee_product_detail.py:205Full responses may be silently written to temporary or unexpected directories
The file implements LinkFox account onboarding, SMS login, API key acquisition, plan listing, order creation, and payment QR generation, which is fundamentally unrelated to a Shopee public product-detail parser. This kind of capability mismatch is a strong indicator of deceptive or repurposed code and greatly increases the risk of credential harvesting, unauthorized account actions, and unwanted purchases under the guise of a harmless data lookup skill.
The code builds POST destinations from environment-controlled base URLs and then sends sensitive authentication material such as phone numbers, SMS codes, access tokens, refresh tokens, and generated API keys to those endpoints. If an attacker can influence environment variables in the skill runtime, they can redirect requests to attacker-controlled infrastructure and exfiltrate credentials or payment/session data; this is especially dangerous because the skill’s stated purpose does not justify handling account-login secrets at all.
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 urllib with a URL derived from environment-configurable base addresses and attaches the API key in the Authorization header. An attacker who can set those environment variables can force authenticated requests to a malicious server, leading to credential leakage, account misuse, and exposure of order/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 documentation says the tool performs a straightforward public product lookup, but the detected behavior includes mandatory local persistence, 24-hour caching, transmission of environment metadata, and storage-path behavior inconsistent with the manifest. Hidden storage and metadata exfiltration materially change the privacy and security posture, especially when session identifiers or other environment values are sent remotely.
The documentation says the tool performs a straightforward public product lookup, but the detected behavior includes mandatory local persistence, 24-hour caching, transmission of environment metadata, and storage-path behavior inconsistent with the manifest. Hidden storage and metadata exfiltration materially change the privacy and security posture, especially when session identifiers or other environment values are sent remotely.
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
python scripts/shopee_product_detail.py '{"productUrl":"https://shopee.sg/%28LENECT-OFFICIAL-STORE%29-Flash-I-Aurora-Dual-Highlighter-7.2g-COCOMO-i.9641401.29691169956"}'
## Display Rules
1. Lead with the listing name, item ID, shop, marketplace, current price, currency, stock, and public sold count.
2. Show current/original price and discount exactly as returned; do not convert currencies unless requested.
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 module self-describes as a LinkFox onboarding CLI, directly contradicting the skill metadata that claims Shopee product-detail functionality. This inconsistency is a strong red flag for disguised behavior because it suggests the packaged code is not the code users would reasonably expect to run for the advertised skill.
The code creates purchase orders and renders payment QR codes even though the skill is advertised as a Shopee product-detail lookup tool. This mismatch enables unauthorized or deceptive monetization flows and could trick users or host agents into initiating paid transactions unrelated to the requested task.
A public Shopee product-detail reader should not need to send SMS verification codes or perform phone-based login, yet this code requests a phone number, transmits it externally, verifies codes, and retrieves API keys. In context, this looks like unjustified credential collection and account-token provisioning hidden inside an unrelated skill, making the behavior substantially more dangerous than similar code in a legitimate onboarding utility.
The documentation explicitly says writing to /tmp is forbidden and that a non-writable current directory should cause an error, but the code silently falls back to the home directory and then the temp directory. That mismatch undermines operator expectations and can lead to sensitive API responses being written into broader, less controlled locations than users were told.
The skill declares no explicit tool scope while the manifest and behavior imply access to environment variables, local file writes, and network calls. Missing least-privilege scoping makes it harder to constrain execution and increases the blast radius if the skill is misused or compromised.
Always saving complete responses under a session-based path creates a durable link between user activity and stored artifacts. Session-organized plain JSON files can expose sensitive workflow details to other users, processes, backups, or repository commits, especially in shared project directories.
The skill mandates writing full JSON responses into the current project directory but does not prominently warn users about persistence, discoverability by other tools, or privacy implications. Even if product data is public, saved responses may include user-provided URLs, session-correlated paths, and other metadata that can leak workflow context.
The skill is presented as a single-product read-only lookup, but it also instructs automatic reporting to a separate Feedback API. That creates an additional outbound data flow unrelated to the primary task, potentially transmitting user content or operational context without clear necessity or consent.
Automatic feedback submission is not required to fetch a public Shopee product page and therefore represents unjustified secondary processing. Unnecessary telemetry increases privacy risk and broadens the skill's external communication surface.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| 402 | 算力不足 | 按 SKILL.md 的「解决认证和算力问题」处理 | | 超时或上游异常 | 连接错误、5xx 或业务错误 | 告知用户;不要连续自动重试产生额外费用 |
API_KEY="${LINKFOX_AGENT_API_KEY:-$LINKFOXAGENT_API_KEY}"
The skill instructs the agent to collect a user's phone number and process it through a registration/login flow, but it provides no explicit consent language, privacy notice, retention limits, or data-handling safeguards. Because phone numbers and one-time codes are sensitive personal data and account-authentication material, this creates privacy and account-security risk if the agent prompts for or mishandles them.
The file's CLI description and user-facing messages are written in Chinese throughout, and there is no indication that users can opt into another language or locale. This can violate language/locale policy when a skill forces a specific language without user choice or documented regional justification.
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 skill generates or fetches an API token and emits it in stdout JSON without any in-code warning, redaction, or explicit confirmation step. In a hosted agent environment, stdout may be logged, forwarded, or exposed to other components, so this can leak reusable credentials beyond the immediate user interaction.
The skill description suggests it simply returns Shopee product details, but the implementation always persists full API responses, session metadata, and cache files locally. This creates an undisclosed data retention surface that may expose scraped business data, session linkage, and potentially sensitive response content to other local users, tools, or later processes.
The comment says small responses are output directly without file persistence, but the code always writes the full response to disk first. This is a security-relevant documentation mismatch because users and reviewers may assume ephemeral handling for small datasets when the tool actually retains everything locally.
The script sends SESSION_ID, MESSAGE_ID, MODE_ID, and APP_NAME from the environment to a remote endpoint without explicit disclosure during execution. While these are not secrets by themselves, they can enable cross-request correlation, reveal internal workflow metadata, and expand the privacy footprint beyond the apparent product lookup function.