Back to skill

Security audit

Outlook Calendar & Microsoft 365

Security checks for vulnerabilities and agentic risk

Overview

This calendar skill is purpose-aligned, but it asks users to install and trust a mutable third-party CLI that can handle persistent Microsoft calendar credentials and modify calendar events.

Review this before installing. Use it only if you trust Porteden and the installed CLI source. Prefer a pinned, verified release if available, use browser login instead of command-line token entry, grant the narrowest Microsoft Graph scopes, confirm all event changes carefully, and log out or revoke access when finished on shared or sensitive machines.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:6
Finding
Unpinned Third-Party CLI Installation Allows Supply-Chain Code Execution<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 6 and 13 **Vulnerability Type**: Unpinned executable dependency from external sources **Risk Level**: Medium ### Vulnerable Code ```json "install":[ { "id":"brew", "kind":"brew", "formula":"porteden/tap/porteden", "bins":["porteden"], "label":"Install porteden (brew)" }, { "id":"go", "kind":"go", "module":"github.com/porteden/cli/cmd/porteden@latest", "bins":["porteden"], "label":"Install porteden (go)" } ] ``` ```markdown If `porteden` is not installed: `brew install porteden/tap/porteden` (or `go install github.com/porteden/cli/cmd/porteden@latest`). ``` ### Technical Analysis The Skill instructs users or agents to install and execute the third-party `porteden` CLI from either an external Homebrew tap or a GitHub Go module selected with the mutable `@latest` version. The instructions do not pin an audited release, immutable commit, artifact checksum, or cryptographic signature. As a result, the executable installed when the Skill is invoked can differ from the implementation that existed when the Skill was reviewed. This creates a supply-chain trust boundary through which a compromised upstream repository, maintainer account, release workflow, or Homebrew tap could distribute attacker-controlled code. This is especially security-sensitive because the installed CLI is subsequently instructed to: - Receive a Microsoft account token through `porteden auth login --token <key>`. - Read `PE_API_KEY` from the environment. - access credentials persisted in the system keyring. - Read private calendar subjects, bodies, locations, organizers, and attendee identities. - Create, update, delete, and respond to calendar events. Network access to Microsoft 365 or a calendar service is necessary for the declared calendar functionality. However, the reviewed project contains only the Skill instructions and not the CLI implementation, so the CLI's act ...[truncated 1955 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace `@latest` with a specifically audited semantic version or immutable Git commit, for example: ```sh go install github.com/porteden/cli/cmd/porteden@vX.Y.Z ``` 2. Pin the Homebrew formula to a reviewed release rather than implicitly accepting future tap changes. 3. Publish expected SHA-256 hashes for release artifacts and verify them before execution. 4. Require cryptographically signed releases and verify signatures against a documented maintainer key. 5. Record the approved CLI version in Skill metadata so automated installers can enforce it. 6. Document all network endpoints contacted by the CLI, including whether calendar data passes through a third-party service rather than going directly to Microsoft Graph. 7. Document and enforce the minimum Microsoft Graph scopes required for each operation. 8. Avoid passing tokens in command-line arguments because they can be exposed through shell history or process listings. Prefer protected standard input, an operating-system credential broker, or an interactive authentication flow. 9. Run the CLI with minimal operating-system privileges and a narrowly scoped environment that excludes unrelated secrets. 10. Establish a controlled update process in which each new CLI version is reviewed, its checksum is updated, and security-sensitive behavior is retested before the Skill adopts it. ]]>
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 (4)

Credential Access

High
Category
Privilege Escalation
Content
name: microsoft-calendar
description: Secure Outlook Calendar / Microsoft 365 calendar API CLI. Use when the user wants to list, search, or read Outlook / Microsoft 365 calendar events; creating, updating, deleting, or responding to events require explicit user confirmation - Also Exchange support.
version: 1.0.8
metadata: {"openclaw":{"emoji":"📅","homepage":"https://porteden.com","primaryEnv":"PE_API_KEY","envVars":[{"name":"PE_API_KEY","required":false,"description":"API key; if unset, credentials are read from the system keyring via `porteden auth login`"}],"requires":{"bins":["porteden"]},"install":[{"id":"brew","kind":"brew","formula":"porteden/tap/porteden","bins":["porteden"],"label":"Install porteden (brew)"},{"id":"go","kind":"go","module":"github.com/porteden/cli/cmd/porteden@latest","bins":["porteden"],"label":"Install porteden (go)"}]}}
---

# porteden outlook-calendar
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
name: microsoft-calendar
description: Secure Outlook Calendar / Microsoft 365 calendar API CLI. Use when the user wants to list, search, or read Outlook / Microsoft 365 calendar events; creating, updating, deleting, or responding to events require explicit user confirmation - Also Exchange support.
version: 1.0.8
metadata: {"openclaw":{"emoji":"📅","homepage":"https://porteden.com","primaryEnv":"PE_API_KEY","envVars":[{"name":"PE_API_KEY","required":false,"description":"API key; if unset, credentials are read from the system keyring via `porteden auth login`"}],"requires":{"bins":["porteden"]},"install":[{"id":"brew","kind":"brew","formula":"porteden/tap/porteden","bins":["porteden"],"label":"Install porteden (brew)"},{"id":"go","kind":"go","module":"github.com/porteden/cli/cmd/porteden@latest","bins":["porteden"],"label":"Install porteden (go)"}]}}
---

# porteden outlook-calendar
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
name: microsoft-calendar
description: Secure Outlook Calendar / Microsoft 365 calendar API CLI. Use when the user wants to list, search, or read Outlook / Microsoft 365 calendar events; creating, updating, deleting, or responding to events require explicit user confirmation - Also Exchange support.
version: 1.0.8
metadata: {"openclaw":{"emoji":"📅","homepage":"https://porteden.com","primaryEnv":"PE_API_KEY","envVars":[{"name":"PE_API_KEY","required":false,"description":"API key; if unset, credentials are read from the system keyring via `porteden auth login`"}],"requires":{"bins":["porteden"]},"install":[{"id":"brew","kind":"brew","formula":"porteden/tap/porteden","bins":["porteden"],"label":"Install porteden (brew)"},{"id":"go","kind":"go","module":"github.com/porteden/cli/cmd/porteden@latest","bins":["porteden"],"label":"Install porteden (go)"}]}}
---

# porteden outlook-calendar
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
name: microsoft-calendar
description: Secure Outlook Calendar / Microsoft 365 calendar API CLI. Use when the user wants to list, search, or read Outlook / Microsoft 365 calendar events; creating, updating, deleting, or responding to events require explicit user confirmation - Also Exchange support.
version: 1.0.8
metadata: {"openclaw":{"emoji":"📅","homepage":"https://porteden.com","primaryEnv":"PE_API_KEY","envVars":[{"name":"PE_API_KEY","required":false,"description":"API key; if unset, credentials are read from the system keyring via `porteden auth login`"}],"requires":{"bins":["porteden"]},"install":[{"id":"brew","kind":"brew","formula":"porteden/tap/porteden","bins":["porteden"],"label":"Install porteden (brew)"},{"id":"go","kind":"go","module":"github.com/porteden/cli/cmd/porteden@latest","bins":["porteden"],"label":"Install porteden (go)"}]}}
---

# porteden outlook-calendar
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.