Back to skill

Security audit

卖家精灵-市场统计

Security checks across malware telemetry and agentic risk

Overview

The skill can perform the advertised market statistics task, but it also handles account login, payments, API keys, automatic feedback, and persistent local storage in ways users should review first.

Install only if you are comfortable giving this skill a LinkFox/SellerSprite API key, using a paid credit-based service, and potentially using its account and payment onboarding. Avoid running it in workspaces with untrusted environment variables, protect any generated API key as a secret, and review any feedback content before it is sent externally.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (10)

Tainted flow: 'url' from os.environ.get (line 235, credential/environment) → requests.post (network output)

Critical
Category
Data Flow
Content
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 = ""
Confidence
93% confidence
Finding
r = requests.post(url, json=body or {}, headers=headers, timeout=timeout)

Tainted flow: 'req' from os.environ.get (line 244, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
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
Confidence
91% confidence
Finding
with urlopen(req, timeout=30) as resp:

Tainted flow: 'req' from os.environ.get (line 72, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
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 ""
Confidence
91% confidence
Finding
with urlopen(req, timeout=150) as response:

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill declares no permissions while instructing use of environment variables, network API calls, and persistent file writes. This weakens user and platform visibility into sensitive capabilities, making it easier for a seemingly simple statistics skill to access secrets and store data without explicit consent boundaries.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The skill is presented as a market-statistics tool, but the referenced onboarding flow enables account login, API key generation, user/team info retrieval, plan listing, payment order creation, QR-code payment initiation, and order-status polling. That is a major expansion into identity, billing, and account-management operations, which could cause unauthorized charges, unnecessary collection of personal/account data, or abuse of user trust under a misleading skill description.

Vague Triggers

Medium
Confidence
87% confidence
Finding
The activation rule is overly broad and triggers even when the user does not mention SellerSprite, so the skill may intercept generic category-analysis requests and route them into a paid third-party workflow. In context, this is more dangerous because the skill incurs credits/costs and has related onboarding/payment paths, increasing the chance of unintended invocation and monetized actions.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The Feedback API accepts arbitrary free-form content and sends it to an external service, but the documentation does not warn that this field may contain user prompts, outputs, or other sensitive data. In an agent setting, this increases the risk of unintended exfiltration of user data, confidential business context, or regulated information through telemetry or feedback submission.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The onboarding instructions tell the agent to ask the user for a phone number and pass it to a registration script, but they do not require any privacy notice, consent language, data-handling explanation, or minimization guidance. This creates a real privacy and security risk because users may be induced to disclose personal data to an agent workflow without understanding how the number will be stored, transmitted, or used.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The file instructs users to persist an API key in shell profile files and environment settings without warning about secret exposure risks. Persisting credentials this way can leak them through shared accounts, dotfile sync, backups, shell history, support screenshots, or overly broad local access if users are not told to protect these files.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The login flow emits the newly obtained API key directly to stdout JSON, which is commonly captured by orchestrators, logs, transcripts, shell history, or other tools around agent execution. Exposing long-lived credential material this way increases the chance of inadvertent disclosure and downstream unauthorized API use.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.