T06 · System Persistence
- Location
scripts/install_daemon.sh:24- Finding
User-Level Persistent Scheduled Execution
- Content
View full analysis
"$PLIST" << EOF ... ProgramArguments $PYTHON $SKILL_DIR/scripts/daemon.py StartInterval 900 RunAtLoad ... EOF # Unload if already running launchctl unload "$PLIST" 2>/dev/null || true # Load launchctl load "$PLIST" ``` ```sh cat > "$SERVICE" << EOF [Unit] Description=OpenClaw Proactive Agent After=network.target [Service] Type=oneshot ExecStart=$PYTHON $SKILL_DIR/scripts/daemon.py StandardOutput=append:$SKILL_DIR/daemon.log StandardError=append:$SKILL_DIR/daemon.log Environment=HOME=$HOME EOF cat > "$TIMER" << EOF [Unit] Description=Run OpenClaw Proactive Agent every 15 minutes [Timer] OnBootSec=2min OnUnitActiveSec=15min Unit=openclaw-proactive-claw.service [Install] WantedBy=timers.target EOF systemctl --user daemon-reload systemctl --user enable --now openclaw-proactive-claw.timer ``` ### Technical Analysis The installer creates and immediately activates a persistent user-level launchd agent on macOS or a systemd user timer on Linux. The configured process runs after login or boot and every 15 minutes thereafter. Periodic background execution is consistent with the declared daemon functionality, and the persistence is disclosed to the user. Nevertheless, it crosses session boundaries and executes a Python file from a fixed, user-writable workspace path. The referenced `daemon.py` belongs to the separately installed core Skill and is absent from this artifact, so its behavior and integrity cannot be verified by this audit. No administrative or system-wide privilege escalation occurs: the generated service runs with the current user's privileges. However, any later malicious replacement of ...[truncated 961 chars]- Remediation
View remediation
