Back to skill

Security audit

desktop-control

Security checks across malware telemetry and agentic risk

Overview

This is a powerful Windows desktop automation skill, but its local-only privacy claims conflict with code that can send prompts to remote LLM services.

Install only if you intentionally want an agent to control your Windows desktop, inspect screen/OCR/UIA content, use the clipboard, and optionally record or replay global input. Treat the zero-network claim as unreliable unless LLM_API_KEY and LLM_BASE_URL remain unset and you avoid helper scripts that download resources. Review generated scripts before running them and shut down the daemon when not needed.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • 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 (156)

eval() call detected

High
Category
Dangerous Code Execution
Content
def _safe_eval(expr):
    """Evaluate a condition expression in a restricted environment."""
    try:
        return bool(eval(expr, _SAFE_GLOBALS, _SAFE_LOCALS))
    except Exception as e:
        raise RuntimeError(f"Condition evaluation failed: '{expr}'. {e}")
Confidence
89% confidence
Finding
return bool(eval(expr, _SAFE_GLOBALS, _SAFE_LOCALS))

subprocess module call

Medium
Category
Dangerous Code Execution
Content
for i in range(3):  # 3 times safe
    r = send_request("ping", {})
    old_pid = r.get("result",{}).get("data",{}).get("pid")
    subprocess.run(["taskkill", "/F", "/PID", str(old_pid)], capture_output=True)
    time.sleep(2)
    try:
        r = send_request("ping", {})
Confidence
94% confidence
Finding
subprocess.run(["taskkill", "/F", "/PID", str(old_pid)], capture_output=True)

subprocess module call

Medium
Category
Dangerous Code Execution
Content
import subprocess
# Kill it
kill = subprocess.run(["taskkill", "/F", "/PID", str(old_pid)], capture_output=True, text=True)
if kill.returncode == 0 or "SUCCESS" in kill.stdout:
    print(f"  已终止 PID {old_pid}")
Confidence
94% confidence
Finding
kill = subprocess.run(["taskkill", "/F", "/PID", str(old_pid)], capture_output=True, text=True)

Tainted flow: 'PIPE_INFO_FILE' from os.environ.get (line 19, credential/environment) → open (file write)

Medium
Category
Data Flow
Content
# 5. Write pipe name and PID for the client to discover
    lifecycle.write_pid_file()
    with open(PIPE_INFO_FILE, "w") as f:
        f.write(pipe_name)

    print(f"desktop-control daemon ready on {pipe_name} [pid {os.getpid()}]")
Confidence
85% confidence
Finding
with open(PIPE_INFO_FILE, "w") as f:

Tainted flow: 'path' from os.environ.get (line 249, credential/environment) → open (file write)

Medium
Category
Data Flow
Content
_ensure_cache_dir()
    path = os.path.join(SCRIPT_CACHE, _cache_key(prompt))
    try:
        with open(path, "w", encoding="utf-8") as f:
            json.dump(script, f, ensure_ascii=False, indent=2)
        logger.info(f"Script cached at: {path}")
    except IOError as e:
Confidence
82% confidence
Finding
with open(path, "w", encoding="utf-8") as f:

Tainted flow: 'url' from os.environ.get (line 90, credential/environment) → requests.post (network output)

Critical
Category
Data Flow
Content
}

    try:
        resp = requests.post(url, headers=headers, json=payload, timeout=60)
        resp.raise_for_status()
        data = resp.json()
    except requests.exceptions.Timeout:
Confidence
95% confidence
Finding
resp = requests.post(url, headers=headers, json=payload, timeout=60)

Tainted flow: 'PID_FILE' from os.environ.get (line 43, credential/environment) → open (file write)

Medium
Category
Data Flow
Content
def write_pid_file():
    with open(PID_FILE, "w") as f:
        f.write(str(os.getpid()))
Confidence
86% confidence
Finding
with open(PID_FILE, "w") as f:

Tainted flow: 'LOG_FILE' from os.environ.get (line 48, credential/environment) → open (file write)

Medium
Category
Data Flow
Content
"params": safe_params,
            "success": success,
        }
        with open(LOG_FILE, "a", encoding="utf-8") as f:
            f.write(json.dumps(entry, ensure_ascii=False) + "\n")
    except Exception:
        pass  # Logging failure should never crash the daemon
Confidence
88% confidence
Finding
with open(LOG_FILE, "a", encoding="utf-8") as f:

Lp3

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding
The skill advertises powerful capabilities that imply shell, file, environment, and possibly network access, yet it declares no explicit permissions or trust boundaries. This creates a transparency and governance gap: users or orchestrators cannot accurately assess or constrain what the skill may do, which is especially dangerous for a desktop-control skill that can read screen content, drive input, and persist files.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The documented behavior substantially exceeds the stated purpose, including OCR, clipboard access, macro recording, UI automation, script generation, and agent-oriented tool execution. This mismatch undermines informed consent and increases the chance the skill will be invoked in contexts where users do not expect sensitive screen scraping, automation, or broad system interaction.

Intent-Code Divergence

Medium
Confidence
77% confidence
Finding
The report claims 'zero network exfiltration' while elsewhere documenting an optional requests dependency. In a desktop-control skill, inaccurate security claims are dangerous because they can cause operators to trust a tool with screenshot, clipboard, keyboard, and process access under the false assumption that network-capable code paths are absent.

Description-Behavior Mismatch

Medium
Confidence
94% confidence
Finding
The manifest description omits several substantial capabilities, including OCR/UIA automation, clipboard operations, hotkeys, macro recording, and natural-language/script generation. In a desktop-control context, these omissions matter because they expand the skill from simple interaction into surveillance, automation, and persistence-like behavior that users and policy layers may not anticipate.

Description-Behavior Mismatch

Low
Confidence
94% confidence
Finding
The manifest description omits several substantial capabilities, including OCR/UIA automation, clipboard operations, hotkeys, macro recording, and natural-language/script generation. In a desktop-control context, these omissions matter because they expand the skill from simple interaction into surveillance, automation, and persistence-like behavior that users and policy layers may not anticipate.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
Clipboard read/write is highly sensitive in a desktop-control skill because the clipboard often contains passwords, tokens, personal data, or copied documents. Without explicit justification and strong user-facing disclosure, this capability enables easy collection or manipulation of sensitive data beyond what users may expect from basic screenshot or window-control tasks.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
Macro recording and playback can capture or replay global mouse and keyboard events, which may include credentials, private messages, or security-sensitive workflows. In this context, it meaningfully increases the skill's power from interactive assistance to broad surveillance and repeatable system control, making misuse far more damaging.

Context-Inappropriate Capability

Low
Confidence
80% confidence
Finding
Global hotkey registration affects system-wide input handling and can interfere with user control or create stealthy activation paths for automation. Although not inherently malicious, in a desktop automation skill it expands reach and persistence-like behavior beyond the manifest's stated scope and should be treated as a sensitive capability.

Description-Behavior Mismatch

Medium
Confidence
88% confidence
Finding
This module adds persistent macro recording and replay, including global keyboard capture, which materially expands capability from ordinary desktop control into user activity surveillance and automation. In a desktop-control skill, such functionality is plausible, but the global capture of all keystrokes and clicks creates a real security boundary expansion that could capture credentials or other sensitive input.

Context-Inappropriate Capability

High
Confidence
95% confidence
Finding
The recording handlers start global mouse and keyboard listeners that capture all user input system-wide, including potentially sensitive data such as passwords, messages, and secrets typed outside the intended app. Even if intended for macros, this is functionally keylogging/surveillance capability and is dangerous without strict consent, scoping, and auditing controls.

Description-Behavior Mismatch

High
Confidence
95% confidence
Finding
The handlers explicitly expose generic script submission, synchronous execution, status polling, result retrieval, and cancellation. For a skill whose declared purpose is Windows desktop control (screenshots, window/process management, mouse/keyboard, system info), a multi-step script runner materially expands capability into arbitrary automation/execution, which can be abused to perform actions far beyond the stated scope.

Context-Inappropriate Capability

High
Confidence
97% confidence
Finding
The code accepts a user-provided script object and forwards it directly to the execution engine with only minimal presence checks on 'script' and 'steps'. There is no visible validation of permitted actions, no scope enforcement against the desktop-control use case, and no guardrails shown here, making this a generic execution primitive that could enable unauthorized system manipulation if the engine supports powerful steps.

Description-Behavior Mismatch

Medium
Confidence
84% confidence
Finding
This file implements a general-purpose automation/orchestration engine with conditionals, loops, retries, variables, and async execution, which materially expands capability beyond narrow one-shot desktop-control primitives. That broader programmability increases abuse potential by enabling persistence, repeated destructive actions, evasion of simple policy checks, and complex chained workflows from a single request.

Context-Inappropriate Capability

Medium
Confidence
76% confidence
Finding
The handler map exposes file drag-and-drop automation, which can be used to move or exfiltrate files through GUI workflows and is not clearly justified by the stated manifest purpose. In a desktop-control context, file manipulation primitives significantly raise the risk of sensitive document handling, unauthorized uploads, or tampering with local data via automated UI interactions.

Description-Behavior Mismatch

Medium
Confidence
91% confidence
Finding
This file implements a general script generation/execution pipeline rather than a narrowly scoped desktop helper, including acceptance of generated or user-supplied JSON scripts. In a desktop-control skill, that significantly expands the attack surface because arbitrary automation logic can be created and then handed to an execution engine, enabling misuse beyond the manifest's apparent user expectations.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The allowed action list includes OCR, image matching, UI automation, drag-and-drop, and control-flow primitives, which collectively enable complex, adaptive automation beyond basic desktop control. In context, these capabilities can be chained to locate sensitive windows, read on-screen data, manipulate applications, and repeatedly act without direct user supervision.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
Natural-language requests and context are sent to a configured LLM backend, which then produces executable automation scripts. This creates two risks: sensitive desktop-task context may be exfiltrated to a third-party backend, and the generated script may contain unsafe or overbroad actions that pass this file's relatively shallow validation before execution.

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: suspicious.dynamic_code_execution

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
daemon/script_engine/engine.py:52