Back to skill

Security audit

Gateway Watchdog Lite

Security checks for vulnerabilities and agentic risk

Overview

This watchdog largely does what it says, but its installers can turn unvalidated setup values into persistent user-level shell or service execution risks.

Review or patch the installers before installing. At minimum, validate OC_PORT as a numeric port, restrict TELEGRAM_ID to the expected format, avoid unusual or attacker-controlled workspace paths and environment variables, move state/log files out of shared /tmp, and remove the Linux pkill fallback unless the target process can be identified exactly. Install only if you accept a persistent user-level watchdog that restarts the gateway automatically and sends Telegram alerts when configured.

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

T09 · Insecure Skill Coding Practices

Error
Location
scripts/install.sh:40
Finding
Persistent Shell Command Injection Through macOS Installer Parameters<![CDATA[ ## Vulnerability Details **File Location**: `scripts/install.sh`, lines 40-47 **Vulnerability Type**: Shell source-code injection through unsafe template substitution **Risk Level**: High ### Vulnerable Code ```bash # 1. Copy + patch watchdog script mkdir -p "$SCRIPTS_DIR" cp "$SKILL_DIR/scripts/gateway-watchdog.sh" "$WATCHDOG_SCRIPT" chmod +x "$WATCHDOG_SCRIPT" sed -i '' "s|PROBE_URL=\"http://127.0.0.1:YOUR_OC_PORT\"|PROBE_URL=\"http://127.0.0.1:${OC_PORT}\"|g" "$WATCHDOG_SCRIPT" sed -i '' "s|YOUR_TELEGRAM_ID|${TELEGRAM_ID}|g" "$WATCHDOG_SCRIPT" ``` ### Technical Analysis `OC_PORT` and `TELEGRAM_ID` are accepted from the installer environment without format validation or escaping and are substituted directly into an executable shell script. An attacker-controlled value containing a double quote followed by shell syntax can terminate the generated variable assignment and add commands to the installed watchdog. For example, a malicious Telegram identifier shaped like: ```text "; attacker_command; # ``` would cause the generated assignment to contain an additional shell command. Because the resulting script is registered with launchd, the injected command can execute repeatedly whenever the persistent watchdog runs. Shell quoting around the `sed` command does not make the generated shell source safe. It protects the installer command from immediate shell expansion, but it does not escape the value for its destination context as Bash source code. Replacement delimiters and `sed` metacharacters can also corrupt the substitution. ### Attack Path 1. An attacker convinces a user or automation workflow to run the installer with a malicious `OC_PORT` or `TELEGRAM_ID`. 2. The installer copies `gateway-watchdog.sh` into the workspace. 3. The unvalidated value is inserted into the copied executable script through `sed`. 4. The installer creates and bootstraps a launchd agent that periodically executes the modified script. 5. The injected command execute ...[truncated 604 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Require `OC_PORT` to contain only decimal digits, then enforce the valid TCP port range: ```bash if ! [[ "$OC_PORT" =~ ^[0-9]{1,5}$ ]] || (( OC_PORT < 1 || OC_PORT > 65535 )); then echo "ERROR: OC_PORT must be an integer from 1 to 65535." >&2 exit 1 fi ``` - Validate `TELEGRAM_ID` against the exact format supported by the Telegram integration, such as an optional signed numeric identifier if that is the required format. - Do not generate executable shell source by performing text replacement with untrusted values. - Prefer passing validated settings as launchd environment variables and reading them at runtime. - If source generation is unavoidable, serialize values with context-appropriate Bash escaping, such as `printf '%q'`, rather than using raw `sed` replacement. - Add installation tests using quotes, backslashes, delimiters, newlines, and shell metacharacters to verify that malformed input is rejected. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
scripts/install-linux.sh:32
Finding
Persistent Shell Command Injection Through Linux Installer Parameters<![CDATA[ ## Vulnerability Details **File Location**: `scripts/install-linux.sh`, lines 32-37 **Vulnerability Type**: Shell source-code injection through unsafe template substitution **Risk Level**: High ### Vulnerable Code ```bash SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" INSTALL_DIR="$WORKSPACE_PATH/.watchdog" mkdir -p "$INSTALL_DIR" cp "$SKILL_DIR/scripts/gateway-watchdog-linux.sh" "$INSTALL_DIR/gateway-watchdog.sh" chmod +x "$INSTALL_DIR/gateway-watchdog.sh" sed -i "s|PROBE_URL=\"http://127.0.0.1:YOUR_OC_PORT\"|PROBE_URL=\"http://127.0.0.1:${OC_PORT}\"|g" "$INSTALL_DIR/gateway-watchdog.sh" sed -i "s|YOUR_TELEGRAM_ID|${TELEGRAM_ID}|g" "$INSTALL_DIR/gateway-watchdog.sh" ``` ### Technical Analysis The Linux installer writes `OC_PORT` and `TELEGRAM_ID` directly into a shell script without validating or safely serializing either value. A value containing quotes and shell statements can escape the generated assignment and insert executable Bash code. The generated script is subsequently configured as a systemd user service with `Restart=always`. Consequently, injected code may run immediately when the service starts and again whenever systemd restarts it. This is a destination-context injection vulnerability: quoting the input while running `sed` does not ensure that the resulting text is safe Bash syntax. ### Attack Path 1. An attacker supplies or induces the use of a crafted `OC_PORT` or `TELEGRAM_ID`. 2. `install-linux.sh` substitutes the value into the copied watchdog script. 3. The crafted value breaks out of the generated Bash assignment and introduces an attacker-selected command. 4. The installer enables and starts `gateway-watchdog.service`. 5. The malicious command runs as the installing user and may run repeatedly because the service is persistent and configured to restart. ### Impact Assessment An attacker can obtain arbitrary command execution with the privileges of the user running the systemd service. The resulting acc ...[truncated 314 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Strictly validate and range-check `OC_PORT`. - Restrict `TELEGRAM_ID` to the minimum required character set and reject quotes, newlines, control characters, and shell metacharacters. - Avoid modifying executable shell source with `sed`. - Pass validated values through a protected configuration file or properly escaped systemd environment entries. - If Bash source must be generated, use a dedicated serializer such as `printf '%q'` and verify the generated script with `bash -n`. - Refuse installation when any supplied value does not match its documented data type. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/install.sh:55
Finding
LaunchAgent Definition Injection Through Unescaped XML Values<![CDATA[ ## Vulnerability Details **File Location**: `scripts/install.sh`, lines 55-87 **Vulnerability Type**: XML and launchd service-definition injection **Risk Level**: Medium ### Vulnerable Code ```bash cat > "$PLIST_PATH" <<PLIST <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>${LABEL}</string> <key>Comment</key> <string>OpenClaw Gateway Watchdog Lite — auto-recovers gateway if down</string> <key>RunAtLoad</key> <false/> <key>StartInterval</key> <integer>120</integer> <key>ProgramArguments</key> <array> <string>/bin/bash</string> <string>${WATCHDOG_SCRIPT}</string> </array> <key>StandardOutPath</key> <string>/tmp/openclaw/gateway-watchdog.log</string> <key>StandardErrorPath</key> <string>/tmp/openclaw/gateway-watchdog-err.log</string> <key>EnvironmentVariables</key> <dict> <key>HOME</key> <string>${HOME}</string> <key>PATH</key> <string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin</string> </dict> </dict> </plist> PLIST ``` ### Technical Analysis `WATCHDOG_SCRIPT` is derived from the externally supplied `WORKSPACE_PATH`, while `HOME` is inherited from the execution environment. Both are inserted into an XML property list without XML escaping or rejection of control characters. Characters such as `<`, `>`, and `&` can invalidate the plist. More deliberately crafted values can close the current XML element and introduce additional launchd keys or arguments. If launchd accepts the resulting property list, an attacker may alter the executable or arguments associated with the persistent agent. This problem is separate from ordinary shell quoting: the required encoding context is XML text content. ### Attack Path 1. A user or automation process runs the installer with a crafted `WORKSPACE_PATH` or ...[truncated 865 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Reject newlines, control characters, and unexpected path syntax in `WORKSPACE_PATH`. - Canonicalize the workspace with `realpath` or an equivalent macOS-compatible method and verify that it is an existing directory owned by the expected user. - XML-escape all dynamic text before placing it in the plist, including at least `&`, `<`, `>`, single quotes, and double quotes as appropriate. - Prefer generating the plist through a structured tool such as PlistBuddy, `plutil`, or a language library rather than an interpolated heredoc. - Run `plutil -lint "$PLIST_PATH"` before bootstrapping and abort if validation fails. - Use the account database rather than trusting an arbitrary inherited `HOME` value where practical. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/install-linux.sh:44
Finding
Systemd User Service Injection Through Raw Heredoc Interpolation<![CDATA[ ## Vulnerability Details **File Location**: `scripts/install-linux.sh`, lines 44-60 **Vulnerability Type**: Systemd unit-file injection **Risk Level**: Medium ### Vulnerable Code ```bash mkdir -p "$HOME/.config/systemd/user" SERVICE_FILE="$HOME/.config/systemd/user/gateway-watchdog.service" cat > "$SERVICE_FILE" <<EOF [Unit] Description=OpenClaw Gateway Watchdog Lite After=network.target [Service] Type=simple ExecStart=$INSTALL_DIR/gateway-watchdog.sh Restart=always RestartSec=10 Environment="HOME=$HOME" Environment="PATH=$PATH" Environment="XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR" [Install] WantedBy=default.target EOF ``` ### Technical Analysis `INSTALL_DIR` is derived from the externally supplied `WORKSPACE_PATH`. `HOME`, `PATH`, and `XDG_RUNTIME_DIR` are inherited or constructed from the environment. These values are inserted directly into systemd unit-file syntax. A path containing whitespace changes `ExecStart` argument parsing. More importantly, embedded newline characters can terminate a directive and add new unit directives. Quotes and systemd specifier or escape syntax may also alter parsing. The generated service is immediately reloaded, enabled, and started. Although exploitation requires influence over installer inputs or its environment, the script treats these values as trusted configuration without enforcing that assumption. ### Attack Path 1. An attacker controls or influences `WORKSPACE_PATH`, `HOME`, `PATH`, or `XDG_RUNTIME_DIR` used during installation. 2. A crafted value includes a newline or unit-file syntax. 3. The heredoc writes the injected syntax into `gateway-watchdog.service`. 4. `systemctl --user daemon-reload` parses the attacker-influenced unit. 5. The installer enables and starts the service, potentially executing an unintended command persistently as the user. ### Impact Assessment A successful injection can alter user-level service execution and provide persistent command execution under the victim account. It may ...[truncated 208 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Validate `WORKSPACE_PATH` as a canonical absolute path and reject newlines and control characters. - Avoid propagating the installer's complete `PATH`; configure a fixed minimal path required by the service. - Generate properly escaped systemd values with `systemd-escape` where applicable. - Quote executable paths according to systemd unit syntax and avoid paths containing unsupported or ambiguous characters. - Generate environment values in a mode-`0600` environment file with correct systemd escaping, or use fixed values when possible. - Validate the completed unit before enabling it: ```bash systemd-analyze --user verify "$SERVICE_FILE" ``` - Abort installation if verification reports parsing or directive errors. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/gateway-watchdog.sh:12
Finding
Predictable Shared Temporary Files Allow Symlink-Based File Modification<![CDATA[ ## Vulnerability Details **File Location**: `scripts/gateway-watchdog.sh`, lines 12-20 and 58-62; `scripts/gateway-watchdog-linux.sh`, lines 11-17 and 61-65 **Vulnerability Type**: Unsafe temporary directory and predictable state-file handling **Risk Level**: Medium ### Vulnerable Code macOS watchdog: ```bash LOGFILE="/tmp/openclaw/gateway-watchdog.log" PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist" PROBE_URL="http://127.0.0.1:YOUR_OC_PORT" TELEGRAM_ID="YOUR_TELEGRAM_ID" RECOVERY_COOLDOWN_FILE="/tmp/openclaw/watchdog-last-recovery" COOLDOWN_SECONDS=300 mkdir -p /tmp/openclaw log() { echo "[$(date -u '+%Y-%m-%dT%H:%M:%SZ')] $1" >> "$LOGFILE" } ``` ```bash log "Gateway probe failed (HTTP $HTTP_STATUS). Attempting recovery..." date +%s > "$RECOVERY_COOLDOWN_FILE" ``` The Linux watchdog uses the same paths and write pattern: ```bash LOGFILE="/tmp/openclaw/gateway-watchdog.log" PROBE_URL="http://127.0.0.1:YOUR_OC_PORT" TELEGRAM_ID="YOUR_TELEGRAM_ID" RECOVERY_COOLDOWN_FILE="/tmp/openclaw/watchdog-last-recovery" COOLDOWN_SECONDS=300 mkdir -p /tmp/openclaw ``` ```bash log "Gateway probe failed (HTTP $HTTP_STATUS). Attempting recovery..." date +%s > "$RECOVERY_COOLDOWN_FILE" ``` ### Technical Analysis Both implementations use a globally predictable directory under `/tmp` without checking its owner, permissions, or file types. `mkdir -p` succeeds when the directory already exists and does not establish that it belongs to the current user. A local attacker can create `/tmp/openclaw` before the victim starts the watchdog and place symbolic links at `gateway-watchdog.log` or `watchdog-last-recovery`. Shell output redirection follows symbolic links. Consequently, watchdog log appends or cooldown writes can modify another file that is writable by the victim. An attacker can also populate the cooldown file with manipulated data. Non-numeric data may disrupt arithmetic processing, while future timestamps can suppress recovery attempts fo ...[truncated 1036 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Store runtime state in a per-user private directory, such as `${XDG_RUNTIME_DIR}/openclaw` on Linux and an owner-only directory under the user's home or platform cache directory on macOS. - Create the directory with restrictive permissions: ```bash umask 077 mkdir -p -- "$STATE_DIR" chmod 700 -- "$STATE_DIR" ``` - Verify with `lstat` that the directory and files are owned by the current user and are not symbolic links. - Create state files atomically and refuse to replace unexpected file types. - Validate cooldown contents against `^[0-9]+$` before arithmetic evaluation. - Keep logs in a service-managed, user-private location or use the system journal rather than a shared `/tmp` path. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/gateway-watchdog-linux.sh:68
Finding
Broad Process-Matching Fallback Can Terminate Unrelated User Processes<![CDATA[ ## Vulnerability Details **File Location**: `scripts/gateway-watchdog-linux.sh`, lines 68-75 **Vulnerability Type**: Overbroad process termination **Risk Level**: Medium ### Vulnerable Code ```bash # Try openclaw-gateway systemd service first, otherwise pkill fallback if systemctl --user is-active --quiet openclaw-gateway 2>/dev/null; then systemctl --user restart openclaw-gateway 2>/dev/null else pkill -f "openclaw.*gateway" 2>/dev/null || true sleep 3 log "WARNING: openclaw-gateway service not found — manual restart may be required" fi ``` ### Technical Analysis When `openclaw-gateway` is not active, the watchdog calls `pkill -f` with a regular expression that is matched against complete process command lines. The expression is not tied to a verified PID, cgroup, executable path, or exact service identity. Any same-user process whose command line contains `openclaw`, followed later by `gateway`, may be killed even if it is unrelated to the monitored gateway. The fallback also only terminates matching processes; it does not perform the documented full restart. A local same-user process can intentionally choose a matching command line, while ordinary tools, scripts, or maintenance operations may match accidentally. ### Attack Path 1. The health probe fails or returns an unaccepted HTTP status. 2. The expected `openclaw-gateway` user service is inactive or unavailable. 3. The watchdog enters the fallback branch. 4. `pkill -f "openclaw.*gateway"` searches all processes accessible to the user by full command line. 5. Every matching process is sent the default termination signal, including unrelated processes. 6. Repeated health failures can cause repeated termination attempts after the cooldown. ### Impact Assessment The watchdog can terminate unintended processes owned by the same user, causing denial of service, interrupted jobs, data loss in applications that do not handle termination safely, or disruption of OpenClaw-related ...[truncated 221 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Remove the `pkill -f` fallback unless the target process can be identified reliably. - Manage the gateway exclusively through its known systemd user service when available. - If a non-systemd fallback is necessary, use a securely maintained PID file and verify: - the PID is numeric; - the process belongs to the expected user; - `/proc/<pid>/exe` resolves to the expected executable; - the process start time matches the recorded instance. - Prefer systemd cgroup-based termination over command-line pattern matching. - If target identity cannot be established, log the condition and alert the user without terminating processes. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (44)

Tool Parameter Abuse

High
Category
Tool Misuse
Content
**macOS:**
```bash
launchctl bootout gui/$UID/ai.openclaw.gateway-watchdog
rm ~/Library/LaunchAgents/ai.openclaw.gateway-watchdog.plist
```

**Linux:**
Confidence
85% confidence
Finding
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).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
**macOS:**
```bash
launchctl bootout gui/$UID/ai.openclaw.gateway-watchdog
rm ~/Library/LaunchAgents/ai.openclaw.gateway-watchdog.plist
```

**Linux:**
Confidence
85% confidence
Finding
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).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
```bash
systemctl --user stop gateway-watchdog
systemctl --user disable gateway-watchdog
rm ~/.config/systemd/user/gateway-watchdog.service
systemctl --user daemon-reload
```
Confidence
85% confidence
Finding
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).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
```bash
systemctl --user stop gateway-watchdog
systemctl --user disable gateway-watchdog
rm ~/.config/systemd/user/gateway-watchdog.service
systemctl --user daemon-reload
```
Confidence
85% confidence
Finding
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).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
- **GGML Metal crash** on restart — add `GGML_NO_METAL=1` to env vars
- **`openclaw gateway install --force`** — use after config changes
- **Bootout + bootstrap sequence** — the correct recovery pattern
- **Cooldown logic** — 5 min between attempts, reset with `rm /tmp/openclaw/watchdog-last-recovery`
- **Telegram alert failures** — won't block recovery (uses `|| true`)
Confidence
85% confidence
Finding
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).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
**To reset the cooldown manually** (e.g. you want the watchdog to retry immediately):
```bash
rm -f /tmp/openclaw/watchdog-last-recovery
```

---
Confidence
85% confidence
Finding
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).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
**To reset the cooldown manually** (e.g. you want the watchdog to retry immediately):
```bash
rm -f /tmp/openclaw/watchdog-last-recovery
```

---
Confidence
85% confidence
Finding
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).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
**To reset the cooldown manually** (e.g. you want the watchdog to retry immediately):
```bash
rm -f /tmp/openclaw/watchdog-last-recovery
```

---
Confidence
85% confidence
Finding
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).

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The README explicitly promotes installing a persistent background watchdog that performs autonomous health checks, restarts services, and writes logs, but it does not prominently disclose the persistence and system-modifying behavior as a security-sensitive action. In an agent-skill ecosystem, under-warning users about resident services and automatic recovery logic increases the chance of users installing software that changes system behavior without fully informed consent.

Session Persistence

Medium
Category
Rogue Agent
Content
**macOS:**
```bash
launchctl bootout gui/$UID/ai.openclaw.gateway-watchdog
rm ~/Library/LaunchAgents/ai.openclaw.gateway-watchdog.plist
```

**Linux:**
Confidence
75% confidence
Finding
The README references a LaunchAgent plist under the user's LaunchAgents directory, which indicates persistent execution across sessions. Persistence itself is not inherently malicious, but in a skill context it is security-relevant behavior that should be clearly disclosed and bounded because it establishes automatic execution on login.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
## Overview

The gateway-watchdog-lite skill installs a **macOS LaunchAgent** or **Linux systemd user service** that monitors the OpenClaw gateway every **2 minutes**. If the gateway is unresponsive, it automatically runs the recovery sequence and alerts via Telegram.

**Supported platforms:**
- macOS (LaunchAgent) — `scripts/install.sh`
Confidence
80% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Session Persistence

Medium
Category
Rogue Agent
Content
**Supported platforms:**
- macOS (LaunchAgent) — `scripts/install.sh`
- Linux (systemd user service) — `scripts/install-linux.sh`

## What It Does
Confidence
80% confidence
Finding
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.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
This markdown file includes `launchctl bootout` and `bootstrap` commands that remove and re-register a user service, which can interrupt the running gateway and affect local service state. The section presents the commands as a recovery sequence but does not explicitly warn users that executing them will stop and reinitialize the service.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The script can send gateway outage and recovery status to an external Telegram recipient via the `gog telegram send` command, but the disclosure is only implied by an inline variable comment and not presented as a clear consent or warning mechanism. In operational environments, these alerts leak service-health metadata off-host to a third party, which can expose monitoring details, uptime patterns, and internal tool usage without explicit user awareness.

Session Persistence

Medium
Category
Rogue Agent
Content
# Full version with crash loop detection: https://confuseduser.com

LOGFILE="/tmp/openclaw/gateway-watchdog.log"
PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
PROBE_URL="http://127.0.0.1:YOUR_OC_PORT"
TELEGRAM_ID="YOUR_TELEGRAM_ID"          # Set to "" to disable Telegram alerts
RECOVERY_COOLDOWN_FILE="/tmp/openclaw/watchdog-last-recovery"
Confidence
75% confidence
Finding
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.

Session Persistence

Medium
Category
Rogue Agent
Content
# Full version with crash loop detection: https://confuseduser.com

LOGFILE="/tmp/openclaw/gateway-watchdog.log"
PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
PROBE_URL="http://127.0.0.1:YOUR_OC_PORT"
TELEGRAM_ID="YOUR_TELEGRAM_ID"          # Set to "" to disable Telegram alerts
RECOVERY_COOLDOWN_FILE="/tmp/openclaw/watchdog-last-recovery"
Confidence
75% confidence
Finding
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.

Session Persistence

Medium
Category
Rogue Agent
Content
# Full version with crash loop detection: https://confuseduser.com

LOGFILE="/tmp/openclaw/gateway-watchdog.log"
PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
PROBE_URL="http://127.0.0.1:YOUR_OC_PORT"
TELEGRAM_ID="YOUR_TELEGRAM_ID"          # Set to "" to disable Telegram alerts
RECOVERY_COOLDOWN_FILE="/tmp/openclaw/watchdog-last-recovery"
Confidence
75% confidence
Finding
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.

Session Persistence

Medium
Category
Rogue Agent
Content
# Full version with crash loop detection: https://confuseduser.com

LOGFILE="/tmp/openclaw/gateway-watchdog.log"
PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
PROBE_URL="http://127.0.0.1:YOUR_OC_PORT"
TELEGRAM_ID="YOUR_TELEGRAM_ID"          # Set to "" to disable Telegram alerts
RECOVERY_COOLDOWN_FILE="/tmp/openclaw/watchdog-last-recovery"
Confidence
75% confidence
Finding
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.

Session Persistence

Medium
Category
Rogue Agent
Content
# Full version with crash loop detection: https://confuseduser.com

LOGFILE="/tmp/openclaw/gateway-watchdog.log"
PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
PROBE_URL="http://127.0.0.1:YOUR_OC_PORT"
TELEGRAM_ID="YOUR_TELEGRAM_ID"          # Set to "" to disable Telegram alerts
RECOVERY_COOLDOWN_FILE="/tmp/openclaw/watchdog-last-recovery"
Confidence
75% confidence
Finding
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.

Session Persistence

Medium
Category
Rogue Agent
Content
# Full version with crash loop detection: https://confuseduser.com

LOGFILE="/tmp/openclaw/gateway-watchdog.log"
PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
PROBE_URL="http://127.0.0.1:YOUR_OC_PORT"
TELEGRAM_ID="YOUR_TELEGRAM_ID"          # Set to "" to disable Telegram alerts
RECOVERY_COOLDOWN_FILE="/tmp/openclaw/watchdog-last-recovery"
Confidence
75% confidence
Finding
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.

Session Persistence

Medium
Category
Rogue Agent
Content
# Full version with crash loop detection: https://confuseduser.com

LOGFILE="/tmp/openclaw/gateway-watchdog.log"
PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
PROBE_URL="http://127.0.0.1:YOUR_OC_PORT"
TELEGRAM_ID="YOUR_TELEGRAM_ID"          # Set to "" to disable Telegram alerts
RECOVERY_COOLDOWN_FILE="/tmp/openclaw/watchdog-last-recovery"
Confidence
75% confidence
Finding
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.

Session Persistence

Medium
Category
Rogue Agent
Content
# Full version with crash loop detection: https://confuseduser.com

LOGFILE="/tmp/openclaw/gateway-watchdog.log"
PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
PROBE_URL="http://127.0.0.1:YOUR_OC_PORT"
TELEGRAM_ID="YOUR_TELEGRAM_ID"          # Set to "" to disable Telegram alerts
RECOVERY_COOLDOWN_FILE="/tmp/openclaw/watchdog-last-recovery"
Confidence
75% confidence
Finding
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.

Session Persistence

Medium
Category
Rogue Agent
Content
# Full version with crash loop detection: https://confuseduser.com

LOGFILE="/tmp/openclaw/gateway-watchdog.log"
PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
PROBE_URL="http://127.0.0.1:YOUR_OC_PORT"
TELEGRAM_ID="YOUR_TELEGRAM_ID"          # Set to "" to disable Telegram alerts
RECOVERY_COOLDOWN_FILE="/tmp/openclaw/watchdog-last-recovery"
Confidence
75% confidence
Finding
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.

Session Persistence

Medium
Category
Rogue Agent
Content
# Full version with crash loop detection: https://confuseduser.com

LOGFILE="/tmp/openclaw/gateway-watchdog.log"
PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
PROBE_URL="http://127.0.0.1:YOUR_OC_PORT"
TELEGRAM_ID="YOUR_TELEGRAM_ID"          # Set to "" to disable Telegram alerts
RECOVERY_COOLDOWN_FILE="/tmp/openclaw/watchdog-last-recovery"
Confidence
75% confidence
Finding
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.

Session Persistence

Medium
Category
Rogue Agent
Content
# Full version with crash loop detection: https://confuseduser.com

LOGFILE="/tmp/openclaw/gateway-watchdog.log"
PLIST="$HOME/Library/LaunchAgents/ai.openclaw.gateway.plist"
PROBE_URL="http://127.0.0.1:YOUR_OC_PORT"
TELEGRAM_ID="YOUR_TELEGRAM_ID"          # Set to "" to disable Telegram alerts
RECOVERY_COOLDOWN_FILE="/tmp/openclaw/watchdog-last-recovery"
Confidence
75% confidence
Finding
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.

Static analysis

No suspicious patterns detected.