Back to skill

Security audit

多模态商品相似度

Security checks across malware telemetry and agentic risk

Overview

This image-similarity skill should be reviewed because it also includes account login, API-key generation, billing/order flows, automatic feedback reporting, and broad local result persistence.

Install only if you are comfortable letting this skill send product data and user instructions to LinkFox, persist full results locally, and guide users through LinkFox account, API-key, and payment flows. Avoid using it in environments where LINKFOX_* endpoint variables could be set by untrusted parties, and do not provide phone numbers, SMS codes, or payment choices unless you intend to complete LinkFox onboarding or billing actions.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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 (21)

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
93% confidence
Finding
with urlopen(req, timeout=150) as response:

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
95% 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
94% confidence
Finding
with urlopen(req, timeout=30) as resp:

Lp3

Medium
Category
MCP Least Privilege
Confidence
86% confidence
Finding
The skill documentation describes capabilities to use environment variables, write files to the local workspace, and make network requests, but it does not declare or constrain those permissions. Undeclared sensitive capabilities reduce transparency and allow the skill to access credentials, persist user/tool output, and communicate externally in ways the user may not expect.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding
The static finding indicates behavior far beyond image-similarity analysis, including phone-based login, API-key generation/retrieval, account info access, plan listing, payment order creation, QR rendering, and order-status queries. If a skill marketed as post-processing image grouping can invoke account, authentication, and payment flows, it creates a serious scope-expansion risk that could expose user data, trigger purchases, or socially engineer users into account actions unrelated to their request.

Description-Behavior Mismatch

Medium
Confidence
89% confidence
Finding
The skill instructs automatic reporting to a Feedback API whenever it detects mismatches, user reactions, or possible improvements. This is an extra outbound data flow unrelated to the core image-similarity task and may transmit user content or interaction metadata without clear consent or necessity.

Context-Inappropriate Capability

Medium
Confidence
87% confidence
Finding
Auto-detecting user sentiment and sending it to a Feedback API extends the skill from image analysis into behavioral monitoring and external reporting. That creates privacy and trust risks because user opinions, frustration, or praise may be transmitted to a third party without an obvious operational need for fulfilling the requested task.

Intent-Code Divergence

Medium
Confidence
84% confidence
Finding
The documentation claims the tool is post-processing only and cannot fetch data on its own, yet it later directs the skill to call a separate Feedback API. This inconsistency obscures the true network behavior of the skill and can mislead users and reviewers about what external communication occurs.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The documentation exposes a second network action that sends data to a separate feedback endpoint unrelated to the core image-similarity function. Extra outbound capabilities increase the skill's attack surface and can enable unanticipated data exfiltration or unauthorized reporting, especially if an agent can invoke it without explicit user consent.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The file documents authentication recovery, account registration, and billing workflows that are unrelated to a multimodal product image similarity skill. This kind of scope drift is dangerous because it expands the skill into handling credentials, account lifecycle actions, and payment flows, increasing attack surface and creating opportunities for abuse or user deception under an unrelated skill context.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
The documented ability to collect a phone number, send verification codes, log users in, and initiate plan purchases is not justified by the declared purpose of image-similarity analysis. In this context, these are sensitive account and financial operations that could be misused for unauthorized account creation, social engineering, or steering users into payment flows they did not expect from the skill.

Intent-Code Divergence

Medium
Confidence
90% confidence
Finding
The docstring promises that writing to /tmp is forbidden and that failure to write to the current directory should error, but the implementation falls back to home and temporary directories. This mismatch can cause sensitive API responses to be persisted in unexpected locations, undermining operator expectations and increasing the chance of data leakage.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
This file implements account onboarding, SMS verification, login, API key retrieval, plan listing, ordering, and payment QR generation, which are unrelated to the declared product image similarity skill. That scope mismatch is dangerous because it introduces credential access and monetization capabilities into a skill context where users would not reasonably expect account or payment operations, increasing the likelihood of covert account takeover or unauthorized billing workflows.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The presence of package retrieval, order creation, order querying, and payment QR rendering adds billing functionality that is unjustified for an image-similarity tool. In this context, hidden payment capabilities materially increase risk because the skill could drive purchases or expose users to unwanted financial actions under a misleading feature label.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
This section performs phone-based authentication, exchanges SMS codes for access tokens, calls user-info endpoints, and obtains or generates API keys. In a skill advertised for product image similarity, such capability is highly suspicious because it can capture authentication factors and mint long-lived credentials unrelated to the user’s expected task, enabling account takeover and persistent unauthorized API access.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill says it will always write the full API response to local files in the current working directory, but it does not provide a clear upfront warning or ask for consent for persistence. That can leave potentially sensitive product, account, or user-provided data stored on disk unexpectedly, increasing exposure to other tools, users, or later processes in the workspace.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The API sends detailed product/result data and free-form userInput to an external service, but the documentation provides no user-facing disclosure about this data transfer or its privacy implications. Because refResultData can contain large structured datasets and userInput can be extensive, this creates a meaningful risk of transmitting sensitive business data or personal information to a third party without informed consent or minimization.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The markdown explicitly instructs collecting a user's phone number and using it in registration/login commands, but provides no privacy notice, consent language, retention limits, or handling guidance for this personal data. That creates risk of improper collection and disclosure of personally identifiable information, especially because the skill's primary purpose does not require phone handling.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The script transmits full input parameters and session/application metadata to an external service during normal execution without any runtime warning or confirmation. In this skill context, those parameters may include product data, image references, or other sensitive business information, so silent external transmission creates a privacy and data-governance risk.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The script persistently stores full API responses to local disk by default, including large results, without a clear runtime warning or opt-in. In a multimodal product-analysis workflow, responses may contain identifiers, image-analysis results, or proprietary catalog information, so default retention increases exposure if the workspace is shared or later exfiltrated.

External Transmission

Medium
Category
Data Exfiltration
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
83% confidence
Finding
requests.post(url, json=

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.