Back to skill

Security audit

ABA新词挖掘专家

Security checks across malware telemetry and agentic risk

Overview

This appears to be a real LinkFox keyword-mining bundle, but it also handles account login, API keys, payments, public uploads, and broadly configurable network calls that deserve Review before installation.

Install only if you trust LinkFox with your Amazon keyword queries, generated files, LinkFox account/API key, and any files you choose to upload publicly. Before use, confirm the gateway environment variables point to LinkFox-controlled HTTPS hosts, avoid providing SMS codes or starting payment orders unless you intentionally want account setup or billing, and review/clean the local linkfox output and cache directories after sensitive work.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • 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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (62)

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

Tainted flow: 'AIGC_TEXTGEN_PATH' from os.environ.get (line 31, credential/environment) → subprocess.run (code execution)

Medium
Category
Data Flow
Content
}

    try:
        proc = subprocess.run(
            [sys.executable, AIGC_TEXTGEN_PATH, "--stdin", "--content-only"],
            input=json.dumps(params, ensure_ascii=False),
            capture_output=True,
Confidence
93% confidence
Finding
proc = subprocess.run( [sys.executable, AIGC_TEXTGEN_PATH, "--stdin", "--content-only"], input=json.dumps(params, ensure_ascii=False), capture_output=True,

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
91% 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 274, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
req = Request(url, headers={"User-Agent": "LinkFox-Skill/2.0"})
    try:
        with urlopen(req, timeout=timeout) as resp:
            # 从 Content-Type 进一步修正扩展名
            if guessed_ext == "bin":
                ct = resp.headers.get("Content-Type", "")
Confidence
95% confidence
Finding
with urlopen(req, timeout=timeout) as resp:

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

Critical
Category
Data Flow
Content
req = Request(url, headers={"User-Agent": "LinkFox-Skill/2.0"})
    try:
        with urlopen(req, timeout=timeout) as resp:
            # 从 Content-Type 进一步修正扩展名
            if guessed_ext == "bin":
                ct = resp.headers.get("Content-Type", "")
Confidence
95% confidence
Finding
with urlopen(req, timeout=timeout) as resp:

Lp3

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding
The skill advertises no declared permissions, yet its instructions clearly require sensitive capabilities including shell execution, network access, file read/write, and environment access. This creates a transparency and policy-enforcement gap: a reviewer or runtime may underestimate what the skill can do, while the workflow can still exfiltrate data, modify files, or invoke external services. In this context, the danger is elevated because the skill also references file upload, report generation, and external API-backed mining flows.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The documented behavior goes materially beyond the stated purpose of ABA keyword mining, including account/API-key login flows, package and payment handling, public file upload, unrelated Amazon mining tools, and HTML report generation. This mismatch is dangerous because users may provide data under the assumption of a narrow analytics function while the skill can access billing, authentication, publishing, and broader data-handling surfaces. The surrounding context makes this more dangerous, not less, because the extra behaviors expand both attack surface and opportunities for covert data exfiltration or abuse.

Description-Behavior Mismatch

Medium
Confidence
92% confidence
Finding
The skill adds an automatic feedback-reporting behavior that is outside its stated ABA query/analysis purpose. This creates an unnecessary outbound data flow to an external API and may transmit user statements, task context, or operational metadata without explicit consent, increasing privacy and scope-creep risk.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The instruction to call a Feedback API is not justified by the skill's advertised ABA analytics function, so it expands privileges and external communications beyond user expectations. Because the trigger includes dissatisfaction, praise, and perceived improvements, the agent may exfiltrate conversational content unrelated to the core data query workflow.

Intent-Code Divergence

Medium
Confidence
84% confidence
Finding
The module documentation explicitly says output is restricted to the current working directory and forbids /tmp, but the actual implementation falls back to ~/linkfox and finally the system temp directory. This mismatch can cause sensitive API responses to be written to locations with weaker isolation, unexpected retention, or broader visibility than the operator expects. In a skill handling exported keyword data and API responses, silent writes to temp/home increase data exposure risk.

Description-Behavior Mismatch

High
Confidence
92% confidence
Finding
This onboarding script performs account login, token acquisition, plan discovery, and payment/order handling, which is broader than the declared ABA keyword-mining purpose. That mismatch increases the chance that users or host systems grant trust to a skill that also handles credentials and paid transactions, expanding attack surface beyond expected functionality.

Context-Inappropriate Capability

High
Confidence
95% confidence
Finding
The code can create paid orders and render payment QR codes, enabling financial transactions that are not justified by a keyword-mining skill alone. In an agent ecosystem, unnecessary billing capability is dangerous because it can prompt or automate charges, especially when combined with misleading scope or insufficient user review.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
The script logs users in with SMS codes and then retrieves or generates API tokens, which gives it the ability to mint reusable credentials from user authentication material. That exceeds the stated scope and is sensitive because compromise of this flow yields durable API access rather than a one-time session only.

Intent-Code Divergence

Medium
Confidence
90% confidence
Finding
The skill says image/video generation is 'not applicable' in one section, yet elsewhere instructs agents to automatically chain into downstream generation skills without additional user confirmation. That contradiction can cause unintended capability escalation, where a simple text-generation request triggers external image/video actions and remote service calls the user did not clearly authorize.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The referenced API document is for a different skill (`linkfox-aigc-textgen`) and exposes text-generation plus feedback endpoints that do not align with the declared ABA keyword-mining purpose. This kind of capability mismatch is dangerous because it can cause the agent to transmit user prompts, media URLs, and identifiers to an unrelated external service, creating confusion, unauthorized data flow, and potential misuse of the skill beyond its stated scope.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The feedback submission endpoint is an extra outbound capability not justified by the keyword-mining use case, and it sends free-form content to a separate external domain. Unnecessary feedback channels increase the risk of accidental exfiltration of user content, internal prompts, or sensitive business context under the guise of telemetry.

Description-Behavior Mismatch

Medium
Confidence
91% confidence
Finding
The document for an ABA keyword-mining skill includes detailed authentication recovery, account signup, and billing workflows that are outside the stated functional scope. This scope expansion is dangerous because it encourages the agent to handle credential bootstrapping and payment-adjacent actions, increasing the chance of phishing-like behavior, user confusion, and misuse of the skill for account operations unrelated to keyword mining.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The instructions explicitly cover phone-based registration, plan listing, order creation, and payment method selection even though the skill is described only as a keyword-mining expert. Embedding account-registration and payment capabilities in a content-generation skill widens the trust boundary and may lead users to disclose sensitive information or authorize purchases in an unexpected context.

Description-Behavior Mismatch

High
Confidence
96% confidence
Finding
The file implements a generic AI text-generation client, while the declared skill is an Amazon ABA keyword miner. This capability mismatch is dangerous because it can route user inputs and generated outputs to a remote LLM-style service under a misleading manifest, undermining informed consent, policy review, and least-privilege expectations.

Description-Behavior Mismatch

High
Confidence
96% confidence
Finding
The file is an account onboarding and payment CLI, but the declared skill is a keyword-mining expert. This mismatch materially increases risk because the skill introduces credential collection, token issuance, and purchasing behavior unrelated to the advertised function, which can mislead users into disclosing sensitive information.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
The code can create orders, retrieve payment URLs, and render QR codes for payment, which is far outside the scope of keyword mining. In a mismatched skill context, this can facilitate unauthorized or deceptive purchases and increases the blast radius if the skill is invoked unexpectedly.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The script performs SMS verification, login, token-based account actions, and API-key generation, all unrelated to the stated keyword-mining purpose. This is dangerous because it collects phone numbers and verification codes and then provisions long-lived API credentials, creating a high-value credential-handling surface hidden inside an unrelated skill.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: suspicious.secret_argv_exposure

Instructions pass high-value credentials through process argv.

Critical
Code
suspicious.secret_argv_exposure
Location
skills/linkfox-amazon-suggestion-miner/SKILL.md:55

Instructions pass high-value credentials through process argv.

Critical
Code
suspicious.secret_argv_exposure
Location
skills/linkfox-amazon-widget-miner/SKILL.md:41