Back to skill

Security audit

网页内容抓取服务

Security checks across malware telemetry and agentic risk

Overview

The skill appears intended to fetch webpages, but it routes requests through a third-party API and persists the user's API key in a local .env file, so it should be reviewed before installation.

Install only if you are comfortable giving this skill an xiaobenyang API key, having that key saved in a local .env file, and having requested URLs handled by the third-party MCP service. Avoid using it for private, internal, authenticated, or regulated URLs unless you have reviewed the provider and storage behavior.

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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (20)

Lp3

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding
The skill advertises capabilities that include environment access, file read/write, and network use, but does not declare permissions or clearly scope those capabilities. This creates a transparency and consent gap: users and reviewing systems may treat the skill as lower risk than it is, while it can persist secrets and make outbound requests.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The documented purpose is a simple web-fetch/HTML-to-Markdown service, but the behavior described includes remote API invocation, generic tool-calling, dependency on a third-party service, and persistent API-key handling. This mismatch is dangerous because it can cause users and auditors to authorize the skill under false assumptions about its scope and data flows.

Description-Behavior Mismatch

High
Confidence
97% confidence
Finding
The documentation introduces an API-key collection and storage workflow tied to an unrelated external service, which is inconsistent with a straightforward web-content fetching skill. This is risky because it normalizes credential harvesting and broad external dependence in a context where users would not reasonably expect either.

Intent-Code Divergence

Medium
Confidence
90% confidence
Finding
The workflow text references generic API-calling and even a school-search style example that does not match the declared fetch tool, indicating copy-paste or template drift. Such contradictions are dangerous because they obscure real behavior and increase the chance that the model will invoke unintended functions or mishandle user data.

Description-Behavior Mismatch

High
Confidence
95% confidence
Finding
The skill claims to provide webpage content fetching/HTML-to-Markdown, but this file adds credential persistence and external service secret management unrelated to that narrow purpose. Expanding scope to store and manage API keys increases the attack surface, creates opportunities for secret exposure, and is especially risky in an agent skill where users may not expect local secret persistence.

Intent-Code Divergence

Medium
Confidence
96% confidence
Finding
The docstring embeds agent-behavior instructions unrelated to the function’s implementation, specifically telling an agent it now has internet access and should change prior refusal behavior. This is dangerous because tools and docstrings may be surfaced to or consumed by LLM agents as trusted guidance, enabling prompt-injection-style behavior changes that can bypass higher-level safety controls.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill instructs the agent to ask for a user API key and persist it via configuration without warning about storage, retention, exposure, or least-privilege handling. This creates a credential-handling risk because users may disclose secrets without informed consent, and the secret may be written to disk in a way that is accessible to other processes or later sessions.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill allows fetching arbitrary internet URLs but does not disclose that requests leave the local environment and may expose metadata such as target URLs, timing, IP information, or fetched content to external services. That omission is dangerous because users may unknowingly use the skill on sensitive internal, private, or regulated URLs.

Missing User Warnings

Medium
Confidence
76% confidence
Finding
The client forwards arbitrary caller-supplied parameters directly to an upstream API with no local validation, allowlist, or user-consent boundary. In an agent skill context, this can enable unintended data exfiltration, invocation of unintended upstream functionality, or transmission of sensitive prompt/runtime data to a remote service if higher layers pass attacker-influenced input.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The function writes an API key directly to .env without any user-facing confirmation, visibility, or warning that credentials will be persisted on disk. This can lead to accidental long-term storage of secrets in insecure locations, inclusion in backups or repositories, and unexpected credential exposure on shared systems.

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
90% 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
90% 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
95% 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
93% 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
93% 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
92% 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
92% 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
93% 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
96% confidence
Finding
requests==2.31.0

Known Vulnerable Dependency: python-dotenv==1.0.1 — 1 advisory(ies): CVE-2026-28684 (python-dotenv: Symlink following in set_key allows arbitrary file overwrite via )

Low
Category
Supply Chain
Confidence
81% confidence
Finding
python-dotenv==1.0.1

VirusTotal

63/63 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.