Back to skill

Security audit

CGArtLab Down

Security checks for vulnerabilities and agentic risk

Overview

This downloader needs review because it can use preset proxies and saved logins without clear approval, and its filename protections are incomplete.

Before installing, require removal of unapproved built-in proxies, explicit permission before saved-login use, and corrected filename validation with safe command argument handling. Use temporary Windows proxy settings unless you explicitly want permanent changes affecting other applications.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/proxy_chain.py
Finding

Automatic fallback routes downloads through an unapproved LAN proxy

Content
View full analysis

Impact

For HTTP downloads, the intermediary receives full request URLs, including any query-string download tokens, and can read or replace downloaded content. For HTTPS, ordinary certificate validation protects request contents, but the proxy still learns the destination hostname. No TLS bypass is established.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
Findings (16)

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The supplied command invokes unit tests and contains no URL analysis or download operation. Although tests could support a downloader project, the provided chunk establishes no such connection. The internal behavior of evals.test_detect is not shown and cannot be inferred.

Content

No source excerpt is available for this finding.

Activation on any user-provided URL is broader than an explicit download request.

Medium
Category
Trigger Abuse
Confidence
94% confidence
Finding

The README describes activation whenever a user supplies a URL, without requiring an explicit download request, and then directs the agent to select a destination and download it. This can turn a request to discuss or inspect a link into unintended network access and local file creation, potentially consuming substantial bandwidth or storage. Automatic downloading is appropriate for this skill's purpose, but merely receiving a URL is not sufficient authorization; requiring approval for tool installation does not address that gap.

Content

No source excerpt is available for this finding.

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, file_read, file_write, network, shell.

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Automatic proxy fallback lacks a user-facing privacy warning.

Medium
Category
Output Handling
Confidence
88% confidence
Finding

The workflow automatically retries failed downloads through a proxy chain without requiring advance disclosure or establishing that its entries are user-approved. This can expose destination metadata to an unexpected intermediary and, for plain HTTP, expose full URLs, tokens, and downloaded content; respecting NO_PROXY and reporting proxy use afterward only partially mitigate the risk.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 179)May include surrounding context.

md
按输出 chain 顺序逐条重试,第一条成功即停。

**NO_PROXY 强制规则**:目标域名匹配 `NO_PROXY` 环境变量时**禁用代理**,即使代理链里有可用项。
例:`https://api.sensenova.cn/...` 永远直连,不走任何代理。

**三工具的代理参数**:

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · docs/PLAN-v0.2.md (reported line 258)May include surrounding context.

md
按输出 chain 顺序逐条重试,第一条成功即停。

**NO_PROXY 强制规则**:目标域名匹配 `NO_PROXY` 时禁用代理,即使代理链里有可用项。
例:`https://api.sensenova.cn/...` 永远直连,不走任何代理。

**三工具的代理参数**:

Automatic proxy fallback lacks a warning about routing download traffic through built-in proxies.

Medium
Category
Output Handling
Confidence
96% confidence
Finding

The proposed workflow automatically retries downloads through hardcoded proxies, including a private-LAN address whose ownership and trustworthiness are not established for other users. A proxy can observe destination metadata and, for unencrypted HTTP downloads, sensitive URLs, headers, and content or modify responses; reporting proxy use afterward does not provide prior consent. Direct-first behavior and NO_PROXY enforcement reduce exposure but do not establish authorization to use these built-in endpoints.

Content

No source excerpt is available for this finding.

MCP server referenced without pinned version: 'uvx down'.

Medium
Category
MCP Rug Pull
Confidence
65% confidence
Finding

uvx/uv tool run commands without ==version create a rug-pull risk.

Content

No source excerpt is available for this finding.

The workflow instructs automatic use of saved login credentials without warning the user.

Medium
Category
Output Handling
Confidence
92% confidence
Finding

The workflow directs the agent to automatically fill saved credentials when a download URL requires login, without requiring user approval or checking that the login page belongs to the intended service. An attacker-controlled URL or login redirect could therefore trigger unintended credential use; credential exposure would depend on the vault tool's origin-matching protections. Authentication can legitimately support downloading, and the instructions prohibit guessing passwords or harvesting cookies, but those safeguards do not address authorization for vault access.

Content

No source excerpt is available for this finding.

L146–L148 provide commands that permanently change user-wide proxy settings rather than limiting configuration to the download.

Medium
Category
Excessive Agency
Confidence
95% confidence
Finding

These commands persist HTTP_PROXY, HTTPS_PROXY, and NO_PROXY in the user's environment, affecting future applications that honor those variables. Although configuring a proxy for a download can be appropriate, permanently routing unrelated applications through a fixed local proxy and adding a domain-specific bypass exceeds the stated URL-analysis and download purpose.

Content

No source excerpt is available for this finding.

Automatic proxy fallback lacks a privacy disclosure.

Medium
Category
Output Handling
Confidence
94% confidence
Finding

The instructions automatically retry failed downloads through a proxy without disclosing the change in network trust or obtaining consent. A proxy can observe destination and traffic metadata, and for unencrypted HTTP may also read sensitive URL tokens or modify downloaded content; HTTPS generally protects URL paths and content unless TLS is intercepted. This is particularly relevant for a downloader handling arbitrary URLs, although the referenced proxy implementation is unavailable and its trustworthiness cannot be determined here.

Content

No source excerpt is available for this finding.

Direct-file downloads can overwrite existing files without warning.

Medium
Category
Output Handling
Confidence
97% confidence
Finding

The curl recipe writes directly to the chosen output path and can truncate an existing file without an overwrite check or confirmation. Confirming the destination directory does not necessarily authorize replacing a file within it, and the filename comes from detection whose collision handling is not shown. A collision can therefore cause loss of existing data, with damage limited by the agent's filesystem permissions.

Content

No source excerpt is available for this finding.

Automatic proxy fallback is instructed without warning that download traffic will pass through a proxy operator.

Medium
Category
Output Handling
Confidence
90% confidence
Finding

The instructions automatically retry downloads through a proxy chain after direct connections fail, without requiring disclosure or approval of the proxy operator. This can unexpectedly expose destination metadata to that operator, and unencrypted HTTP downloads can additionally expose URL tokens and downloaded content or permit content modification; normal HTTPS certificate validation limits those risks for HTTPS. Proxy support is legitimate for a downloading skill, and respecting NO_PROXY reduces exposure, but the supplied file does not establish that fallback proxies are trusted or explicitly approved.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/check_tools.py (reported line 118)May include surrounding context.

python
Never raises — returns (None, error_msg) on failure.
    """
    try:
        r = subprocess.run(
            cmd, capture_output=True, text=True, timeout=timeout, check=False
        )
        return (r.stdout or "").strip(), (r.stderr or "").strip()

The filename sanitizer claims to reject '..' traversal but leaves '..' unchanged.

Medium
Category
Excessive Agency
Confidence
99% confidence
Finding

The docstring at L158-L164 explicitly promises path-traversal prevention and rejection of '..', but L175-L178 checks only for '..'; replacing separators does not transform consecutive dots into that pattern. Consequently, a magnet URL with dn=.. passes through L236-L240 and produces dest_name='..', contradicting the documented safety guarantee for downstream consumers.

Content

No source excerpt is available for this finding.

The filesystem-only guarantee at L017 contradicts execution of discovered tool binaries at L118–L120.

Low
Category
Excessive Agency
Confidence
96% confidence
Finding

L017 states that the checker checks the local filesystem only, but L158 invokes run_version_cmd, which executes each available tool with --version. Executing a discovered executable is materially different from inspecting filesystem metadata, although this code does not establish that network access or writes actually occur.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.