T06 · System Persistence
- Location
SKILL.md:175- Finding
Persistent Scheduled Agent Execution with Credential Access
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 175–179 and 224–243
Vulnerability Type:T06: System Persistence
Risk Level: HighVulnerable Code:
text ## Skill: Scheduled Push Configuration Create **two** cron jobs (morning + evening) that check match status and push updates to your chosen channel. The scheduled agent turn should call the **matching API** as documented above (full URL + auth), then handle **`next_steps`**. **Environment (required):** Export **`AILOVE_API_KEY`** wherever OpenClaw runs cron. Load it from `~/.openclaw/skills-data/match/credentials.json` or your preferred secret store. If the key is missing when the job fires, the API call fails with 401 or fails silently.bash openclaw cron add \ --name "Match Board Morning" \ --cron "0 9 * * *" \ --tz "{timezone}" \ --session "isolated" \ --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/match/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps and summarize" \ --to "{channel-target-id}" \ --announcebash openclaw cron add \ --name "Match Board Evening" \ --cron "0 21 * * *" \ --tz "{timezone}" \ --session "isolated" \ --message "Load AILOVE_API_KEY from ~/.openclaw/skills-data/match/credentials.json; call GET https://heerweiyi.cc/api/v1/agent/matching with Bearer; handle next_steps and summarize" \ --to "{channel-target-id}" \ --announceTechnical Analysis
The Skill instructs the user or Agent to install two recurring OpenClaw cron jobs. These jobs survive the initiating Skill session and automatically create isolated Agent sessions twice per day.
Each scheduled session is instructed to:
- Read an authentication credential from the Skill's persistent data directory.
- Send the credential to an external API.
- Process actions and content returned by that API.
- Publish a sum ...[truncated 1851 chars]
- Remediation
View remediation
Remediation Suggestions
- Make scheduling explicitly opt-in and require informed confirmation immediately before each job is installed.
- Default to manual, user-initiated matching checks rather than persistent jobs.
- Show the exact schedule, destination, credential source, requested API endpoint, and data that may be announced before obtaining consent.
- Provide complete cleanup instructions, including the exact
openclaw cron remove <job-id>commands. - Configure an expiration date or bounded run count instead of creating indefinite jobs.
- Use a narrowly scoped, fixed-function client for scheduled polling rather than launching a general-purpose Agent session.
- Retrieve credentials from the platform's managed secret store instead of directly instructing isolated Agent sessions to read a plaintext JSON file.
- Minimize announcement contents and prevent sensitive matching data or human answers from being sent to group channels without explicit approval.
- Record job creation and execution in an auditable local log without recording the API key or full sensitive responses.
