Back to skill

Security audit

CSV转JSON转换器

Security checks across malware telemetry and agentic risk

Overview

This CSV-to-JSON skill asks for a third-party API key, stores it locally, and sends conversion requests to a remote service in ways that are not clearly scoped for a simple converter.

Install only if you are comfortable giving this skill a xiaobenyang.com API key, storing that key in a local plaintext .env file, and sending CSV data or file references to the remote service. Avoid using it for sensitive CSVs unless the publisher clarifies the endpoint, retention, privacy handling, and credential removal process.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (26)

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill declares itself as a simple CSV-to-JSON converter, yet the documentation indicates capabilities involving environment access, local file read/write, and outbound network use without any declared permissions boundary. That combination materially expands the attack surface, especially because it includes credential handling and persistence unrelated to a local format conversion task.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The documented behavior does not match the stated purpose: instead of a local FastMCP CSV conversion service, the skill appears to act as a remote API client that reads, persists, and uses an external API key while sending data to a third-party service. This deception increases the likelihood of users exposing sensitive CSV contents and credentials under false assumptions about local-only processing.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
A CSV-to-JSON converter should not ordinarily require an external API key, yet this skill mandates collecting one and storing it before use. That creates unnecessary credential collection and suggests the tool is a disguised remote service rather than a simple data transformation utility, increasing both privacy and misuse risks.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The workflow states that the model should route requests to tool functions and return raw API data, which is materially different from a self-contained CSV transformation skill. This mismatch can mislead users about where their data is processed and whether their file contents are being sent to an external service.

Context-Inappropriate Capability

High
Confidence
99% confidence
Finding
Collecting and persisting a third-party API key is disproportionate to the advertised function of converting CSV to JSON. This unnecessary credential handling broadens security exposure by creating secret storage, leakage, and misuse risks without a clear functional justification tied to the skill's claimed purpose.

Intent-Code Divergence

Medium
Confidence
87% confidence
Finding
The presence of an unrelated example function like 'search_schools' indicates the skill content may have been repurposed from another project without proper review. Such copy-paste inconsistencies are a strong indicator that hidden or unintended behaviors may exist beyond the advertised CSV conversion scope.

Intent-Code Divergence

High
Confidence
98% confidence
Finding
The project structure references 'xiaobenyang_gaokao_skill' and an API client architecture that conflicts with the advertised CSV conversion purpose. This strongly suggests either repackaging of a different skill or concealed remote-service behavior, both of which undermine user trust and can lead to unintended data exfiltration.

Description-Behavior Mismatch

High
Confidence
96% confidence
Finding
The file implements a generic outbound API client that can invoke arbitrary remote MCP tools via caller-controlled mcp_id, tool_name, and params, which exceeds the stated purpose of a CSV-to-JSON converter. In a skill ecosystem, this creates capability mismatch and covert delegation risk: a seemingly simple data-conversion skill can act as a proxy to external services, potentially exfiltrating data or invoking unintended remote actions.

Context-Inappropriate Capability

High
Confidence
94% confidence
Finding
The code exposes general network-proxy behavior by constructing authenticated HTTP requests with dynamic function and MCP identifiers in headers, allowing the skill to serve as a remote tool caller rather than a narrowly scoped converter. Because the skill context claims simple CSV transformation, this hidden general-purpose connectivity is more dangerous: users and reviewers may grant trust or data access under false assumptions, enabling misuse for unauthorized external interactions.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The code implements storage, retrieval, and mutation of an external API key even though the advertised skill is a CSV-to-JSON converter. This mismatch is suspicious because it expands the skill's privilege and secret-handling surface beyond its stated purpose, creating unnecessary exposure of credentials through local files and process environment state.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
The settings initializer explicitly reads a sensitive key from .env and environment variables without any clear justification tied to CSV/JSON conversion. Unnecessary credential access is dangerous because it normalizes secret collection and can expose credentials to logs, source control mistakes, local compromise, or unexpected downstream use.

Intent-Code Divergence

Medium
Confidence
93% confidence
Finding
The docstring and naming refer to a different domain ('高考' / different service identifiers) than the declared CSV-to-JSON skill. This kind of identity mismatch is dangerous because it suggests code reuse from an unrelated project or intentional repurposing, which undermines trust and can hide undeclared behavior such as external service access and secret use.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The instructions direct the model to save a user-provided API key but provide no warning about persistence, storage location, or security implications. Users may unknowingly consent to storing credentials in plaintext or in a reusable local environment file, increasing the risk of later disclosure.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The function persists the API key into a .env file on disk without any user-facing warning, consent, or discussion of storage risks. Persisting credentials in plaintext increases the chance of accidental commit, backup leakage, workstation compromise, and unintended reuse by other tools reading the same file.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The function forwards raw CSV content to an external API via call_api without any visible privacy, network, or data-handling disclosure. CSV data often contains sensitive business or personal information, so silent transmission to a remote service can cause unintended data exfiltration, especially in an agent/tooling context where users may assume local-only processing.

Credential Access

High
Category
Privilege Escalation
Content
default_year: int = 2025

    def model_post_init(self, __context):
        # 强制从 .env 文件读取 XBY_APIKEY
        env_path = Path(".env")
        if env_path.exists():
            content = env_path.read_text(encoding="utf-8")
Confidence
95% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
def model_post_init(self, __context):
        # 强制从 .env 文件读取 XBY_APIKEY
        env_path = Path(".env")
        if env_path.exists():
            content = env_path.read_text(encoding="utf-8")
            for line in content.splitlines():
Confidence
95% confidence
Finding
.env"

Credential Access

High
Category
Privilege Escalation
Content
if line.startswith("XBY_APIKEY="):
                    self.api_key = line.split("=", 1)[1].strip()
                    break
        # 如果环境变量有值,覆盖 .env 的值
        env_val = os.getenv("XBY_APIKEY", "")
        if env_val:
            self.api_key = env_val
Confidence
93% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
def save_api_key_to_env(api_key: str) -> bool:
    """将API key保存到.env文件"""
    try:
        env_path = Path(".env")
        lines = []
        if env_path.exists():
            lines = env_path.read_text(encoding="utf-8").splitlines()
Confidence
97% confidence
Finding
.env"

Credential Access

High
Category
Privilege Escalation
Content
def set_api_key(api_key: str) -> bool:
    """设置API key并持久化到.env"""
    if not api_key or not api_key.strip():
        return False
    api_key = api_key.strip()
Confidence
96% confidence
Finding
.env"

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
pydantic>=2.7.0
pydantic-settings>=2.2.0
python-dotenv>=1.0.1
Confidence
94% confidence
Finding
requests>=2.31.0

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
pydantic>=2.7.0
pydantic-settings>=2.2.0
python-dotenv>=1.0.1
Confidence
93% confidence
Finding
pydantic>=2.7.0

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
pydantic>=2.7.0
pydantic-settings>=2.2.0
python-dotenv>=1.0.1
Confidence
93% confidence
Finding
pydantic-settings>=2.2.0

Unpinned Dependencies

Low
Category
Supply Chain
Content
requests>=2.31.0
pydantic>=2.7.0
pydantic-settings>=2.2.0
python-dotenv>=1.0.1
Confidence
94% confidence
Finding
python-dotenv>=1.0.1

Known Vulnerable Dependency: requests==2.31.0 — 3 advisory(ies): CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi); CVE-2026-25645 (Requests has Insecure Temp File Reuse in its extract_zipped_paths() utility func)

Low
Category
Supply Chain
Confidence
88% confidence
Finding
requests==2.31.0

VirusTotal

64/64 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.