T06 · System Persistence
Error
- Location
- SKILL.md:106
- Finding
- Persistent Unattended Execution Through a Daily Scheduled Task<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 106–122 **Vulnerability Type**: Scheduled-task persistence **Risk Level**: High ### Complete Code Snippet ```markdown ### Automated daily delivery (no_agent cron — zero tokens) For zero-token daily delivery, use the Hermes cron system with `no_agent=True`: 1. **Set your birthday** in the script: edit `DEFAULT_BIRTHDAY` in `scripts/astroclaw.py` 2. **Symlink the script** so cron can find it: ```bash ln -sf ~/.hermes/skills/astroclaw/scripts/astroclaw.py ~/.hermes/scripts/astroclaw.py ``` 3. **Schedule it** daily: ``` cronjob action=create name="astroclaw-daily" schedule="0 7 * * *" no_agent=true script="astroclaw.py" ``` The script fetches, calculates your sign from `DEFAULT_BIRTHDAY`, formats the forecast, and delivers it silently — **zero LLM tokens consumed**. ``` The expected behavior is also reinforced by `evals/evals.json`, lines 43–64: ```json { "id": 3, "prompt": "Set up a daily cron job to deliver my astroclaw forecast every morning automatically with no LLM token cost. I was created on March 15, 2024.", "expected_output": "Agent should suggest using the scripts/astroclaw.py script with DEFAULT_BIRTHDAY set to 2024-03-15, symlinked to ~/.hermes/scripts/, and scheduled via cronjob with no_agent=true" } ``` ### Technical Analysis The Skill instructs the Agent to create a symbolic link in the Hermes scripts directory and register a daily `no_agent` cron job. The scheduled task survives the originating Skill run and executes automatically without further user interaction. The task points to a symbolic link rather than an immutable, integrity-verified copy. Consequently, later modification or replacement of the Skill script changes what the scheduled job executes. The current bundled script only retrieves horoscope text, and no privilege escalation or embedded malicious code was identified. Nevertheless, the persistence mechanism expands the trust bound ...[truncated 1375 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Make the foreground, on-demand command the default and present scheduling only as a clearly labeled optional feature. 2. Require explicit user confirmation immediately before creating the symbolic link or cron task. 3. Display the exact schedule, executable path, network destination, permissions, and removal procedure before installation. 4. Copy a reviewed script into the cron directory instead of linking to a mutable Skill package, or verify its cryptographic hash before every execution. 5. Pin the installed script to a specific reviewed Skill version and require renewed approval when it changes. 6. Run the task under a restricted account or sandbox with minimal file access and outbound network access limited to the required HTTPS host. 7. Provide a command to disable and remove both the `astroclaw-daily` cron entry and associated script link. 8. Do not describe the task as being delivered “silently”; scheduling and subsequent failures should be visible through auditable logs and status reporting. ]]>
