Back to skill

Security audit

Windows Skills

Security checks for vulnerabilities and agentic risk

Overview

This desktop automation skill is purpose-aligned but needs Review because it can capture full-screen/window contents and OCR sensitive on-screen data without clear consent, minimization, or retention guidance.

Install only if you are comfortable giving the skill desktop screenshot and OCR capability. Use it on the smallest region or window possible, avoid screens containing secrets or private documents, store screenshots only where intended, delete captures when done, and install dependencies in an isolated environment with reviewed or pinned versions.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:12
Finding
Unpinned Third-Party Dependencies Without Integrity Verification## Vulnerability Details **File Location**: `SKILL.md`, line 12 **Vulnerability Type**: Uncontrolled third-party dependency resolution **Risk Level**: Medium **Vulnerable Code**: ```bash pip install mss pytesseract pillow pyautogui opencv-python numpy ``` ### Technical Analysis The documented installation command installs six third-party packages without fixed versions or cryptographic hash verification. Consequently, the exact code installed is determined by the package index at installation time rather than by a reviewed and reproducible dependency manifest. Package installation may execute package build or installation logic, and imported dependencies execute with the privileges of the user running the Skill. A compromised package release, compromised transitive dependency, unsafe package-index configuration, or malicious package-index mirror could therefore introduce code that was not present during this audit. No evidence was found that the named packages are currently malicious. The vulnerability is the absence of dependency pinning and integrity controls, which creates an avoidable supply-chain trust boundary. ### Attack Path 1. An attacker compromises a listed package, one of its transitive dependencies, or a package index used by the victim. 2. The attacker publishes a malicious release that is compatible with the unconstrained installation request. 3. A user follows the installation instructions in `SKILL.md`. 4. `pip` resolves and downloads the attacker-controlled release because no reviewed version or hash is required. 5. Malicious code executes during installation or when the dependency is imported by the Skill. ### Impact Assessment Successful exploitation could execute arbitrary code with the privileges of the user installing or running the Skill. Depending on those privileges, the attacker could access local files and screen contents, modify user data, steal credentials availa ...[truncated 284 chars]
Remediation
## Remediation Suggestions 1. Replace the unconstrained installation command with dependencies pinned to exact, reviewed versions. 2. Generate a lock file containing cryptographic hashes for all direct and transitive dependencies. 3. Install dependencies using hash enforcement, such as: ```bash pip install --require-hashes -r requirements.txt ``` 4. Configure installation to use an explicitly trusted package index and disallow unexpected supplemental indexes. 5. Review and update pinned dependencies through a controlled process that includes vulnerability scanning and package provenance verification. 6. Perform installation in an isolated virtual environment under a non-administrative account. 7. Consider producing signed, reproducible deployment artifacts so users do not resolve dependencies dynamically at installation time.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (11)

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill explicitly enables full-screen, region, and window capture plus OCR extraction, but provides no caution that these actions may collect credentials, personal data, internal documents, chats, or other sensitive on-screen content. In an agent context, normalizing screenshot and OCR collection without consent, minimization, or handling guidance increases the risk of privacy violations and unintended data exfiltration.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The Chinese section repeats the screenshot and OCR guidance and therefore repeats the same omission of privacy and sensitive-data warnings for desktop capture. Because the unsafe guidance is duplicated for another audience, it broadens the chance that users will employ these capabilities without understanding the data-handling risks.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The function captures the entire screen via pyautogui.screenshot() without any user-facing notice, consent flow, or scope limitation. Screen contents can contain sensitive information such as messages, credentials, or personal data, so silent capture creates a real privacy and data-exposure risk even if the immediate purpose is image matching.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
wait_and_locate repeatedly invokes locate_on_screen, which triggers repeated full-screen captures during polling without any additional notice or user control. This increases privacy exposure because more screen states are collected over time, potentially capturing transient sensitive content and making the behavior less obvious to users.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
This code uses Chinese-only natural-language strings in the module docstring, function docstrings, exceptions, usage text, and status output. The file does not offer a language choice for these user-facing messages or document a justified locale restriction, which conflicts with the policy against forcing a specific language without opt-in.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The functions capture the full screen or arbitrary regions and write the images to disk without any user-facing notice, consent flow, or safeguards around sensitive content. In an agent skill context, screenshots can easily include passwords, tokens, personal messages, or confidential documents, so silent capture materially increases privacy and data-exposure risk.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The code enumerates visible window titles and supports targeted capture of a chosen window, again without informing the user that application names/titles and window contents will be inspected and saved. This increases sensitivity because window titles alone may reveal private information, and targeted capture can be used to selectively collect high-value data from browsers, chats, or enterprise tools.

Missing User Warnings

Low
Confidence
83% confidence
Finding
The example performs a live pyautogui.click on a located UI element without warning that automation can trigger unintended actions in real applications, including submitting forms, dismissing prompts, or altering system state. While the snippet is simple, presenting a direct click action as default behavior encourages unsafe execution against a live desktop.

Natural-Language Policy Violations

Low
Confidence
76% confidence
Finding
The module docstrings and comments are written only in Chinese, including user-relevant descriptive text such as the module and function descriptions. Under the stated policy, forcing a specific language without offering a choice or documenting a justified locale constraint can be a natural-language policy violation.

Natural-Language Policy Violations

Low
Confidence
82% confidence
Finding
All user-facing docstrings, error messages, and CLI messages are presented only in Chinese, with no option to select another language. Per the policy, forcing a specific language without user opt-in is a natural-language policy concern.

Natural-Language Policy Violations

Low
Confidence
95% confidence
Finding
Docstrings, comments, exception text, and console output are all written in Chinese, with no indication of language choice or opt-in. This creates a locale/language policy issue because the skill implicitly enforces a single language for users and maintainers.

Static analysis

No suspicious patterns detected.