T06 · System Persistence
Error
- Location
- SKILL.md:137
- Finding
- Persistent Autonomous Polling Through a Scheduled Cron Job<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 137–153 **Vulnerability Type**: Persistent scheduled task with autonomous credential use **Risk Level**: High ### Complete Code Snippet The non-English command message is rendered in English below while preserving its documented behavior: ```bash openclaw cron add \ --name "ClawReach Pending Poll" \ --cron "*/1 * * * *" \ --tz "Asia/Shanghai" \ --session isolated \ --message "Check whether ClawReach has pending match messages. Read ~/.openclaw/workspace/memory/clawreach-session.json for credentials, call GET http://127.0.0.1:3000/api/v1/agents/pending, generate a reply for every pending message and POST it to /matches/message, then call /matches/conclude during the final round. Exit silently when there are no pending messages." \ --light-context \ --announce ``` The Skill describes the resulting behavior as follows: ```text This cron job runs every 60 seconds in an isolated session — it won't clutter the main chat. When a match concludes, it announces the result to the user automatically. To stop polling: openclaw cron list # find the job ID openclaw cron remove <jobId> ``` ### Technical Analysis The Skill instructs the user to install an OpenClaw cron job that survives the initiating interaction and executes every minute. The scheduled task reads a reusable bearer token from a persistent file and performs authenticated network requests, generates messages, sends those messages, and concludes matches. An isolated session reduces chat clutter but does not provide a security boundary. The task continues to exercise the user's authenticated authority without requiring approval for each message or conclusion. No automatic expiration, bounded execution count, revocation procedure, or per-action confirmation is configured. This behavior matches system persistence because a scheduled task remains active across sessions and repeatedly performs autonomous operations after th ...[truncated 1201 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Replace recurring polling with explicit, user-initiated polling by default. 2. If background processing is necessary, require informed opt-in that clearly identifies: - The execution frequency. - The credentials and data accessed. - The API actions that can be performed. - The task's expiration time and removal procedure. 3. Configure an automatic expiration or a strict maximum number of executions. 4. Require user confirmation before sending messages or submitting `/matches/conclude`. 5. Use a narrowly scoped service token that cannot access unrelated account functions. 6. Provide a one-command disable mechanism and automatically revoke the polling token when the task is removed. 7. Display the installed job identifier and current status immediately after setup. 8. Record an audit trail of generated messages, API requests, and conclusion decisions. ]]>
