T03 · Remote Payload Retrieval and Execution
- Location
README.md:47- Finding
Remote Installer Is Executed Directly from a Mutable Branch
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a plausible watchdog, but its installer can fetch changing remote code and install it as a persistent background service.
Review this carefully before installing. Prefer a pinned, reviewed local checkout, remove or disable the install.sh remote download path, and avoid the README curl-to-bash command. Install only if you are comfortable with a user-level background LaunchAgent that can restart OpenClaw, send optional Discord messages through your configured OpenClaw CLI, and terminate matching gateway processes.
README.md:47Remote Installer Is Executed Directly from a Mutable Branch
install.sh:49Unverified Remote Payload Is Installed as a Persistent Launchd Service
defibrillator.sh:11Predictable Shared Temporary Files Permit Symlink-Based File Overwrite
defibrillator.sh:151Broad Process Matching Can Forcibly Terminate Unrelated Processes
Piping the output of curl directly into bash is a classic dangerous command chain because it couples network retrieval with immediate execution, eliminating review and making tampering consequences immediate. In a skill for AI agents, this pattern is especially risky because autonomous tooling may run it verbatim, causing unattended code execution and persistence installation.
curl -fsSL https://raw.githubusercontent.com/hazy2go/agent-defibrillator/main/install.sh | bash
The declared description says the skill is a watchdog with optional Discord notifications, but the referenced behavior includes additional undeclared actions: checking a localhost health endpoint, inspecting local session file metadata, and performing version-mismatch restart logic. Hidden or under-disclosed behavior is dangerous because it expands the skill's access to local services and files beyond what a user would reasonably expect, weakening informed consent and review.
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
launchctl bootout gui/$(id -u)/com.openclaw.defibrillator
rm ~/Library/LaunchAgents/com.openclaw.defibrillator.plist
rm ~/.openclaw/scripts/defibrillator.sh
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
launchctl bootout gui/$(id -u)/com.openclaw.defibrillator
rm ~/Library/LaunchAgents/com.openclaw.defibrillator.plist
rm ~/.openclaw/scripts/defibrillator.sh
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
launchctl bootout gui/$(id -u)/com.openclaw.defibrillator
rm ~/Library/LaunchAgents/com.openclaw.defibrillator.plist
rm ~/.openclaw/scripts/defibrillator.sh
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
launchctl bootout gui/$(id -u)/com.openclaw.defibrillator
rm ~/Library/LaunchAgents/com.openclaw.defibrillator.plist
rm ~/.openclaw/scripts/defibrillator.sh
The README recommends executing a remotely fetched script directly with curl ... | bash, which removes the user's opportunity to inspect the code and creates a single-step path to arbitrary code execution if the upstream source, network path, or repository is compromised. In an agent-focused skill, this is more dangerous because users may paste it into an autonomous agent that will perform system-level actions without human review.
The agent-directed prompt tells an AI agent to clone a repository and run install.sh, then verify a launchd service, without warning that this performs persistent system changes and executes untrusted code. Because this skill is specifically designed for agent use, the prompt lowers friction for autonomous execution and increases the chance of unattended installation of persistence-capable code.
The skill documents shell-based installation, service management, log inspection, and file deletion actions but does not declare any tool scope such as permissions or allowed-tools. This creates an execution-transparency gap: an agent or reviewer cannot easily determine the skill's operational boundaries, increasing the risk of unintended shell execution on the host.
The trigger phrases include broad activators such as 'gateway monitor,' 'auto-restart agent,' and 'keep agent alive,' which can overlap with normal troubleshooting or conversational requests. Ambiguous triggers increase the chance that the skill activates unexpectedly and leads an agent toward executing shell-based installation or persistence-related actions without sufficiently explicit user intent.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
VERSION_RESTART_FILE="/tmp/openclaw-gateway-last-version-restart"
# Gateway config
GATEWAY_PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
GATEWAY_LABEL="ai.openclaw.gateway"
# Notification config
No suspicious patterns detected.