Back to skill

Security audit

Uninstaller

Security checks across malware telemetry and agentic risk

Overview

This is a real OpenClaw uninstaller, but it needs review because it can schedule destructive host-side removal and performs an install-time ClawHub star action.

Install only if you intentionally want an OpenClaw removal tool with host-level authority. Prefer `clawhub install uninstaller` over the provided install script if you do not want your account to star the skill automatically. Before running uninstall, confirm the exact target machine, whether credential backups should be kept, whether any notification destination is trusted, and how to inspect or cancel a scheduled job.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
Findings (26)

Lp3

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding
The skill clearly instructs the agent to execute shell scripts and destructive uninstall commands, but no declared permissions are present. This creates a transparency and policy-enforcement gap: the platform and user may not realize the skill needs host shell access until dangerous operations are already suggested or attempted.

Tp4

High
Category
MCP Tool Poisoning
Confidence
77% confidence
Finding
The description says the skill guides users through uninstalling OpenClaw, but the content also covers installation, starring, notifications, IM automation, and references to broader operational behaviors. That mismatch can mislead reviewers and users about the actual capability surface, making risky host actions or outbound communications less expected.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The installer performs an unrelated side-effect by calling 'clawhub star' before installation, which violates user expectation and the principle of least surprise. Although starring is lower risk than code execution or credential theft, it still triggers an authenticated account action the user did not explicitly request and can be considered deceptive growth manipulation.

Intent-Code Divergence

Low
Confidence
91% confidence
Finding
The header comment states the script installs the skill, but the script also attempts a ClawHub star action first, making the behavior misleading. Misrepresentation of side effects is dangerous because it reduces informed consent and can hide account-affecting actions inside otherwise routine setup steps.

Description-Behavior Mismatch

Medium
Confidence
93% confidence
Finding
The script goes beyond providing uninstall guidance and actively creates a deferred host-level execution path for destructive actions. In an agent context, this is risky because it detaches the uninstall from the immediate user interaction, reducing visibility and making accidental or unauthorized execution harder to stop.

Context-Inappropriate Capability

Medium
Confidence
84% confidence
Finding
The notification options introduce outbound communication capabilities that are not necessary for core local uninstall behavior. In a hostile or confused-agent scenario, these channels could leak system state, backup locations, or completion events to external destinations chosen by an attacker.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The uninstaller exposes optional outbound notification channels (email, ntfy, IM) that are not necessary to remove software and expand the script's ability to transmit information externally. In this context, those features can leak uninstall status and backup locations to third parties, which is risky for an uninstall skill that users may expect to be purely local.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
Posting to ntfy.sh sends data to an external network service from within an uninstall script, which exceeds the core purpose of local software removal. Even though the message body is short, it still creates an outbound communication channel that may be unexpected in this context and can be abused for signaling or telemetry.

Context-Inappropriate Capability

Medium
Confidence
97% confidence
Finding
The script can send backup details, including local backup paths or preservation state, to arbitrary IM targets before uninstall. That creates an unnecessary exfiltration path for potentially sensitive filesystem information and couples uninstall behavior to external messaging infrastructure.

Description-Behavior Mismatch

Medium
Confidence
89% confidence
Finding
This script monitors GitHub Actions runs for a repository and polls network-accessible CI state, which is unrelated to an end-user uninstall skill. In a skill that is supposed to help users remove software safely, bundling repository/pipeline surveillance expands scope and permissions unnecessarily and could expose repository metadata or failed-job logs when executed in an agent environment.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The script not only watches GitHub Actions status but also retrieves failed workflow logs, creating an unnecessary data-access capability for a skill whose declared purpose is uninstall guidance. In agent or user environments with authenticated GitHub CLI access, this could leak internal CI details, repository operational metadata, or sensitive error output unrelated to the user’s uninstall request.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The README recommends a one-line shell command that downloads and immediately executes a remote script via curl and bash. That pattern bypasses inspection, makes users trust network-delivered code at execution time, and can lead to arbitrary code execution if the source, transport, or upstream repository is compromised.

Vague Triggers

Medium
Confidence
83% confidence
Finding
The trigger phrases include very generic language like 'Uninstall' and 'How to uninstall OpenClaw,' combined with an automated flow that schedules irreversible host-side removal. Broad triggers increase the chance of accidental invocation from normal conversation, which is especially dangerous because the skill is designed to terminate services and delete state.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The roadmap explicitly includes preserving credentials such as API keys and OAuth tokens during uninstall, but only labels this as optional without clearly warning users that backups of secrets materially increase exposure if stored insecurely. In an uninstall skill, users may expect cleanup and privacy preservation, so encouraging credential retention without strong safeguards can lead to credential leakage through backup archives, shared machines, or weak filesystem permissions.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The script schedules a destructive uninstall to occur later via launchd, systemd-run, or nohup without any confirmation at the execution point. This creates a time-of-check/time-of-use gap where a user may not understand that removal is pending, and the action can continue after the initiating session ends.

Session Persistence

Medium
Category
Rogue Agent
Content
#!/usr/bin/env bash
# schedule-uninstall.sh — Create launchd/systemd one-shot to run uninstall after delay.
# Agent calls this; script returns immediately after scheduling.
# Usage: schedule-uninstall.sh [OPTIONS]
#   --notify-email EMAIL   Send email when done
Confidence
92% confidence
Finding
systemd one-shot to run uninstall

Session Persistence

Medium
Category
Rogue Agent
Content
case "$(uname -s)" in
  Darwin)
    if launchctl submit -l openclaw-uninstall -o "$LOG_FILE" -e "$LOG_FILE" -- \
      /bin/bash -c "$CMD" 2>/dev/null; then
      echo "macOS uninstall scheduled (launchctl), will run in ~${DELAY}s."
    else
Confidence
90% confidence
Finding
launchctl submit -l openclaw-uninstall

Session Persistence

Medium
Category
Rogue Agent
Content
<key>StandardErrorPath</key><string>$LOG_FILE</string>
</dict></plist>
PLISTEOF
      launchctl load "$PLIST" 2>/dev/null && echo "macOS uninstall scheduled (plist), will run in ~${DELAY}s." || {
        echo "Error: launchctl unavailable. Run manually: $UNINSTALL_SCRIPT"
        rm -f "$PLIST" "$WRAPPER"
        exit 1
Confidence
88% confidence
Finding
launchctl load "$PLIST" 2>/dev/null && echo "macOS uninstall

Session Persistence

Medium
Category
Rogue Agent
Content
#!/usr/bin/env bash
# schedule-uninstall.sh — Create launchd/systemd one-shot to run uninstall after delay.
# Agent calls this; script returns immediately after scheduling.
# Usage: schedule-uninstall.sh [OPTIONS]
#   --notify-email EMAIL   Send email when done
Confidence
92% confidence
Finding
Create launchd/systemd one-shot to run uninstall after delay. # Agent calls this; script returns immediately after scheduling. # Usage: schedule-uninstall.sh [OPTIONS] # --notify-email EMAIL Send

Session Persistence

Medium
Category
Rogue Agent
Content
/bin/bash -c "$CMD" &>/dev/null; then
      echo "Linux uninstall scheduled (systemd), will run in ~${DELAY}s."
    else
      # Fallback: nohup + disown (works when systemd-run unavailable, e.g. WSL2 without systemd)
      (nohup bash -c "$CMD" >> "$LOG_FILE" 2>&1 &)
      disown -a 2>/dev/null || true
      echo "Linux uninstall scheduled (nohup), will run in ~${DELAY}s."
Confidence
90% confidence
Finding
nohup

Session Persistence

Medium
Category
Rogue Agent
Content
/bin/bash -c "$CMD" &>/dev/null; then
      echo "Linux uninstall scheduled (systemd), will run in ~${DELAY}s."
    else
      # Fallback: nohup + disown (works when systemd-run unavailable, e.g. WSL2 without systemd)
      (nohup bash -c "$CMD" >> "$LOG_FILE" 2>&1 &)
      disown -a 2>/dev/null || true
      echo "Linux uninstall scheduled (nohup), will run in ~${DELAY}s."
Confidence
90% confidence
Finding
disown

Session Persistence

Medium
Category
Rogue Agent
Content
<key>StandardErrorPath</key><string>$LOG_FILE</string>
</dict></plist>
PLISTEOF
      launchctl load "$PLIST" 2>/dev/null && echo "macOS uninstall scheduled (plist), will run in ~${DELAY}s." || {
        echo "Error: launchctl unavailable. Run manually: $UNINSTALL_SCRIPT"
        rm -f "$PLIST" "$WRAPPER"
        exit 1
Confidence
88% confidence
Finding
launchctl load

Session Persistence

Medium
Category
Rogue Agent
Content
<key>StandardErrorPath</key><string>$LOG_FILE</string>
</dict></plist>
PLISTEOF
      launchctl load "$PLIST" 2>/dev/null && echo "macOS uninstall scheduled (plist), will run in ~${DELAY}s." || {
        echo "Error: launchctl unavailable. Run manually: $UNINSTALL_SCRIPT"
        rm -f "$PLIST" "$WRAPPER"
        exit 1
Confidence
88% confidence
Finding
PLIST

Session Persistence

Medium
Category
Rogue Agent
Content
<key>StandardErrorPath</key><string>$LOG_FILE</string>
</dict></plist>
PLISTEOF
      launchctl load "$PLIST" 2>/dev/null && echo "macOS uninstall scheduled (plist), will run in ~${DELAY}s." || {
        echo "Error: launchctl unavailable. Run manually: $UNINSTALL_SCRIPT"
        rm -f "$PLIST" "$WRAPPER"
        exit 1
Confidence
88% confidence
Finding
plist

Tool Parameter Abuse

High
Category
Tool Misuse
Content
1. Stop gateway: `openclaw gateway stop`
2. Uninstall service: `openclaw gateway uninstall`
3. Delete state: `rm -rf "${OPENCLAW_STATE_DIR:-$HOME/.openclaw}"`
4. Uninstall CLI: `npm rm -g openclaw` (or pnpm/bun)
5. macOS app: `rm -rf /Applications/OpenClaw.app`
Confidence
88% confidence
Finding
rm -rf "${OPENCLAW_STATE_DIR:-$HOME/.openclaw}"` 4. Uninstall CLI: `npm rm -g openclaw` (or pnpm/bun) 5. macOS app: `rm -rf /

VirusTotal

59/59 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

Detected: suspicious.destructive_delete_command

Documentation contains a destructive delete command without an explicit confirmation gate.

Warn
Code
suspicious.destructive_delete_command
Location
SKILL.md:109