Back to skill

Security audit

Meeting Scheduler

Security checks for vulnerabilities and agentic risk

Overview

This meeting scheduler is purpose-aligned, but it should be reviewed because it can expose calendar details and delete calendar events without strong confirmation safeguards.

Install only if you are comfortable granting calendar read and write authority. Before using it, require the agent to show a dry-run summary and get explicit approval before contacting anyone, creating invites, or deleting or changing calendar events; prefer free/busy data or redacted busy blocks instead of displaying event titles.

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

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:65
Finding
Unnecessary Disclosure of Confidential Calendar Event Details<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 65–82 **Vulnerability Type**: Excessive calendar-data exposure **Risk Level**: Medium ### Vulnerable Code ```bash # Fetch events and print a sorted list GOG_ACCOUNT=owner@company.com gog calendar events primary \ --from "$TODAY" \ --to "$NEXT_WEEK" \ 2>/dev/null \ | python3 -c " import sys, json try: events = json.load(sys.stdin) except json.JSONDecodeError: events = [] # Sort by start time and print each event print('Upcoming events:') for e in sorted(events, key=lambda x: x.get('start', {}).get('dateTime', '')): start = e.get('start', {}).get('dateTime', '')[:16].replace('T', ' ') print(' ', start, '—', e.get('summary', 'Untitled')) " ``` ### Technical Analysis The scheduling task only requires calendar availability, such as occupied start and end times. However, this command retrieves complete event records and explicitly prints each event summary. Event summaries may contain confidential information, including customer names, medical appointments, acquisition discussions, personnel matters, or internal project names. Printing these summaries places them in the agent context and potentially in command logs, audit traces, conversation histories, or other systems that do not require access to this information. This violates least-privilege and data-minimization principles. The later availability script in the same file demonstrates that candidate slots can be calculated using only event start and end values, without displaying summaries. ### Attack Path 1. A scheduling request causes the agent to execute the documented calendar-query workflow. 2. The `gog calendar events` command retrieves complete event records from the owner's primary calendar. 3. The Python pipeline extracts and prints each event's timestamp and summary. 4. Confidential event titles enter the agent's context or execution logs. 5. Any party or system with access to those logs or conversati ...[truncated 630 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Use a calendar free/busy endpoint instead of retrieving complete event objects whenever the calendar API supports it. 2. If full event retrieval is unavoidable, process records locally and retain only normalized start and end timestamps. 3. Remove event summaries from command output: ```python for e in events: start = e.get("start", {}).get("dateTime") end = e.get("end", {}).get("dateTime") if start and end: busy.append((start, end)) ``` 4. Output only calculated candidate meeting slots, not the source events used to derive them. 5. Avoid placing raw calendar responses in agent prompts, persistent logs, or diagnostic output. 6. Require explicit user authorization before displaying event titles when titles are genuinely necessary. 7. Apply output redaction and short retention periods to logs produced by calendar operations. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:219
Finding
Destructive Rescheduling Deletes the Existing Event Before Replacement Is Secured<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 219–228 **Vulnerability Type**: Unsafe destructive calendar operation **Risk Level**: Medium ### Vulnerable Code ```bash # 1. Find the event GOG_ACCOUNT=owner@company.com gog calendar events primary \ --from "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ --to "$(date -u -d '+14 days' +%Y-%m-%dT%H:%M:%SZ)" # 2. Delete the old event (use ID from above output) GOG_ACCOUNT=owner@company.com gog calendar delete primary EVENT_ID # 3. Re-coordinate with the other PA and create a new event ``` ### Technical Analysis The documented rescheduling sequence permanently deletes the existing event before a replacement time has been coordinated or a replacement event has been successfully created. The workflow does not require the agent to verify the selected event's title, time, organizer, or attendees before deletion. It also does not require explicit owner confirmation immediately before the destructive operation. If the wrong event identifier is selected, the wrong meeting may be cancelled. If subsequent coordination or event creation fails, the original meeting has already been lost. The sequence also lacks a rollback mechanism. Although a deleted event may sometimes be recoverable through provider-specific trash or audit functionality, the skill neither verifies that recovery is available nor retains sufficient event data to reconstruct the deleted meeting. ### Attack Path 1. The agent queries upcoming events and obtains one or more event identifiers. 2. An incorrect, ambiguous, stale, or attacker-influenced `EVENT_ID` is selected. 3. The agent executes `gog calendar delete primary EVENT_ID` without presenting the full event identity for confirmation. 4. The calendar service deletes or cancels the selected event and may notify its attendees. 5. Re-coordination fails, is delayed, or produces no mutually acceptable time. 6. The original meeting remains cancelled, or an unrelated event is removed witho ...[truncated 700 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Verify the target event before any destructive action by displaying its identifier, title, start time, organizer, and attendees. 2. Require explicit owner confirmation immediately before deleting or cancelling the event. 3. Coordinate and confirm the replacement time before modifying the original meeting. 4. Prefer updating the existing event in place if the calendar API supports changing its start and end times. 5. If an in-place update is unavailable, create the replacement first and verify that creation succeeded before deleting the original. 6. Preserve the original event identifier and reconstructable metadata until the complete rescheduling workflow succeeds. 7. Check the exit status and response of every calendar command. Stop the workflow if replacement creation fails. 8. Add a rollback procedure that restores or recreates the original event when a later step fails. 9. Use exact event identifiers obtained from structured output rather than manually selecting identifiers from ambiguous human-readable results. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (3)

Vague Triggers

Medium
Confidence
95% confidence
Finding
The skill's invocation description is broad enough to trigger on many ordinary scheduling requests, which increases the chance it will activate in situations where the user did not intend calendar access, third-party outreach, or booking actions. Because this skill can read calendars and create invites, overbroad routing raises the risk of unintended data access and external actions.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The description authorizes sensitive actions including calendar reads, contacting another person or PA, creating invites, and later deletion/rescheduling behavior, but it does not prominently warn that the skill can access private scheduling data and perform external or state-changing operations. In practice, this can lead to users invoking the skill without understanding that it may expose availability details or send messages on their behalf.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The rescheduling flow instructs deletion of an existing calendar event as a routine step, but does not require a confirmation checkpoint or warn that this is destructive and may remove attendee coordination state. If triggered incorrectly or with the wrong event ID, it could cancel the wrong meeting and disrupt multiple parties.

Static analysis

No suspicious patterns detected.