Back to skill

Security audit

macOS AppleScript Fallback (Reminders / Notes / Calendar / iMessage)

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly coherent, but it can send iMessages and modify personal Mac apps while also suggesting overly broad Mac permissions without enough user control.

Review this skill before installing. Only grant macOS Automation permissions for the specific app you are using, avoid granting Full Disk Access unless you independently know why it is needed, and require the agent to show the recipient, message text, calendar, account, and content before it sends or creates anything.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
references/troubleshooting.md:9
Finding
Unnecessary Full Disk Access Recommendation## Vulnerability Details **File Location**: `references/troubleshooting.md`, line 9 **Vulnerability Type**: Excessive permission recommendation **Risk Level**: Medium **Vulnerable Code Snippet**: ```markdown - Also allow Full Disk Access if your environment requires it ``` ### Technical Analysis The documented functionality only uses AppleScript automation to interact with Reminders, Notes, Calendar, and Messages. The audited scripts do not demonstrate any operation requiring unrestricted access to protected files. Recommending Full Disk Access without defining a concrete, technically verified requirement violates the principle of least privilege. This permission can give the terminal or host application access to sensitive data outside the skill's stated scope. It is also unlikely to resolve an ordinary Apple Events authorization failure, which should instead be addressed through narrowly scoped Automation permissions. ### Attack Path 1. A script triggers a macOS Automation prompt or fails because Apple Events access has not been approved. 2. The user consults `references/troubleshooting.md`. 3. The user grants Full Disk Access to the terminal or agent host based on the recommendation. 4. The host process—and any commands or skills executed through it—can subsequently access protected files beyond the requirements of the audited skill. 5. If that host process or a later workload is compromised, the unnecessarily broad permission increases the accessible data and resulting impact. This finding does not establish that the bundled scripts themselves read protected files; the risk arises from inducing an unnecessary expansion of the host application's permissions. ### Impact Assessment The affected terminal or agent host may receive broad access to protected user data outside Reminders, Notes, Calendar, and Messages. Depending on macOS version and system policy, this may expose otherwise restricted application data and ...[truncated 366 chars]
Remediation
## Remediation Suggestions Remove the general Full Disk Access recommendation and document only the per-application Automation permissions required for Reminders, Notes, Calendar, and Messages. Replace the vulnerable guidance with narrowly scoped instructions such as: ```markdown - In System Settings → Privacy & Security → Automation, allow the terminal or host application to control only the application used by the failing operation. - Do not grant Full Disk Access for these scripts. If a separate workflow requires access to a protected file, document the exact file and operation and use the narrowest applicable permission. ``` Additional hardening measures: 1. Explain that Apple Events authorization and Full Disk Access are distinct controls. 2. Provide application-specific troubleshooting steps rather than requesting broader permissions. 3. If an exceptional environment genuinely requires additional access, document the exact failed operation, validate that the permission resolves it, and instruct users to revoke the permission afterward. 4. Avoid suggesting persistent host-wide permissions as a generic response to script failures.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (8)

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill explicitly supports sending iMessage content to a recipient via Messages, but it does not require an explicit confirmation or warning before transmission. That creates a real risk of unintended disclosure of sensitive or private text if the agent misinterprets user intent, uses the wrong recipient, or sends content the user expected only to draft rather than transmit.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The troubleshooting guidance tells users to grant Automation access to multiple apps and potentially Full Disk Access, but it does not warn about the privacy and system-level implications of those permissions or advise limiting them to the minimum necessary. In the context of a skill that drives osascript to control Messages, Notes, Calendar, and Reminders, this broad-permission guidance could normalize over-privileging and increase the blast radius if the host environment, terminal, or skill workflow is abused.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
This script performs a state-changing action in Apple Calendar by creating an event without any built-in user-facing disclosure, confirmation, or dry-run mode. In the context of an agent skill intended to be invoked on a user's behalf, that increases the risk of silent or unexpected calendar modification if the skill is triggered from ambiguous, spoofed, or misinterpreted instructions.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The script directly creates a new Apple Notes entry via osascript as soon as it is invoked, with no user-facing confirmation, dry-run mode, or visibility into which account will be modified if the named account is unavailable. In an agent skill context, this can cause unintended persistent writes to a user's Notes data store, especially if upstream prompting or tool routing is mistaken or abused.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The script sends an iMessage to an arbitrary target using user-supplied content with no built-in confirmation, preview, allowlist, or secondary consent step. In an agent-skill context, this can enable unintended external communications, social engineering, privacy leakage, or spam if the tool is invoked on behalf of a user without sufficiently explicit confirmation at execution time.

Natural-Language Policy Violations

Low
Confidence
84% confidence
Finding
The example invocation and default calendar name use Chinese strings ("跑步" and "个人"), which implies a specific language/locale assumption in natural-language content. There is no accompanying opt-in, language selection, or justification that this skill is intended only for a Chinese-localized environment.

Natural-Language Policy Violations

Low
Confidence
83% confidence
Finding
The usage example hardcodes Chinese labels ("标题", "正文") in the expected HTML payload, which signals a specific language convention in the skill's natural-language interface. There is no accompanying indication that language is configurable or that the skill is intentionally limited to a Chinese-language context.

Natural-Language Policy Violations

Low
Confidence
84% confidence
Finding
The usage comment shows the reminder title as Chinese text ("任务内容"), which signals a language-specific expectation in a general-purpose script. There is no accompanying note that other languages are equally supported or that the locale is intentional, so this can be read as a language/locale constraint without user choice.

Static analysis

No suspicious patterns detected.