Back to skill

Security audit

OpenClaw 11-in-1 Visual Automation Suite (Windows Only) Complete visual automation toolkit with 11 integrated modules. ### 💰 Price One-time purchase: **$2.99** (Lifetime access to all modules + future updates) ### 🚀 How to Purchase 1. Pay via PayPal Invoice: 🔗 [Click to pay $2.99](https://www.paypal.com/invoice/p/#V2RC9S8LVKJ434R9) 2. After payment, send your email to: **1215066513@qq.com** 3. I will send the full download link within 12 hours. ### 🖥️ Compatibility - Windows 10 / 11 only - Not compatible with macOS / Linux ## 1. Product Basic Description ### 1.1 Core Functions Provides professional universal computer vision automation capabilities covering the full-process visual automation scenarios such as environment initialization, full-screen automatic screenshot, OCR text recognition, template matching target localization, mouse click simulation, keyboard input simulation, and complete environment initialization & cleanup mechanisms. It supports custom task combination and cyclic execution. ### 1.2 Version & Directory Description - Core Capability: Flexible invocation based on minimum executable units, supporting parameter customization, result variable inheritance, and custom skill saving. All functions can be used directly with the `call` command right after extracting the package. - Directory Structure: - `claw.json` - Skill package configuration file - `skills/all_skills.claw` - All skill unit definitions - `templates/` - Directory for template images (place your template images here for matching) - Temporary file directory `temp/` (for storing screenshots like temp/screen.png) is automatically created after executing `init_env`; temporary screenshot files can be cleaned up via `clean_temp`. - Version Info: Current version: 1.0.0; Compatible with OpenClaw >= 1.0.0 ### 1.3 Paid Attribute This automation skill system (vision-auto-tool-pro) is a paid professional toolkit. The document does not explicitly authorize commercial use of the toolkit. The paid permission only covers basic usage (non-commercial by default), and commercial use requires separate confirmation of authorization with the provider (e.g., purchasing a commercial license, signing a commercial agreement). ## 2. Complete Skill Invocation Manual ### Important Notes Ensure sufficient time is reserved for the computer to respond to each click or operation. For example, add a 2-second wait after `mouse_click` to avoid operation failure due to slow system response. ### 2.1 List of All Minimum Executable Units | Unit Name | Fixed Call Name | Function Description | Individual Call Method | |-------------------------|--------------------------|--------------------------------------------------------------------------------------|-------------------------------------------------| | Initialize Environment | `init_env` | Create directory structure, clear temporary files, check template directory | `call init_env` | | Full Screen Screenshot | `screenshot_full` | Capture entire screen and save as temp/screen.png | `call screenshot_full` | | Check Screenshot Validity | `check_screenshot_valid` | Check for black screen/freeze, wake up the interface if invalid | `call check_screenshot_valid` | | Wake Interface | `wake_window` | Solve the problems of background non-rendering and black screenshot | `call wake_window` | | OCR Recognition | `ocr_recognize` | Recognize all text on the screen and their corresponding coordinates | `call ocr_recognize` | | Template Matching | `template_match` | Use template image to match and locate icons/buttons | `call template_match category template_name` | | Unified Localization | `locate_target` | Prioritize OCR positioning; use template matching if not found, return coordinates | `call locate_target target_text OR category+template_name` | | Mouse Click | `mouse_click` | Move to the specified coordinates and perform click operation | `call mouse_click X Y [click_type, default=single_click]` | | Keyboard Input | `keyboard_input` | Input text after locating the input box | `call keyboard_input target_coords/description input_content` | | Clean Temporary Files | `clean_temp` | Delete temporary screenshots and free up storage space | `call clean_temp` | | Loop Restart | `loop_restart` | Wait 2 seconds then go back to the screenshot step and restart the process | `call loop_restart` | ### 2.2 Method for Invoking Individual Units #### Invocation Format ``` call [unit_call_name] [parameter...] ``` #### Invocation Examples - Initialize environment: `call init_env` - Template match browser icon on desktop: `call template_match desktop web` - Perform double-click at coordinates (100,200): `call mouse_click 100 200 double` ### 2.3 Combine into Custom New Tasks By writing one call instruction per line in execution order, you can combine them into a custom new task, which supports variable inheritance, looping, and permanent saving. #### Format Example (Open Browser) ``` # Task Name: Open Browser call init_env call screenshot_full call check_screenshot_valid call locate_target browser desktop Browser call mouse_click {{resultX}} {{resultY}} double call clean_temp ``` #### Combination Steps 1. **Write task name and description first** (for easier identification later) 2. **In execution order**, write one `call unit_name parameters` instruction per line 3. Coordinates can use variables `{{resultX}}`/`{{resultY}}` to inherit the output result of the previous unit 4. If cyclic execution is required, add `call loop_restart` at the end 5. **Save custom skill**: Use `save_skill skill_name instruction_list` to save the task permanently, then call it directly with `call skill_name` ### 2.4 Complete Main Flow Invocation Example ``` # General Main Flow: vision_auto_main call init_env call screenshot_full call check_screenshot_valid call ocr_recognize # If template matching is needed, add this line: call template_match category name call locate_target target_text call mouse_click {{X}} {{Y}} # If text input is needed, replace the above line with: call keyboard_input {{X}} {{Y}} input_content call clean_temp # Add this line if you need to loop: call loop_restart ``` ### Important Notes Ensure sufficient time is reserved for the computer to respond to each click or operation. > For example, add a 2-second wait after `mouse_click` to avoid operation failure due to slow system response.

Security checks for vulnerabilities and agentic risk

Overview

This desktop automation skill is mostly purpose-aligned, but it needs review because it can capture the full screen, control the mouse and keyboard, persist OCR text temporarily, and includes an overbroad cleanup function that can delete caller-selected files.

Install only if you are comfortable granting the skill live desktop-control authority. Keep secrets and private windows off screen during use, avoid using it for passwords or one-time codes, run it only on controlled tasks, and review or patch the cleanup and logging behavior before using it on valuable files or production desktops.

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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
all_skills.py:253
Finding

Unrestricted File Deletion Through Caller-Controlled Cleanup Paths

Content
View full analysis

Vulnerability Details

File Location: all_skills.py:13-35, all_skills.py:253-258, and all_skills.py:276-321
Vulnerability Type: Unrestricted file deletion caused by insufficient path validation
Risk Level: High

Vulnerable Code

python
def init_env(base_path="./computer_skill"):
    """
    Initialize the environment: create the directory structure, clear temp,
    and check template directories.
    """
    dirs = [
        f"{base_path}",
        f"{base_path}/templates",
        f"{base_path}/templates/desktop",
        f"{base_path}/templates/taskbar",
        f"{base_path}/templates/system",
        f"{base_path}/templates/wechat",
        f"{base_path}/temp"
    ]

    for d in dirs:
        if not os.path.exists(d):
            os.makedirs(d)
            print(f"Created directory: {d}")

    # Clear temp
    temp_dir = f"{base_path}/temp"
    for f in os.listdir(temp_dir):
        os.remove(os.path.join(temp_dir, f))
python
def clean_temp(temp_dir="./computer_skill/temp"):
    """
    Delete temporary screenshots and release storage.
    """
    for f in os.listdir(temp_dir):
        os.remove(os.path.join(temp_dir, f))

    print("Temporary directory cleared")
    return True

The main workflow propagates its caller-controlled base_path into the cleanup operation:

python
def vision_auto_main(target_text, category=None, template_name=None,
                      action='click', input_text=None, loop=False,
                      base_path="./computer_skill"):
    # ...
    if not result:
        if not loop:
            return False
        clean_temp(f"{base_path}/temp")
        loop_restart()
        continue

    # ...

    clean_temp(f"{base_path}/temp")

Technical Analysis

The cleanup functions delete every ordinary file found in a directory without verifying that the directory is an applica ...[truncated 2023 chars]

Remediation
View remediation

Remediation Suggestions

  1. Use a fixed, application-owned temporary root rather than accepting arbitrary cleanup directories.
  2. Create temporary storage with Python's tempfile facilities and retain the exact directory handle or resolved path.
  3. Canonicalize both the trusted root and requested target with pathlib.Path.resolve().
  4. Reject cleanup unless the resolved target is strictly contained within the trusted Skill-owned root.
  5. Explicitly reject dangerous targets such as the filesystem root, user home, project root, and pre-existing directories not created by the Skill.
  6. Create an ownership marker inside the temporary directory and verify it before deletion.
  7. Track files created by the current execution and delete only those files instead of deleting every directory entry.
  8. Handle symbolic links safely and do not follow a link that resolves outside the trusted temporary root.
  9. Apply least-privilege filesystem permissions to the process account.
  10. Add tests covering absolute paths, parent traversal, symbolic links, root directories, home directories, and unrelated pre-existing temp directories.

A hardened implementation should enforce containment before removing tracked files:

python
from pathlib import Path

SKILL_ROOT = (Path.cwd() / "computer_skill").resolve()
TEMP_ROOT = (SKILL_ROOT / "temp").resolve()

def clean_temp():
    if TEMP_ROOT.parent != SKILL_ROOT:
        raise ValueError("Invalid temporary directory")

    for candidate in TEMP_ROOT.iterdir():
        resolved = candidate.resolve()
        if TEMP_ROOT not in resolved.parents:
            raise ValueError("Cleanup target escapes the temporary directory")
        if candidate.is_file() and not candidate.is_symlink():
            candidate.unlink()

T09 · Insecure Skill Coding Practices

Note
Location
all_skills.py:237
Finding

Sensitive Keyboard Input Disclosed in Console Logs

Content
View full analysis

Vulnerability Details

File Location: all_skills.py:237-248
Vulnerability Type: Plaintext sensitive-data exposure through logging
Risk Level: Low

Vulnerable Code

python
def keyboard_input(text, x=None, y=None, coord_path="./computer_skill/temp/coord.txt"):
    """
    Locate an input field and enter text.
    If x and y are provided, click the input field first.
    """
    import pyautogui

    if x is not None and y is not None:
        pyautogui.click(x, y)

    pyautogui.write(text, interval=0.05)
    print(f"Keyboard input completed: {text[:20]}{'...' if len(text) > 20 else ''}")
    return True

Technical Analysis

The function copies up to the first 20 characters of every value passed to keyboard_input into standard output. Desktop automation can be used to enter passwords, API tokens, one-time codes, personal messages, account identifiers, or other confidential content.

Truncation does not provide meaningful protection. Secrets shorter than or equal to 20 characters are logged in full, while the exposed prefix of a longer secret may still be sufficient for disclosure, correlation, or follow-on attacks. Standard output may be retained by terminals, CI systems, orchestration platforms, Agent execution traces, or centralized logging services.

Attack Path

  1. A user or workflow supplies confidential text through the input_text parameter or calls keyboard_input directly.
  2. pyautogui.write() enters the text into the selected desktop application.
  3. The subsequent print() operation writes the first 20 characters of the same value to standard output.
  4. An operator, service, or logging platform captures and retains the output.
  5. Anyone with access to those logs can recover the disclosed content.

Impact Assessment

Exploitation requires access to the Skill's console output or retained logs. It does not provide privilege escalation by itself. However, it ...[truncated 395 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove the input value from all routine log messages.
  2. Log only a generic success message, such as Keyboard input completed.
  3. If operationally necessary, log only a non-sensitive character count.
  4. Treat keyboard input as sensitive by default rather than attempting to infer whether it is a password.
  5. Ensure exception handlers do not include the plaintext input in diagnostic output.
  6. If debug logging of values is ever supported, require explicit opt-in and apply robust redaction before emitting logs.
  7. Review and purge existing execution logs that may contain previously entered secrets.

A safe replacement is:

python
pyautogui.write(text, interval=0.05)
print("Keyboard input completed")
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 (9)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill explicitly performs full-screen screenshots and OCR over all on-screen text, but it does not warn users that sensitive information such as passwords, messages, documents, or personal data may be captured and processed. In a desktop automation context, this omission is dangerous because operators may invoke the skill on live systems without understanding the privacy and data-handling implications.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill supports automated mouse clicks and keyboard input that can change application and system state, yet it provides no user warning about the risk of unintended actions such as sending messages, modifying files, confirming dialogs, or triggering destructive operations. Because the framework is designed for composable and repeatable automation, misuse or mis-targeting can quickly amplify the effect of incorrect input or malicious task definitions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill captures a full-screen image of the user's desktop, which can include sensitive data such as messages, credentials, documents, or other application content. Because this occurs without any user-facing disclosure, consent, scope restriction, or minimization, it creates a real privacy and data-handling risk even if the stated purpose is UI automation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This function moves the mouse to the screen center and performs a live click on the active desktop without confirmation. In a real user environment, that can trigger unintended actions, dismiss dialogs, activate controls, or interfere with another application, creating both safety and integrity risks.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The OCR routine extracts all visible screen text and writes it to a plaintext file, which can expose highly sensitive information present anywhere on screen, including chats, emails, tokens, or internal documents. Persisting that data to disk without notice, access controls, or retention limits increases the chance of unintended disclosure or later misuse.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The keyboard input function injects text into the active UI and may first click a coordinate, which can alter application state or send sensitive or destructive commands to the wrong target if focus is incorrect. Without confirmation, focus validation, or clear disclosure, this is a genuine risk in any environment where other applications may be active.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The manifest presents the skill name and description entirely in Chinese, with no indication that users can choose another language or that the skill is intended only for a Chinese-speaking or region-specific environment. This creates a natural-language policy concern because the skill appears to impose a specific language by default without opt-in or documented justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The default lang='chi_sim' forces Chinese OCR behavior, which is a locale-specific choice. The file does not indicate that this is optional user-selected behavior or justify the restriction as a region-specific skill.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The function uses lang='chi_sim' by default, which sets a specific language policy for OCR processing. There is no surrounding natural-language documentation stating that the skill is China-specific or that users should opt into this locale setting.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.