T03 · Remote Payload Retrieval and Execution
- Location
README.md:34- Finding
Mutable Remote JavaScript Is Downloaded and Executed Without Integrity Verification
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill clearly describes a backup tool, but its install and scheduler code contain review-worthy risks that could execute changing remote code or unintended commands under the user account.
Do not use the curl-to-node quick install. Clone and pin the repository first, inspect setup.js and install-launchagent.sh, prefer local-only or encrypted rclone backups, and avoid enabling the scheduler until the Bash escaping issue is fixed. On macOS, do not approve sudo removal of a system LaunchDaemon unless you intentionally want that exact service removed.
README.md:34Mutable Remote JavaScript Is Downloaded and Executed Without Integrity Verification
setup.js:40Insufficient Shell Escaping Permits Command Injection in Generated Backup Script
install-launchagent.sh:82LaunchAgent Installer Performs Unnecessary Privileged Removal of a System LaunchDaemon
Piping curl output directly into node creates an execution chain with no inspection boundary, making accidental or malicious changes in the fetched script execute immediately. In a backup tool that may access sensitive local files and install scheduled jobs, this materially increases the blast radius of any supply-chain compromise.
This downloads and executes setup immediately. Use only if you trust the source:
curl -fsSL https://raw.githubusercontent.com/vidarbrekke/ClawBackup/main/setup.js | node
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
## Before you install
- **Do not** run `curl ... | node` (or any one-liner) without first inspecting the script. Prefer **git clone** and open `setup.js` and `install-launchagent.sh` (or the cron/Task Scheduler scripts) to review what they will do.
- **Verify the code** in `setup.js` and the scheduler installer: confirm only the expected paths are archived and that there is no unexpected network use or commands. If you are uncomfortable reviewing the scripts, do not install.
- **Confirm repository identity**: official source is [github.com/vidarbrekke/ClawBackup](https://github.com/vidarbrekke/ClawBackup). The version in this SKILL.md (frontmatter and "Version" line) is the source of truth; the registry may show a different revision number.
- **Use encryption** for sensitive backups: an encrypted rclone remote (e.g. `rclone crypt`) or encrypt archives yourself before offsite storage.
Piping network-fetched content directly into node is a classic dangerous command chain because it eliminates the review boundary between download and execution. In a skill that installs backup automation and scheduler entries, successful abuse could yield persistent execution and access to sensitive backup data or cloud sync configuration.
curl -fsSL https://raw.githubusercontent.com/vidarbrekke/ClawBackup/main/setup.js | node
node setup.js --defaults for default paths). Then run the printed test command and install the scheduler as shown.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).
rsync -a --exclude='node_modules' --exclude='test-results' --exclude='.last-run.json' "$CURSORAPPS_CLAWD/" "$CLAWD_STAGE/"
else
cp -R "$CURSORAPPS_CLAWD"/* "$CLAWD_STAGE/" 2>/dev/null || true
rm -rf "$CLAWD_STAGE/node_modules" "$CLAWD_STAGE/test-results" 2>/dev/null
fi
log_message "Staged Dev/CursorApps/clawd."
fi
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.
rclone config
Create a remote (e.g. googleDrive) and complete the OAuth flow.
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.
## Disable / uninstall scheduler
- **macOS:** `launchctl unload ~/Library/LaunchAgents/com.openclaw.backup.plist`
- **Linux:** remove the backup line from `crontab -e`
- **Windows:** remove/disable the Task Scheduler task you created
## Restore notes (skills and user data)
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.
## Disable / uninstall scheduler
- **macOS:** `launchctl unload ~/Library/LaunchAgents/com.openclaw.backup.plist`
- **Linux:** remove the backup line from `crontab -e`
- **Windows:** remove/disable the Task Scheduler task you created
## Restore notes (skills and user data)
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.
## Disable / uninstall scheduler
- **macOS:** `launchctl unload ~/Library/LaunchAgents/com.openclaw.backup.plist`
- **Linux:** remove the backup line from `crontab -e`
- **Windows:** remove/disable the Task Scheduler task you created
## Restore notes (skills and user data)
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.
## Schedule (optional)
- **macOS:** The setup generates a LaunchAgent plist. Install with the printed commands (copy to `~/Library/LaunchAgents/` and `launchctl load` — no sudo for the agent). Or run the universal installer: `./install-launchagent.sh` (it searches common locations; if your project is elsewhere, pass the plist path: `./install-launchagent.sh /path/to/com.openclaw.backup.plist`). If you had an old system-wide daemon, the installer may ask for your password once to remove it. Backup runs at the hour/minute configured during setup.
- **Linux:** Add the printed cron line to `crontab -e`.
- **Windows:** Use Task Scheduler to run the backup script daily via Git Bash or WSL.
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.
## Schedule (optional)
- **macOS:** The setup generates a LaunchAgent plist. Install with the printed commands (copy to `~/Library/LaunchAgents/` and `launchctl load` — no sudo for the agent). Or run the universal installer: `./install-launchagent.sh` (it searches common locations; if your project is elsewhere, pass the plist path: `./install-launchagent.sh /path/to/com.openclaw.backup.plist`). If you had an old system-wide daemon, the installer may ask for your password once to remove it. Backup runs at the hour/minute configured during setup.
- **Linux:** Add the printed cron line to `crontab -e`.
- **Windows:** Use Task Scheduler to run the backup script daily via Git Bash or WSL.
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.
## Schedule (optional)
- **macOS:** The setup generates a LaunchAgent plist. Install with the printed commands (copy to `~/Library/LaunchAgents/` and `launchctl load` — no sudo for the agent). Or run the universal installer: `./install-launchagent.sh` (it searches common locations; if your project is elsewhere, pass the plist path: `./install-launchagent.sh /path/to/com.openclaw.backup.plist`). If you had an old system-wide daemon, the installer may ask for your password once to remove it. Backup runs at the hour/minute configured during setup.
- **Linux:** Add the printed cron line to `crontab -e`.
- **Windows:** Use Task Scheduler to run the backup script daily via Git Bash or WSL.
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.
## Schedule (optional)
- **macOS:** The setup generates a LaunchAgent plist. Install with the printed commands (copy to `~/Library/LaunchAgents/` and `launchctl load` — no sudo for the agent). Or run the universal installer: `./install-launchagent.sh` (it searches common locations; if your project is elsewhere, pass the plist path: `./install-launchagent.sh /path/to/com.openclaw.backup.plist`). If you had an old system-wide daemon, the installer may ask for your password once to remove it. Backup runs at the hour/minute configured during setup.
- **Linux:** Add the printed cron line to `crontab -e`.
- **Windows:** Use Task Scheduler to run the backup script daily via Git Bash or WSL.
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.
#!/usr/bin/env bash
# Universal installer: probe for com.openclaw.backup.plist and existing
# LaunchDaemon/LaunchAgent, then install or update the user LaunchAgent.
# Usage: ./install-launchagent.sh [path-to-plist]
# ./install-launchagent.sh (auto-detect plist and state)
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.
#!/usr/bin/env bash
# Universal installer: probe for com.openclaw.backup.plist and existing
# LaunchDaemon/LaunchAgent, then install or update the user LaunchAgent.
# Usage: ./install-launchagent.sh [path-to-plist]
# ./install-launchagent.sh (auto-detect plist and state)
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.
#!/usr/bin/env bash
# Universal installer: probe for com.openclaw.backup.plist and existing
# LaunchDaemon/LaunchAgent, then install or update the user LaunchAgent.
# Usage: ./install-launchagent.sh [path-to-plist]
# ./install-launchagent.sh (auto-detect plist and state)
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.
#!/usr/bin/env bash
# Universal installer: probe for com.openclaw.backup.plist and existing
# LaunchDaemon/LaunchAgent, then install or update the user LaunchAgent.
# Usage: ./install-launchagent.sh [path-to-plist]
# ./install-launchagent.sh (auto-detect plist and state)
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.
#!/usr/bin/env bash
# Universal installer: probe for com.openclaw.backup.plist and existing
# LaunchDaemon/LaunchAgent, then install or update the user LaunchAgent.
# Usage: ./install-launchagent.sh [path-to-plist]
# ./install-launchagent.sh (auto-detect plist and state)
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.
#!/usr/bin/env bash
# Universal installer: probe for com.openclaw.backup.plist and existing
# LaunchDaemon/LaunchAgent, then install or update the user LaunchAgent.
# Usage: ./install-launchagent.sh [path-to-plist]
# ./install-launchagent.sh (auto-detect plist and state)
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.
#!/usr/bin/env bash
# Universal installer: probe for com.openclaw.backup.plist and existing
# LaunchDaemon/LaunchAgent, then install or update the user LaunchAgent.
# Usage: ./install-launchagent.sh [path-to-plist]
# ./install-launchagent.sh (auto-detect plist and state)
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.
#!/usr/bin/env bash
# Universal installer: probe for com.openclaw.backup.plist and existing
# LaunchDaemon/LaunchAgent, then install or update the user LaunchAgent.
# Usage: ./install-launchagent.sh [path-to-plist]
# ./install-launchagent.sh (auto-detect plist and state)
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.
#!/usr/bin/env bash
# Universal installer: probe for com.openclaw.backup.plist and existing
# LaunchDaemon/LaunchAgent, then install or update the user LaunchAgent.
# Usage: ./install-launchagent.sh [path-to-plist]
# ./install-launchagent.sh (auto-detect plist and state)
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.
#!/usr/bin/env bash
# Universal installer: probe for com.openclaw.backup.plist and existing
# LaunchDaemon/LaunchAgent, then install or update the user LaunchAgent.
# Usage: ./install-launchagent.sh [path-to-plist]
# ./install-launchagent.sh (auto-detect plist and state)
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.
#!/usr/bin/env bash
# Universal installer: probe for com.openclaw.backup.plist and existing
# LaunchDaemon/LaunchAgent, then install or update the user LaunchAgent.
# Usage: ./install-launchagent.sh [path-to-plist]
# ./install-launchagent.sh (auto-detect plist and state)
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.
#!/usr/bin/env bash
# Universal installer: probe for com.openclaw.backup.plist and existing
# LaunchDaemon/LaunchAgent, then install or update the user LaunchAgent.
# Usage: ./install-launchagent.sh [path-to-plist]
# ./install-launchagent.sh (auto-detect plist and state)
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.
#!/usr/bin/env bash
# Universal installer: probe for com.openclaw.backup.plist and existing
# LaunchDaemon/LaunchAgent, then install or update the user LaunchAgent.
# Usage: ./install-launchagent.sh [path-to-plist]
# ./install-launchagent.sh (auto-detect plist and state)
No suspicious patterns detected.