Back to skill

Security audit

Super Router

Security checks across malware telemetry and agentic risk

Overview

This skill appears to be a real model-routing tool, but it needs review because it can run provider CLIs with broad local environment access and auto-approved Gemini CLI execution.

Install only if you are comfortable with a router that can pass your task text and derived context to configured model providers, load local OpenClaw environment settings, and run provider CLIs. Review or disable Gemini auto-approval before sensitive use, keep LangSmith prompt/output previews off unless needed, avoid remote Ollama endpoints unless trusted, and treat saved prompts, logs, ledgers, and generated artifacts as sensitive data.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Rogue AgentSelf-Modification, Session Persistence
Findings (22)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
json.dump(build_gemini_temperature_settings(normalized_model, temperature), settings_file)
            env[GEMINI_SYSTEM_SETTINGS_ENV_VAR] = settings_path

            result = subprocess.run(
                command,
                capture_output=True,
                text=True,
Confidence
89% confidence
Finding
result = subprocess.run( command, capture_output=True, text=True, timeout=timeout, env=env,

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

Critical
Category
Data Flow
Content
)

    try:
        with urllib.request.urlopen(request, timeout=timeout) as response:
            data = json.loads(response.read().decode("utf-8"))
    except urllib.error.HTTPError as exc:
        body = exc.read().decode("utf-8", errors="replace")
Confidence
93% confidence
Finding
with urllib.request.urlopen(request, timeout=timeout) as response:

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

Medium
Category
Data Flow
Content
json.dump(build_gemini_temperature_settings(normalized_model, temperature), settings_file)
            env[GEMINI_SYSTEM_SETTINGS_ENV_VAR] = settings_path

            result = subprocess.run(
                command,
                capture_output=True,
                text=True,
Confidence
88% confidence
Finding
result = subprocess.run( command, capture_output=True, text=True, timeout=timeout, env=env,

Lp3

Medium
Category
MCP Least Privilege
Confidence
98% confidence
Finding
The skill documentation instructs execution of a Python router that can read environment variables and local files, write artifacts and logs, invoke shell commands, and contact external providers, yet the skill declares no permissions. This undermines informed consent and sandbox policy enforcement because a caller may trigger broad local and network access under the guise of a routing skill.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The advertised description frames the skill as a task router, but the body reveals substantial additional behavior: sending prompts to external services, optional LangSmith uploads, reading local auth and .env data, and generating artifacts via auxiliary scripts. That mismatch can cause users or supervising agents to approve execution without understanding that sensitive task content and local context may be transmitted or persisted.

Context-Inappropriate Capability

Medium
Confidence
81% confidence
Finding
The router reads OpenClaw auth profile data, including provider/account metadata and expiry state, outside the minimal scope needed for generic routing. In an adversarial skill context, extra credential-adjacent inspection increases the blast radius and can leak sensitive environment structure or authentication state through logs, prompts, or side channels.

Context-Inappropriate Capability

Medium
Confidence
84% confidence
Finding
The skill performs direct outbound network preflight probes to Google endpoints, which goes beyond simple routing logic and creates unsolicited network side effects. In locked-down or sensitive environments, this can leak network topology/policy information and violates least-privilege expectations for a router component.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The README documents optional LangSmith tracing and append-only token-usage ledger persistence, but the warning about possible transmission or storage of task-derived data is not prominent relative to the setup instructions. In practice, operators may enable telemetry or persistent ledgers without realizing prompts, output previews, metadata, model names, run identifiers, and usage records can expose sensitive task information to third-party services or local disk.

Vague Triggers

Medium
Confidence
91% confidence
Finding
The trigger condition includes the vague phrase 'asks for router analysis,' which can cause the skill to activate for broad, ambiguous requests rather than explicit invocation. Over-broad activation is dangerous here because the skill's prescribed behavior is to execute a local Python script that may perform network access, read configs, and create artifacts.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill describes LangSmith telemetry and append-only token ledgers, but does not place a prominent user-facing warning near those features explaining that prompts, outputs, metadata, and usage records may be uploaded externally or stored persistently. In a router that processes arbitrary user tasks, this can expose sensitive business, code, or personal data without sufficiently explicit consent.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The recovery instructions direct operators to inspect provider session JSONL logs but omit a warning that those files may contain full prompts, outputs, tokens, and other sensitive content. This increases the chance that users will access, copy, or persist confidential data during troubleshooting without understanding the exposure.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The Gemini CLI command includes automatic approval ('-y'), meaning any tool-capable behavior exposed by the CLI can proceed without user confirmation. In an agent router that handles arbitrary tasks, this materially weakens safety controls and can turn prompt-driven behavior into autonomous side effects.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The script launches `zsh -lic` with a dynamically constructed command that inlines the full prompt content into an environment assignment before invoking the router. Even though `$(/bin/cat '$PROMPT')` is intended to avoid direct shell interpolation from the parent shell, the resulting prompt text is still injected into a shell command string interpreted by `zsh`, which can break quoting or trigger command substitution if the prompt contains shell-significant characters. In this skill context, prompts are derived from collected source-tree context, so attacker-controlled repository content could become code execution in the background job environment.

Ssd 3

Medium
Confidence
91% confidence
Finding
These telemetry options can capture prompt previews and output previews, which may contain secrets, credentials, incident data, or other sensitive user content. In a router that processes arbitrary tasks, optional but easy-to-enable semantic logging is dangerous because it can silently export sensitive data to a third-party observability backend.

Ssd 3

Medium
Confidence
88% confidence
Finding
The token-usage ledger persistently records run metadata, task characteristics, status, models, and per-call records to a file path from environment. Persistent local retention of workflow metadata can expose sensitive operational details and create unintended long-term disclosure if file permissions or storage locations are weak.

Env Variable Harvesting

High
Category
Data Exfiltration
Content
if client_cls is None:
        return None
    kwargs: Dict[str, Any] = {}
    api_key = os.environ.get("LANGSMITH_API_KEY", "").strip() or os.environ.get("LANGCHAIN_API_KEY", "").strip()
    endpoint = os.environ.get("LANGSMITH_ENDPOINT", "").strip() or os.environ.get("LANGCHAIN_ENDPOINT", "").strip()
    workspace_id = os.environ.get("LANGSMITH_WORKSPACE_ID", "").strip()
    if api_key:
Confidence
72% confidence
Finding
os.environ.get("LANGSMITH_API_KEY

Env Variable Harvesting

High
Category
Data Exfiltration
Content
if client_cls is None:
        return None
    kwargs: Dict[str, Any] = {}
    api_key = os.environ.get("LANGSMITH_API_KEY", "").strip() or os.environ.get("LANGCHAIN_API_KEY", "").strip()
    endpoint = os.environ.get("LANGSMITH_ENDPOINT", "").strip() or os.environ.get("LANGCHAIN_ENDPOINT", "").strip()
    workspace_id = os.environ.get("LANGSMITH_WORKSPACE_ID", "").strip()
    if api_key:
Confidence
72% confidence
Finding
os.environ.get("LANGCHAIN_API_KEY

Context Leakage

High
Category
Data Exfiltration
Content
export SOURCE_SRC="$SRC" CONTEXT_OUT="$CTX" ROUTER_PROMPT="$PROMPT" ROUTER_LOG="$LOG" HTML_OUT="$OUT" RUN_DIR

printf '[step] collect context\n' | tee -a "$STATUS"
python3 "$RUN_DIR/collect_context.py" 2>&1 | tee -a "$STATUS"
COLLECT_EXIT=${PIPESTATUS[0]}
if [ "$COLLECT_EXIT" -ne 0 ]; then
Confidence
78% confidence
Finding
collect context

Unvalidated Output Injection

High
Category
Output Handling
Content
json.dump(build_gemini_temperature_settings(normalized_model, temperature), settings_file)
            env[GEMINI_SYSTEM_SETTINGS_ENV_VAR] = settings_path

            result = subprocess.run(
                command,
                capture_output=True,
                text=True,
Confidence
90% confidence
Finding
subprocess.run( command, capture_output

Credential Access

High
Category
Privilege Escalation
Content
def load_openclaw_env_file(env_file: str | None = None) -> None:
    """Load KEY=VALUE pairs from OpenClaw's .env without overriding explicit env."""
    configured_path = (env_file or os.environ.get("OPENCLAW_ENV_FILE", "")).strip()
    if configured_path:
        env_path = os.path.expanduser(configured_path)
Confidence
87% confidence
Finding
.env

Credential Access

High
Category
Privilege Escalation
Content
env_path = os.path.expanduser(configured_path)
    else:
        openclaw_home = os.path.expanduser(os.environ.get("OPENCLAW_HOME", "~/.openclaw"))
        env_path = os.path.join(openclaw_home, ".env")
    if not env_path or not os.path.exists(env_path):
        return
Confidence
87% confidence
Finding
.env"

Session Persistence

Medium
Category
Rogue Agent
Content
### Post-Completion Artifact Verification

For router runs that create or modify artifacts (reports, JSON logs, database ingests, generated files), do not trust the router final stdout alone. Before reporting success to the user:

1. Inspect the declared output artifacts directly (`stat`, read the JSON/Markdown headers, count expected sections/cards when relevant).
2. Compare the router final summary against the saved artifacts and machine-readable logs.
Confidence
86% confidence
Finding
create or modify artifacts (reports, JSON logs, database ingests, generated files), do not trust the router final stdout alone. Before reporting success to the user: 1. Inspect the declared output ar

VirusTotal

65/65 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.