Back to skill

Security audit

Apple Cal Anywhere

Security checks for vulnerabilities and agentic risk

Overview

This is a disclosed Apple Calendar CalDAV tool with expected calendar and credential access, but users should store the app password securely.

Install only if you are comfortable giving the tool access to read and modify the specified iCloud calendars. Use an Apple app-specific password, store it in keyring or macOS Keychain where possible, avoid committing or persisting APPLECAL_PASSWORD in shell profiles, and consider installing dependencies in a locked virtual environment.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (2)

T08 · Insecure Dependencies

Warning
Location
README.md:20
Finding
Unpinned Third-Party Dependency Installation## Vulnerability Details **File Location**: `README.md:20-24`; related runtime guidance at `scripts/applecal.py:40-44` **Vulnerability Type**: Unverified and unpinned third-party dependencies **Risk Level**: Medium ### Vulnerable Code ```bash ### 1. Install the dependency ```bash pip3 install requests # optional (recommended off-macOS): pip3 install keyring ``` ``` The application also recommends installing the latest available package when the dependency is missing: ```python except ImportError: print(json.dumps({"error": "Missing dependency: requests. Run 'pip3 install requests'"})) sys.exit(1) ``` ### Technical Analysis The installation instructions retrieve `requests` and `keyring` from the user's configured Python package index without pinning reviewed versions or verifying package hashes. The effective dependency version can therefore change after the Skill has been audited. This creates a supply-chain exposure when an attacker compromises an upstream release, controls a configured package mirror, poisons a private index, or manipulates local pip configuration. A malicious dependency may execute code during installation or when imported by `scripts/applecal.py`. The Skill imports `requests` before processing commands and optionally imports `keyring` while resolving credentials. Consequently, malicious package code would execute with the same operating-system privileges and environment access as the Skill. ### Attack Path 1. An attacker compromises an upstream dependency release or a package index configured on the target system. 2. The user follows the documented `pip3 install requests` or `pip3 install keyring` instructions. 3. Because no version or hash is specified, pip retrieves the attacker-controlled release. 4. Malicious code executes during installation or when the package is imported. 5. The malicious dependency can access the Skill process environment, including `APPLECAL_PASSWORD`, and act with the user's local privileges. ### ...[truncated 537 chars]
Remediation
## Remediation Suggestions 1. Add a reviewed dependency file with exact versions, for example: ```text requests==REVIEWED_VERSION keyring==REVIEWED_VERSION ``` 2. Generate and publish hashes for every approved distribution. 3. Require hash verification during installation: ```bash python3 -m pip install --require-hashes -r requirements.txt ``` 4. Prefer a locked virtual environment rather than installing unspecified packages globally. 5. Document the expected package index and advise users to review pip index configuration. 6. Update the runtime error message to reference the locked requirements file rather than recommending an unpinned installation command. 7. Add an automated dependency review process for version updates and known vulnerabilities.

T09 · Insecure Skill Coding Practices

Warning
Location
README.md:32
Finding
Plaintext Credential Persistence in Shell Startup Files## Vulnerability Details **File Location**: `README.md:32-36` **Vulnerability Type**: Plaintext sensitive credential storage **Risk Level**: Medium ### Vulnerable Code ```markdown **Option A — Environment variable** *(macOS, Linux, CI)* ```bash export APPLECAL_PASSWORD="your-app-specific-password" ``` Add to your shell profile (`.zshrc`, `.bashrc`, etc.) to persist across sessions. ``` ### Technical Analysis The documentation explicitly recommends adding an iCloud app-specific password to a shell profile for persistence. Files such as `.zshrc` and `.bashrc` store their contents as plaintext and are commonly included in backups, support archives, dotfile repositories, and synchronization systems. Although reading `APPLECAL_PASSWORD` at runtime is consistent with the Skill's declared authentication model, recommending long-term plaintext storage exceeds what is necessary when the implementation already supports Python keyring and macOS Keychain. A process running as the same user can generally read the shell profile. Accidental publication of a dotfile repository or exposure of a backup can also disclose the credential without requiring compromise of the Skill itself. ### Attack Path 1. A user follows the documentation and writes the iCloud app-specific password into `.zshrc`, `.bashrc`, or another startup file. 2. The file is read by local malware, another process operating as the user, an exposed backup, a support bundle, or a mistakenly public dotfile repository. 3. The attacker extracts the plaintext value assigned to `APPLECAL_PASSWORD`. 4. The attacker uses the credential with the corresponding Apple account identifier to authenticate to supported iCloud services, including the CalDAV service used by this Skill. 5. The attacker accesses or modifies calendar information within the permissions granted to that credential. ### Impact Assessment Credential disclosure may allow unauthorized access to the victim's iCloud Calendar data. Within the function ...[truncated 424 chars]
Remediation
## Remediation Suggestions 1. Remove the recommendation to persist `APPLECAL_PASSWORD` directly in shell startup files. 2. Make Python keyring or macOS Keychain the preferred authentication method. 3. For CI environments, inject the password from the platform's protected secret store only for the duration of the job. 4. If environment-variable authentication remains supported, document it as an ephemeral option and clearly warn users not to commit or persist the value in plaintext. 5. Recommend restrictive permissions for any unavoidable local secret file and ensure it is excluded from source control and backups. 6. Provide platform-specific secure setup examples for macOS Keychain, Windows Credential Manager through keyring, and an appropriate Linux Secret Service backend. 7. Advise users who previously stored the password in a shell profile to remove it, inspect repository and backup exposure, and rotate the app-specific password.
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (36)

Credential Access

High
Category
Privilege Escalation
Content
```bash
pip3 install requests
# optional (recommended off-macOS):
pip3 install keyring
```

### 2. Generate an app-specific password
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
```bash
pip3 install requests
# optional (recommended off-macOS):
pip3 install keyring
```

### 2. Generate an app-specific password
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
```bash
pip3 install requests
# optional (recommended off-macOS):
pip3 install keyring
```

### 2. Generate an app-specific password
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
```bash
pip3 install requests
# optional (recommended off-macOS):
pip3 install keyring
```

### 2. Generate an app-specific password
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
```bash
pip3 install requests
# optional (recommended off-macOS):
pip3 install keyring
```

### 2. Generate an app-specific password
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
```bash
pip3 install requests
# optional (recommended off-macOS):
pip3 install keyring
```

### 2. Generate an app-specific password
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
```bash
pip3 install requests
# optional (recommended off-macOS):
pip3 install keyring
```

### 2. Generate an app-specific password
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
```bash
pip3 install requests
# optional (recommended off-macOS):
pip3 install keyring
```

### 2. Generate an app-specific password
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
```bash
pip3 install requests
# optional (recommended off-macOS):
pip3 install keyring
```

### 2. Generate an app-specific password
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
```bash
pip3 install requests
# optional (recommended off-macOS):
pip3 install keyring
```

### 2. Generate an app-specific password
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
```bash
pip3 install requests
# optional (recommended off-macOS):
pip3 install keyring
```

### 2. Generate an app-specific password
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Ae1

High
Category
analysis-evasion
Content
`scripts/applecal.py`
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
`scripts/applecal.py`
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
`scripts/applecal.py`
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
`scripts/applecal.py`
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Ae1

High
Category
analysis-evasion
Content
`scripts/applecal.py`
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Credential Access

High
Category
Privilege Escalation
Content
"author": "OpenClaw Fleet",
  "license": "MIT",
  "platform": "macos,linux,windows",
  "auth": "keychain (macOS) or APPLECAL_PASSWORD env var (cross-platform)",
  "requires": [
    "python3",
    "requests"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
"author": "OpenClaw Fleet",
  "license": "MIT",
  "platform": "macos,linux,windows",
  "auth": "keychain (macOS) or APPLECAL_PASSWORD env var (cross-platform)",
  "requires": [
    "python3",
    "requests"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
"author": "OpenClaw Fleet",
  "license": "MIT",
  "platform": "macos,linux,windows",
  "auth": "keychain (macOS) or APPLECAL_PASSWORD env var (cross-platform)",
  "requires": [
    "python3",
    "requests"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
"author": "OpenClaw Fleet",
  "license": "MIT",
  "platform": "macos,linux,windows",
  "auth": "keychain (macOS) or APPLECAL_PASSWORD env var (cross-platform)",
  "requires": [
    "python3",
    "requests"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
"author": "OpenClaw Fleet",
  "license": "MIT",
  "platform": "macos,linux,windows",
  "auth": "keychain (macOS) or APPLECAL_PASSWORD env var (cross-platform)",
  "requires": [
    "python3",
    "requests"
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- Event CRUD (List, Create, Update, Delete)
- RFC 8607 Managed Attachments (iPhone/iPad compatible)
- Free/Busy lookup (CalDAV scheduling + event-derived fallback)
- Keychain-based auth (no plaintext passwords)
- JSON-stable output for easy agent consumption

Requirements:
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- Event CRUD (List, Create, Update, Delete)
- RFC 8607 Managed Attachments (iPhone/iPad compatible)
- Free/Busy lookup (CalDAV scheduling + event-derived fallback)
- Keychain-based auth (no plaintext passwords)
- JSON-stable output for easy agent consumption

Requirements:
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- Event CRUD (List, Create, Update, Delete)
- RFC 8607 Managed Attachments (iPhone/iPad compatible)
- Free/Busy lookup (CalDAV scheduling + event-derived fallback)
- Keychain-based auth (no plaintext passwords)
- JSON-stable output for easy agent consumption

Requirements:
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
- Event CRUD (List, Create, Update, Delete)
- RFC 8607 Managed Attachments (iPhone/iPad compatible)
- Free/Busy lookup (CalDAV scheduling + event-derived fallback)
- Keychain-based auth (no plaintext passwords)
- JSON-stable output for easy agent consumption

Requirements:
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Static analysis

No suspicious patterns detected.