Back to skill

Security audit

calendar-reminder

Security checks for vulnerabilities and agentic risk

Overview

The skill has a coherent calendar-reminder purpose, but it asks users to create a persistent main-session job that repeatedly runs an unreviewed local script with access to calendar and messaging data.

Install only if you are comfortable with a persistent daily job reading Outlook calendar details and sending them to Feishu. Before enabling it, review or provide the actual calendar_reminder.py script, use the narrowest possible Feishu recipient, avoid group delivery unless everyone consents, prefer a dedicated limited session over main, and keep a clear remove command for the cron task.

Vulnerability Patterns
  • System PersistenceInstalls backdoors, hooks, services, or scheduled tasks that survive the run
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T06 · System Persistence

Error
Location
SKILL.md:156
Finding

Persistent Scheduled Execution in the Agent's Main Session

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 156–162
Vulnerability Type: Persistent scheduled task with recurring Agent-directed code execution
Risk Level: High

Vulnerable Code

bash
skill-platform cron add \
  --name "calendar-daily-scan" \
  --cron "0 22 * * *" \
  --tz "Asia/Shanghai" \
  --session main \
  --system-event "CALENDAR_SCAN: Please immediately run python3 ~/.skill-platform/workspace/skills/calendar-reminder/calendar_reminder.py and wait for completion" \
  --description "Scan tomorrow's calendar every night at 22:00 and configure reminders"

The original system-event and description strings are written in Chinese in the audited file; they are translated above to comply with the report's English-only requirement.

Technical Analysis

The installation instructions create a persistent cron entry that targets the Agent's main session and survives beyond the current Skill run. At 22:00 every day, the scheduler injects a system event instructing the Agent to execute a Python file from the user's writable workspace.

The persistence is explicitly documented at line 100:

After registration, the task remains persistent in skill-platform and continues to trigger even after the Agent restarts.

This design creates a recurring execution boundary around calendar_reminder.py. Because that script is not included in the audited artifact, its integrity and behavior cannot be verified. If the file is added or replaced after review, the persistent task can repeatedly execute its new contents under the Agent's effective privileges.

Attack Path

  1. A user follows the Skill instructions and deploys a file named calendar_reminder.py into the specified workspace.
  2. The user runs the documented skill-platform cron add command.
  3. The platform stores a persistent scheduled task associated with the Agent's main session.
  4. An attacker or compromised process with writ ...[truncated 1321 chars]
Remediation
View remediation

Remediation Suggestions

  1. Do not create scheduled tasks automatically. Require explicit, informed user approval immediately before registration.
  2. Avoid targeting the Agent's main session. Use a dedicated, least-privilege session that has access only to the required calendar and notification functions.
  3. Package the executed script with the Skill so its exact contents can be reviewed during installation.
  4. Store the executable in an administrator-controlled, non-user-writable location with restrictive ownership and permissions.
  5. Pin and verify the script's cryptographic hash before every scheduled execution. Refuse execution if verification fails.
  6. Replace the free-form system event with a narrowly scoped platform-native job that invokes a fixed, validated executable and fixed arguments.
  7. Restrict the job's filesystem, network, environment-variable, and credential access to the minimum required.
  8. Provide exact commands for pausing and permanently deleting the scheduled task.
  9. Record task creation, modification, execution, and deletion in an auditable log.
  10. Require reauthorization whenever the executable path, script hash, target session, calendar account, or notification destination changes.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (6)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill description does not prominently warn that it scans all Outlook events and forwards event details to Feishu, which can include sensitive meeting subjects, attendees, locations, and external customer information. In a calendar-processing context, lack of explicit disclosure undermines informed consent and can lead to unintended data sharing to group chats or bots.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

Advertising a callback_url input and real-time callback features introduces an unnecessary outbound communication channel that is not justified by the stated reminder workflow. Such a channel can be abused to exfiltrate scheduling data or send notifications to attacker-controlled endpoints, especially in a skill that already processes sensitive calendar content.

Content

No source excerpt is available for this finding.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · SKILL.md (reported line 235)May include surrounding context.

md
### 3. zoneinfo 时区数据缺失

**原因**: Linux 系统未安装 `tzdata` 包,或 Python 版本低于 3.9.
**处理**: 在 Debian/Ubuntu 执行 `sudo apt install tzdata`;在 macOS 通常已内置;若 Python < 3.9,升级到 3.9+ 或回退使用 `pytz`。脚本启动时应先 `try: from zoneinfo import ZoneInfo` 并在失败时给出明确提示.
### 4. cron 任务未触发

**原因**: `skill-platform` 服务未运行、cron 时区配置错误、或 system-event 消息格式不匹配.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill is presented as a narrowly scoped Outlook-to-Feishu reminder, but later expands its capabilities to generic file handling, API integration, and command execution. This scope inflation weakens user consent and trust boundaries, because users may grant read/write/exec privileges expecting only calendar reminders while the documentation normalizes unrelated high-risk operations.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The security guidance emphasizes externalized configuration via environment variables, but the usage instructions later direct users to edit the script and change the target identifier inline. While the target is not necessarily a secret, this contradicts the documented configuration approach and weakens the stated intent of keeping operational configuration out of source files.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The document repeatedly hardcodes Asia/Shanghai as the default operating timezone for scans and reminders. This imposes a locale-specific behavior without offering user choice or clearly documenting that the skill is intended only for that region, which can violate language/locale policy expectations.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.