T06 · System Persistence
Error
- Location
- SKILL.md:20
- Finding
- Recurring unattended update jobs establish cross-session persistence<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:20-27`, `SKILL.md:32-39`, `SKILL.md:46-53`, `SKILL.md:58-65`, and `references/agent-guide.md:78-85` **Vulnerability Type**: Scheduled-task persistence **Risk Level**: Critical ### Vulnerable Code ```bash openclaw cron add \ --name "OpenClaw Auto-Update" \ --cron "30 3 * * *" \ --tz "Europe/Berlin" \ --session isolated \ --wake now \ --deliver \ --message "Run daily auto-updates: 1) openclaw update --yes --json 2) clawdhub update --all 3) report versions updated + errors." ``` The implementation guide provides another persistent configuration: ```bash openclaw cron add \ --name "Daily Auto-Update" \ --cron "0 4 * * *" \ --tz "America/Los_Angeles" \ --session isolated \ --wake now \ --deliver \ --message "Run the daily auto-update routine: 1. Check and update OpenClaw (npm/pnpm/bun/global or source). 2. Run openclaw doctor --yes. 3. Update all skills: clawdhub update --all. 4. Report version before/after, updated skills, and any errors." ``` Weekly, dry-run, and core-only variations at the other cited locations use the same persistent scheduling mechanism. ### Technical Analysis The instructions register recurring jobs in OpenClaw's scheduler. These jobs survive the interaction that created them, wake automatically, and start isolated agent sessions without case-by-case authorization. The standard jobs then execute commands that modify OpenClaw and installed Skills. Although scheduled maintenance is the stated purpose of the project, this still creates a persistent autonomous execution mechanism. The use of `--wake now`, unattended `--yes` behavior, and recurring bulk updates increases the consequences of an upstream compromise or an unintended change to the scheduled message. Even the dry-run variation establishes a persistent task, although that variation is not intended to modify packages. ### Attack Path 1. A user or agent follows the documented setup procedu ...[truncated 1150 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Do not create recurring jobs by default. Offer a one-shot update check as the safe default. 2. Obtain explicit, informed approval immediately before creating any scheduled task. 3. Display the exact schedule, commands, execution identity, update scope, and removal procedure before installation. 4. Separate update discovery from installation: - Schedule read-only update checks. - Present available versions and release information. - Require approval before applying changes. 5. Avoid unattended `--yes`, `--wake now`, and `update --all` behavior. 6. Restrict scheduled tasks to an allowlist of approved components and exact versions. 7. Run the task under a dedicated least-privileged account with narrowly scoped filesystem and network access. 8. Provide and verify disable/removal commands as part of setup. 9. Record scheduler configuration changes in an auditable log and notify the user whenever a persistent task is created or modified. ]]>
