Back to skill

Security audit

多模态属性提取

Security checks across malware telemetry and agentic risk

Overview

This image-analysis skill is not clearly malicious, but it includes account login, API-key generation, billing/order creation, automatic feedback reporting, and persistent local logging that should be reviewed before installation.

Install only if you are comfortable with LinkFox receiving product image URLs, product data, prompts, userInput, feedback content, and any phone/SMS/account details used for onboarding. Use official LinkFox endpoint environment variables only, avoid sending secrets in prompts or product data, review any plan/order/payment step before approving it, and periodically clear the local linkfox output/cache directories if retained product data is sensitive.

SkillSpector

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

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

Lp3

Medium
Category
MCP Least Privilege
Confidence
86% confidence
Finding
The skill documents capabilities to read environment variables, write files, and make network requests, but does not declare or constrain those permissions. This creates hidden trust boundaries: the agent may access secrets, persist user data locally, or contact external services without clear user awareness or permission scoping.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The documented purpose is image-attribute extraction, but the skill also references login, API key acquisition, plan purchase, payment QR generation, and order-status/account APIs. That is a major scope expansion into authentication and billing flows, which can expose users to credential handling and unauthorized financial or account actions unrelated to the stated task.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
The skill instructs automatic reporting to a separate Feedback API even though that behavior is unrelated to the core image-analysis function. Auto-sending user interactions, satisfaction signals, or mismatch details to another endpoint can leak user content and metadata without a clear need-to-know basis.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
This file implements SMS onboarding, login, API key retrieval, plan listing, ordering, and payment QR generation, which are unrelated to a skill advertised for extracting visual attributes from product images. Such scope divergence is a strong security concern because it introduces credential handling and payment workflows where users and reviewers would not expect them, increasing the chance of covert data collection or account misuse.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The code can create orders and generate payment QR codes, enabling purchases from within a skill whose declared function is visual attribute extraction. This violates least privilege and creates financial risk, since a user invoking an image-analysis skill would not reasonably expect billing actions to be present or reachable.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
The file performs SMS-based authentication, obtains access and refresh tokens, queries user/team metadata, and generates or retrieves API tokens. Embedding this account-bootstrap logic inside an image-analysis skill materially increases exposure of credentials and identity data and creates a pathway for unauthorized account access if the flow is abused or redirected.

Vague Triggers

High
Confidence
91% confidence
Finding
The activation rule is overly broad and says the skill should trigger even when the user does not explicitly ask for image analysis, as long as the request vaguely involves structured information from product images. This can cause the agent to invoke a costly, networked, data-processing skill unexpectedly, increasing the chance of unintended data disclosure, surprise billing, and actions outside user intent.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The documentation directs agents to send user input and large upstream product/image datasets to an external endpoint, but provides no privacy notice, data-minimization guidance, or restrictions on sensitive content. In an agent setting, this increases the risk of unintentionally exfiltrating user-provided data, third-party image URLs, and contextual business data to a remote service without informed consent or appropriate handling controls.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The Feedback API sends content to a separate external endpoint, but the documentation does not warn that user feedback text may contain sensitive conversation details, identifiers, or business context. Because the endpoint is distinct from the tool API, the omission makes accidental disclosure more likely, especially if agents forward raw user statements or transcripts.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The instructions explicitly tell the operator to collect a user's phone number and use it in registration and login flows, but they provide no privacy notice, consent guidance, retention limits, or masking requirements. This creates a real privacy and data-handling risk because an agent or operator may process personal data insecurely or without adequate user consent.

Ssd 3

Medium
Confidence
94% confidence
Finding
The skill mandates persistent storage of full tool responses under a session-linked local path. Because responses may contain user-provided product data, extracted attributes, identifiers, or other sensitive context, this creates unnecessary data retention and expands exposure through local compromise, overbroad access, or accidental reuse across tasks.

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
88% confidence
Finding
requests.post(url, json=

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

No suspicious patterns detected.