Back to skill

Security audit

temporal-cortex

Security checks for vulnerabilities and agentic risk

Overview

This calendar scheduling skill is coherent and disclosed, with expected OAuth calendar access and no artifact-backed malicious behavior.

Install this only if you are comfortable granting the MCP server access to your calendar OAuth tokens and letting it create calendar events after confirmation. Prefer the pinned package path, verify release checksums before first use, avoid mutable main-branch setup or Docker commands when possible, and use Docker containment if you want tighter filesystem isolation.

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:109
Finding
Externally Retrieved Executable and Mutable Installation Sources## Vulnerability Details **File Location**: `SKILL.md:109-112`, `SKILL.md:154`, and `SKILL.md:158` **Vulnerability Type**: Remote executable retrieval and insecure supply-chain configuration **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) ``` ```bash Build: `docker build -t cortex-mcp https://github.com/temporal-cortex/mcp.git` ``` ```text 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 The documented installation process executes an npm package lifecycle hook that downloads and subsequently runs a compiled executable from an external GitHub Release. The downloaded binary, npm postinstall implementation, setup script, and corresponding source are not included in the audited artifact, so their behavior cannot be independently verified through this audit. Although the documentation states that SHA256 verification is performed, the embedded checksum and executable are distributed through infrastructure controlled by the same publisher. A checksum protects against accidental corruption or an inconsistent download, but it does not establish an independent trust boundary if an attacker can replace both the executable and its expected checksum. The Docker build command retrieves the repository's default revision without pinning an immutable commit. The set ...[truncated 2600 chars]
Remediation
## Remediation Suggestions 1. Pin every remotely retrieved source to an immutable commit or content digest. Replace default-branch Docker builds and `main`-branch setup references with reviewed commit hashes. 2. Publish signed release artifacts and verify signatures before execution. Keep verification keys or trusted identity policy separate from the release assets. 3. Publish checksums through an independently controlled, authenticated channel rather than relying solely on checksum data embedded in the npm package or colocated with the release. 4. Pin npm package integrity in a lockfile and document installation using deterministic package-manager behavior. 5. Allow users to install without lifecycle scripts, inspect the unpacked package and postinstall logic, verify the binary, and only then execute it. 6. Provide reproducible-build instructions and provenance attestations so users can confirm that release binaries correspond to a specific audited source commit. 7. Prefer a prebuilt container pinned by an immutable image digest. Run it with the configuration directory as the only required mount, a non-root user, a read-only root filesystem, dropped Linux capabilities, and network allowlisting for configured providers. 8. Restrict OAuth scopes to the minimum needed for requested operations and protect credential files with owner-only filesystem permissions. 9. Separate credential-free datetime functionality from credential-bearing calendar functionality so the former does not require installing or running a component with access to OAuth tokens.
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
88% confidence
Finding
The skill references `npx @temporal-cortex/cortex-mcp` without an explicit version, which allows the latest published package to be resolved at execution time. If the npm package is later compromised, unpublished and republished, or a malicious update is released, users could execute unintended code during install/startup, including postinstall behavior.

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.