Back to skill

Security audit

calendar-scheduling

Security checks for vulnerabilities and agentic risk

Overview

This calendar skill is coherent and disclosed, with expected calendar credential access and booking authority, but users should prefer pinned or contained installation paths.

Install only from the pinned OpenClaw package or run npx with an explicit @0.9.1 version, review the OAuth scopes before connecting calendars, and use the Docker containment option if you want stronger isolation of calendar credentials.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T03 · Remote Payload Retrieval and Execution

Warning
Location
SKILL.md:105
Finding
Third-Party Postinstall Hook Downloads and Executes an External Native Binary## Vulnerability Details **File Location**: `SKILL.md`, lines 105–108 **Vulnerability Type**: Remote payload retrieval and execution through an npm installation lifecycle **Risk Level**: Medium ### Vulnerable Code ```text **Install and startup lifecycle:** 1. `npx` resolves `@temporal-cortex/cortex-mcp` from the npm registry (one-time, cached locally after first download) 2. The postinstall script downloads the platform-specific binary from the [GitHub Release](https://github.com/temporal-cortex/mcp/releases/tag/mcp-v0.9.1) and verifies its SHA256 checksum against the embedded `checksums.json` — **installation halts on mismatch** 3. The MCP server starts as a local process communicating over stdio (no listening ports) ``` The corresponding installation configuration appears at `SKILL.md`, lines 16–18: ```yaml install: - kind: node package: "@temporal-cortex/cortex-mcp@0.9.1" bins: [cortex-mcp] ``` The Skill also directs users to invoke the package for credential setup at `SKILL.md`, line 159: ```text Layer 1 tools work immediately with zero configuration. Calendar tools require a one-time OAuth setup — run the [setup script](https://github.com/temporal-cortex/skills/blob/main/scripts/setup.sh) or `npx @temporal-cortex/cortex-mcp auth google`. ``` ### Technical Analysis Installing the declared npm dependency runs package lifecycle code. According to the Skill documentation, its postinstall hook retrieves a platform-specific native executable from a GitHub Release. The retrieved executable is subsequently launched as a local MCP server. This creates a remote code-execution supply-chain boundary: the effective executable is not included in the audited project and can only be assessed by separately reviewing the npm package, postinstall script, checksum manifest, release artifact, and upstream source. None of those components were present in the supplied artifact. Version pinning to `0.9.1`, SHA2 ...[truncated 3117 chars]
Remediation
## Remediation Suggestions 1. **Eliminate installation-time remote binary retrieval where practical.** Distribute the reviewed executable directly in a signed, immutable package, or require users to build it from a pinned source revision. 2. **Use cryptographic release signing.** Sign binaries and checksum manifests with a protected signing identity, and verify signatures before accepting downloaded artifacts. 3. **Publish verifiable provenance.** Provide SLSA-compatible build attestations linking each binary digest to the exact source commit and CI workflow that produced it. 4. **Strengthen dependency pinning.** Supply a lockfile or integrity metadata in addition to the semantic package version. Use immutable artifact digests for container-based distribution. 5. **Avoid unreviewed remote setup execution.** Include a pinned setup script in the Skill package for local inspection rather than relying only on a script reached through a remote repository link. 6. **Make verification fail closed.** Ensure the installer never executes a binary if the signature, digest, provenance, platform identification, or expected filename cannot be validated. 7. **Separate trust channels.** Publish signed checksums or trusted digest information through a channel whose compromise does not automatically imply compromise of the binary-hosting channel. 8. **Apply runtime containment.** Prefer a digest-pinned container with a non-root user, read-only root filesystem, dropped Linux capabilities, no host networking where unnecessary, and only the dedicated configuration directory mounted. 9. **Minimize credential exposure.** Restrict credential-file permissions to the owning user and request only the OAuth scopes needed for selected calendar operations. 10. **Document optional network behavior clearly.** Require explicit user consent before enabling Platform Mode or sending email addresses, slugs, or scheduling information to `api.temporal-cortex.com`.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (8)

Credential Access

High
Category
Privilege Escalation
Content
| File | Purpose | Created By |
|------|---------|-----------|
| `credentials.json` | OAuth tokens for calendar providers | Setup wizard / auth command |
| `config.json` | Timezone, week start, provider labels | Setup wizard / configure script |

No other filesystem paths are accessed. Verifiable by:
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
| File | Purpose | Created By |
|------|---------|-----------|
| `credentials.json` | OAuth tokens for calendar providers | Setup wizard / auth command |
| `config.json` | Timezone, week start, provider labels | Setup wizard / configure script |

No other filesystem paths are accessed. Verifiable by:
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
| File | Purpose | Created By |
|------|---------|-----------|
| `credentials.json` | OAuth tokens for calendar providers | Setup wizard / auth command |
| `config.json` | Timezone, week start, provider labels | Setup wizard / configure script |

No other filesystem paths are accessed. Verifiable by:
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Skill Enumeration

Medium
Category
Agent Snooping
Content
| Sub-Skill | When to Use | Tools |
|-----------|------------|-------|
| [temporal-cortex-datetime](https://github.com/temporal-cortex/skills/blob/main/skills/temporal-cortex-datetime/SKILL.md) | Time resolution, timezone conversion, duration math. No credentials needed — works immediately. | 5 tools (Layer 1) |
| [temporal-cortex-scheduling](https://github.com/temporal-cortex/skills/blob/main/skills/temporal-cortex-scheduling/SKILL.md) | List calendars, events, free slots, availability, RRULE expansion, booking, contact search, and proposal composition. Requires OAuth credentials. | 14 tools (Layers 0-4) |

## Routing Table
Confidence
80% confidence
Finding
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.

Skill Enumeration

Medium
Category
Agent Snooping
Content
| Sub-Skill | When to Use | Tools |
|-----------|------------|-------|
| [temporal-cortex-datetime](https://github.com/temporal-cortex/skills/blob/main/skills/temporal-cortex-datetime/SKILL.md) | Time resolution, timezone conversion, duration math. No credentials needed — works immediately. | 5 tools (Layer 1) |
| [temporal-cortex-scheduling](https://github.com/temporal-cortex/skills/blob/main/skills/temporal-cortex-scheduling/SKILL.md) | List calendars, events, free slots, availability, RRULE expansion, booking, contact search, and proposal composition. Requires OAuth credentials. | 14 tools (Layers 0-4) |

## Routing Table
Confidence
80% confidence
Finding
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.

Rp1

Medium
Category
MCP Rug Pull
Confidence
93% confidence
Finding
The documented default setup uses `npx @temporal-cortex/cortex-mcp` without an explicit version pin. That can cause clients to fetch whatever version is current at execution time, increasing supply-chain risk if a malicious or broken release is published or if behavior changes unexpectedly.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Static analysis

No suspicious patterns detected.