T09 · Insecure Skill Coding Practices
- Location
scripts/digest.js:13- Finding
Persistent Plaintext Storage of Sensitive Personal Data
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a real daily-digest helper, but it handles private email and calendar data, stores full reports permanently, and encourages recurring automated runs without enough containment or retention controls.
Install only if you are comfortable with the skill reading local email and calendar data, creating permanent local digest archives, and optionally sending summaries through your configured messaging channel. Review or disable the cron setup unless you want unattended daily runs, and consider modifying the script to escape HTML, restrict file permissions, redact sensitive fields, and add retention or opt-out controls.
scripts/digest.js:13Persistent Plaintext Storage of Sensitive Personal Data
scripts/digest.js:42Stored HTML Injection Through Unescaped Digest Data
No urgent emails found.
'} ``` ```javascript ${calendar.length > 0 ? calendar.map(c => `Your schedule is clear today.
'} ``` ```javascript ${tasks.length > 0 ? tasks.map(t => `No tasks due today.
'} ``` ```javascript ${news.length > 0 ? news.map(n => `The declared purpose says the skill generates a daily brief, but the workflow also persists the report to disk, may inspect tasks/contacts, and sends a notification, all of which materially expand its behavior beyond a simple summary. This mismatch undermines informed consent and can expose sensitive personal data by causing users or orchestrators to invoke the skill without realizing it performs retention and broader data collection.
The skill invokes local capabilities and sensitive data sources (himalaya, gog, and implied environment/local tooling) without declaring an explicit tool or permission scope. That makes the skill's effective privileges opaque to users and reviewers, increasing the chance of overbroad access to email/calendar data or unsafe execution in a more privileged runtime than expected.
The workflow goes beyond generating a brief by automatically saving a permanent historical log and sending a message notification. Those side effects create privacy and retention risks because personal email and calendar content may be stored and broadcast even when the user only asked for a transient morning summary.
The invocation phrases are broad enough that ordinary requests for a 'status update' or similar wording could trigger the skill in contexts where the user did not intend email/calendar/news aggregation. Because this skill accesses sensitive personal data and performs side effects, unintended activation increases the chance of unnecessary data access and logging.
The skill explicitly instructs the agent to create permanent local records containing content derived from personal emails and calendar events, then direct the user to those logs. Persistent storage of sensitive communications and schedule data creates a substantial privacy risk, expands the blast radius of compromise, and may violate data-minimization expectations for a simple daily digest.
The document instructs users to create a persistent cron job that will automatically run the skill every morning, causing repeated access to email, calendar, and news sources without a fresh user action each time. Persistent automation is risky here because the task handles private communications and can also log and forward results, so any over-collection, prompt injection, or misconfiguration becomes a recurring issue.
# Setting Up the Daily Digest Cron Job
To have your digest generated automatically every morning, add a cron job to OpenClaw.
## Example Cron Command
The guide explicitly states that the automated digest will access private emails and then send a summary through external messaging channels, but it does not warn the user about the privacy implications or encourage limiting sensitive content. In a recurring cron context, this increases the chance that confidential information is routinely exfiltrated to third-party channels or exposed on less secure devices.
A daily briefing skill is expected to summarize provided email/calendar/news data, but this implementation shells out to an external program via execSync to fetch mail directly. That subprocess execution capability is more powerful than the manifest’s stated purpose and is not mentioned as part of the skill’s scope.
The script collects personal email data and combines it with calendar items, tasks, and news, then stores the resulting digest on disk without any visible consent, notice, or data-minimization controls. Even if intended for convenience, silent collection and retention of sensitive personal data creates a meaningful privacy and security risk in a personal-assistant context.
The script writes the full daily digest, including email subjects/senders, calendar events, and tasks, to a persistent file under the user's home directory. This creates unnecessary local retention of sensitive personal data beyond the stated briefing function, increasing exposure to other local users, backups, endpoint compromise, or later unintended reuse.
The manifest scope names urgent emails, upcoming calendar events, and relevant news as the components of the daily brief. The code also accepts and renders a separate tasks section, extending behavior beyond the described data sources.
The call to toLocaleDateString explicitly hard-codes 'en-US', which imposes a specific language/locale format regardless of the user's preferences. This matches the policy-violation category for locale constraints because there is no opt-in, configurability, or documented region-specific justification in the file.
Detected: suspicious.dangerous_exec