T06 · System Persistence
- Location
SKILL.md:645- Finding
Recurring Cron Entry Enables Persistence and Task-Name Command Injection
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is mostly aligned with timeboxing, but it uses persistent credentials, third-party sync, and a cron reminder command with unsafe persistence and shell-injection risk, so it should be reviewed before installation.
Install only if you are comfortable with this skill writing detailed local work logs, creating calendar/task entries, and optionally sending summaries or task details to third-party services. Avoid enabling openclaw cron reminders until the scheduler command is made one-shot and safely escaped, and avoid TickTick OAuth unless token files and generated scripts are protected or moved to a secure credential store.
SKILL.md:645Recurring Cron Entry Enables Persistence and Task-Name Command Injection
README.md:30Mutable and Unpinned Packages Are Downloaded and Executed
ticktick_auth.py:27OAuth Authorization Flow Omits State Validation
ticktick_auth.py:14OAuth Client Secret and Tokens Are Persisted Without Enforced Restrictive Permissions
The manifest frames the skill as a planning/timeboxing workflow, but the body also performs OAuth bootstrapping, starts a local HTTP callback server, opens a browser, obtains task API tokens, and persists them on disk. That behavior expansion is security-relevant because users may invoke a productivity skill without expecting credential acquisition and local secret storage.
The README advertises persistent local logging and automatic syncing of summaries/records to services like Flomo and Notion, but does not clearly warn users about what data is stored, transmitted, retained, or shared. Because this skill handles full-day plans, work logs, and review notes, accidental disclosure can expose sensitive personal or business information to local disk and third-party platforms.
The README instructs users to run npx clawhub@latest install ..., which fetches and executes the latest published package version without pinning. This creates a supply-chain risk: a compromised publisher account, malicious release, or breaking upstream change could cause arbitrary code execution on the user's machine at install time.
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.
npx clawhub@latest install openclaw-timebox-cpr
或手动将 `SKILL.md` 复制到 `.codebuddy/skills/openclaw-timebox-cpr/SKILL.md`
## 触发词
The trigger phrases include broad everyday requests such as '帮我规划任务' and 'task planning', which are likely to collide with normal assistant usage. In a skill that performs automation, logging, and third-party syncing, accidental invocation can cause unintended data capture or external actions without the user explicitly intending to activate this specific skill.
The skill clearly instructs file writes, network calls, token storage, and cron-style background scheduling, yet declares no explicit tool scope or permission boundaries. That increases the chance of silent overreach and makes it harder for a host agent or user to understand and constrain what the skill may do.
Trigger phrases like '帮我规划任务' and 'task planning' are broad everyday language and may unintentionally activate a skill that writes files, syncs to external services, or initiates setup flows. Unintended activation matters more here because the skill persists work content and can lead users into credential-handling and synchronization behavior.
The skill advertises automatic synchronization to calendars, task services, Flomo, Notion, and local logs, but lacks a prominent up-front warning that user work content will be persisted locally and transmitted to third parties. Users may disclose sensitive plans, clients, meetings, or internal work details without informed consent about where that data will go.
This code performs authenticated network access to TickTick using a locally stored bearer token to verify account access. The transmission is expected for the integration, but it is still security-relevant because it sends credentials and account metadata to a third party and depends on safe token handling.
import json, urllib.request
try:
t = json.load(open('$HOME/.config/timebox/ticktick.json'))
req = urllib.request.Request('https://api.ticktick.com/open/v1/project')
req.add_header('Authorization', f'Bearer {t[\"access_token\"]}')
urllib.request.urlopen(req); print('ok')
except Exception as e: print('fail')
The skill instructs writing an authorization script containing client credentials and then storing resulting tokens under ~/.config/timebox without any strong warning about secret handling. Persisting credential-bearing material locally can expose access if the file permissions are weak, the machine is shared, or logs/backups capture those files.
This step fetches project metadata from TickTick using an access token so the user can select a destination list. While functionally aligned with the skill, it still transmits authenticated requests and exposes account structure to the local environment, which should be treated as sensitive.
python3 -c "
import json, urllib.request
t = json.load(open('$HOME/.config/timebox/ticktick.json'))
req = urllib.request.Request('https://api.ticktick.com/open/v1/project')
req.add_header('Authorization', f'Bearer {t[\"access_token\"]}')
data = json.loads(urllib.request.urlopen(req).read())
for p in data: print(p['id'], '|', p['name'])
The skill specifies detailed local Markdown logging of planning, execution, and review data, but does not prominently warn that potentially sensitive work activities will be stored persistently on disk. This can expose confidential project details through shared devices, backups, repo inclusion, or accidental file sharing.
The inline Flomo documentation actively contradicts the manifest's external-sync restrictions by recommending one note per timebox plus a separate review note. Contradictory security-sensitive documentation is dangerous because implementations or future maintainers may follow the broader, more privacy-invasive behavior.
The Notion integration describes POSTing daily logs and updates to Notion APIs using an integration token. This is intended behavior, but it creates a real external data-exfiltration surface for potentially sensitive work summaries if enabled without strong notice and consent.
Notion
# 请求方式:POST
# 接口:https://api.notion.com/v1/pages
# 请求头:需携带 Notion Integration Token(header: X-Token: {log_token})
# 在指定 Database 创建新 Page,每天一条
# 追加内容通过 PATCH blocks endpoint 实现
The Flomo section says each timebox can become an independent note, which conflicts with the stated policy that external sync should occur only after REVIEW and only as a summary. This inconsistency can cause over-sharing of detailed work activity to third-party services contrary to user expectations.
This duplicate persistence finding points to the same dida365 task-creation behavior: structured work details are stored remotely as durable task content. The risk is contextual rather than overtly malicious, but it is still material because the stored content may reveal confidential schedules or project information.
dida task create \
--title "[Timebox #{N}] {任务名}" \
--project {dida_project_id} \
--content "优先级:{priority} · 紧急程度:{urgency}\n计划时间:{HH:MM},时长 {duration} 分钟" \
This duplicate persistence finding points to the same dida365 task-creation behavior: structured work details are stored remotely as durable task content. The risk is contextual rather than overtly malicious, but it is still material because the stored content may reveal confidential schedules or project information.
dida task create \
--title "[Timebox #{N}] {任务名}" \
--project {dida_project_id} \
--content "优先级:{priority} · 紧急程度:{urgency}\n计划时间:{HH:MM},时长 {duration} 分钟" \
The TickTick REST integration performs authenticated task creation, update, and completion calls against a third-party API. In context this is expected, but it remains a vulnerability surface because sensitive task details are transmitted externally and account actions occur automatically once configured.
API_BASE = "https://api.ticktick.com/open/v1"
The task collection phase encourages users to disclose 'everything' they plan to do, then records and reuses that information throughout logs and sync integrations. In context, this can capture sensitive internal plans, customer names, health or legal appointments, and other confidential items without adequate minimization or warning.
RUN-phase activation accepts very generic phrases such as '开始' or '开始做{任务名}', which can easily collide with normal conversation. Because entering RUN changes logs and may schedule reminders depending on runtime, ambiguous triggers can cause unintended state transitions and background actions.
CHECK-phase triggers like '完成了' or '结束了' are common phrases that may appear in unrelated chat. In this skill, such collisions can write task outcomes to logs and update third-party task systems, causing inaccurate records and unintended external synchronization.
The behavior principles explicitly require comprehensive recording of planning, execution records, task IDs, summaries, and reviews, with downstream persistence to local and external systems. This broad collection and retention of work details increases privacy and confidentiality risk, especially in a productivity context where data may include sensitive business information.
The script stores the full OAuth token response directly to a predictable file under the user's home directory without warning the user or enforcing restrictive file permissions. If the machine is shared, backed up insecurely, or the config directory is readable by other local processes/users, the token could be copied and used to access or modify the user's TickTick data.
The skill registers cron jobs for reminders without clearly warning that it will create system-level scheduled commands. Even if the command is benign, background persistence can surprise users and creates a foothold for stale jobs or unintended repeated execution if not cleaned up reliably.
REVIEW triggers include generic terms like 'review' or '今天结束了', which may be used casually outside the intended workflow. The resulting risk is lower than RUN/CHECK, but it can still produce persistent summaries and push data to configured external services unexpectedly.
No suspicious patterns detected.