Back to skill

Security audit

A股选股器

Security checks across malware telemetry and agentic risk

Overview

This skill is a coherent Eastmoney stock-screening helper that calls a documented market-data API and saves local result files, with minor disclosure and portability caveats.

Before installing, confirm you are comfortable sending stock-screening queries and your MX_APIKEY to the Eastmoney MX endpoint, and remember that the skill saves CSV, description, and raw JSON response files locally in the configured output directory.

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 (7)

Tainted flow: 'csv_path' from os.getenv (line 222, credential/environment) → open (file write)

Medium
Category
Data Flow
Content
csv_path = output_dir / f"mx_xuangu_{safe_name}.csv"
        desc_path = output_dir / f"mx_xuangu_{safe_name}_description.txt"
        
        with open(csv_path, "w", newline="", encoding="utf-8-sig") as f:
            writer = csv.DictWriter(f, fieldnames=fieldnames, extrasaction="ignore")
            writer.writeheader()
            for row in rows:
Confidence
65% confidence
Finding
with open(csv_path, "w", newline="", encoding="utf-8-sig") as f:

Tainted flow: 'json_path' from os.getenv (line 250, credential/environment) → open (file write)

Medium
Category
Data Flow
Content
# 保存原始 JSON
        json_path = output_dir / f"mx_xuangu_{safe_name}_raw.json"
        with open(json_path, "w", encoding="utf-8") as f:
            json.dump(result, f, ensure_ascii=False, indent=2)
        print(f"📄 原始JSON: {json_path}")
Confidence
65% confidence
Finding
with open(json_path, "w", encoding="utf-8") as f:

Lp3

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding
Without declared permissions the skill's intent is opaque and cannot be validated.

Description-Behavior Mismatch

Low
Confidence
81% confidence
Finding
The manifest frames this skill as a stock screening and universe lookup tool, but the implementation persists outputs to CSV, description text, and raw JSON files under a local output directory. While some result formatting is expected, durable file export and storage of raw responses are additional behaviors not reflected in the skill description.

Context-Inappropriate Capability

Low
Confidence
84% confidence
Finding
Persisting the complete raw JSON response is broader than necessary to perform condition-based stock screening or universe lookup. The stated purpose is to help find securities matching constraints; archival of raw backend responses is an ancillary capability that may expose more data than needed.

Natural-Language Policy Violations

Low
Confidence
91% confidence
Finding
Line L28 instructs that generated CSVs should be used for user-facing output because columns are mapped to Chinese labels. This imposes a specific language for output without indicating any user choice, opt-in, or region-specific justification, which matches the language/locale policy violation category.

External Transmission

Medium
Category
Data Exfiltration
Content
"keyword": query
        }
        
        response = requests.post(self.BASE_URL, headers=headers, json=data, timeout=30)
        response.raise_for_status()
        return response.json()
Confidence
80% confidence
Finding
requests.post(self.BASE_URL, headers=headers, json=

VirusTotal

65/65 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.