Back to skill

Security audit

Gcalcli Calendar

Security checks for vulnerabilities and agentic risk

Overview

This calendar skill is purpose-aligned, but it gives the agent non-interactive authority to delete or edit real Google Calendar events and uses shell-style command templates with user-controlled text.

Install only if you are comfortable letting the agent directly modify an authenticated Google Calendar. Consider editing the skill to require explicit confirmation before every delete or edit, and run gcalcli through shell-free argument handling or strict escaping for event titles, queries, calendar names, and ICS content.

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)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:107
Finding

Shell Command Injection Through Interpolated Calendar Fields

Content
View full analysis
" today +180d ``` ```sh gcalcli --nocolor --calendar "" add --noprompt --title "" --when "<Start>" --duration <minutes> gcalcli --nocolor --calendar "<Cal>" add --noprompt --allday --title "<Title>" --when "<Date>" ``` ```sh echo 'BEGIN:VCALENDAR VERSION:2.0 BEGIN:VEVENT DTSTART;VALUE=DATE:20260308 SUMMARY:Event Title RRULE:FREQ=YEARLY TRANSP:TRANSPARENT END:VEVENT END:VCALENDAR' | gcalcli import --calendar "<Cal>" ``` ```sh gcalcli --nocolor delete --iamaexpert "<query>" <start> <end> ``` ### Technical Analysis The Skill instructs the Agent to substitute dynamic calendar names, event titles, search queries, dates, durations, and generated ICS fields directly into shell command strings. It does not require an argument-array process API, validate these values, or define a safe escaping procedure. Double quotes do not neutralize all shell syntax. For example, command substitutions such as `$(command)` and backtick expressions are still evaluated inside double-quoted strings. An embedded double quote can also terminate the intended argument and introduce shell operators. Similarly, the ICS example uses a single-quoted `echo` payload. An apostrophe in generated event content can terminate that quoted region and allow additional shell syntax. The vulnerability is exploitable when these canonical commands are executed through a shell with attacker-controlled or otherwise untrusted values. Potential sources include a malicious user request and calendar data subsequently reused in another command. ### Attack Path 1. An attacker supplies a crafted event title, query, or calendar name containing shell syntax, such as a command substitution or a quote followed by a shell operator. 2. The Agent inserts the value into one of the docu ...[truncated 1317 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
README.md:16
Finding

Unpinned Third-Party Dependency Installation

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (7)

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
95% confidence
Finding

The skill design intentionally skips confirmation for destructive actions, which is a genuine autonomous-decision vulnerability in a calendar-management context. Because the tool can delete or edit real calendar entries via authenticated gcalcli, an incorrect interpretation of user intent or an adversarial prompt could trigger irreversible modifications without an explicit user checkpoint.

Content

Scanner excerpt · README.md (reported line 23)May include surrounding context.

md
**This skill intentionally skips user confirmation for unambiguous destructive actions (delete/edit).** This is a deliberate UX decision, not an oversight. Here's why and how it's kept safe:

### Why skip confirmation?

This skill is designed for personal assistant use via messaging apps (Telegram, WhatsApp, etc.), where:
- The user has already stated their intent explicitly (e.g. "delete my dentist appointment on Thursday").

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
90% confidence
Finding

The README explicitly authorizes autonomous deletion of calendar events without a separate confirmation step when the agent judges the request to be unambiguous. This is risky because natural-language ambiguity, calendar search mismatches, or prompt/context confusion can cause unintended destructive actions against real user data even when post-action verification confirms the wrong event was deleted.

Content

Scanner excerpt · README.md (reported line 32)May include surrounding context.

md
### Safety guards in place

The skill does NOT blindly delete. All of these must hold before executing without confirmation:

1. **Explicit user request** — the user must have asked for the action in their message.
2. **Single unambiguous match** — exactly one event matches in a tight, bounded time window.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · README.md (reported line 36)May include surrounding context.

md
1. **Explicit user request** — the user must have asked for the action in their message.
2. **Single unambiguous match** — exactly one event matches in a tight, bounded time window.
3. **Post-action verification** — after every delete, the agent verifies via agenda that the event is actually gone. It never claims success without verification.
4. **Disambiguation for ambiguous cases** — if multiple events match, the agent always stops and asks the user to choose before proceeding.
5. **Overlap checks for creates** — before creating events, the agent checks for scheduling conflicts across all calendars and asks for confirmation if an overlap exists.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill explicitly authorizes immediate destructive actions for delete/edit flows without a user-facing confirmation when the agent deems the match unambiguous. Even with a 'tight time window' requirement, calendar matching can be wrong due to ambiguous titles, recurring events, timezone issues, or stale data, causing unintended irreversible deletion. In a calendar-management skill, this context makes the issue more dangerous because deletion is a core action and users may phrase requests casually.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
90% confidence
Finding

This is a true autonomous-decision risk: the skill tells the agent to 'skip confirmation' for cancel/delete/edit actions once it decides the request is unambiguous. That grants the agent authority to make destructive decisions on the user's behalf based on its own interpretation of calendar data, which can be mistaken. In this context, the danger is elevated because the target system contains personal scheduling data and the action can remove or alter important events.

Content

Scanner excerpt · SKILL.md (reported line 70)May include surrounding context.

md
This skill is designed for personal assistant use where the user expects fast, low-friction calendar management. The confirmation policy below is an intentional UX choice — see README.md for rationale and safety guards.

### Unambiguous actions: execute immediately
For cancel/delete/edit actions, skip confirmation when ALL of these hold:
- The user explicitly requested the action (e.g. "delete my dentist appointment").
- Exactly one event matches in a tight time window.
- The match is unambiguous (single clear result on an exact date, or user specified date+time).

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill directs use of gcalcli delete --iamaexpert, which suppresses interactive safeguards for destructive actions, but does not require a clear user warning about irreversible effects. Post-delete verification only checks whether the event disappeared; it does not protect against deleting the wrong event, so an erroneous match can still cause permanent loss. Because this skill is specifically built for fast calendar modification, the reduced friction increases operational risk.

Content

No source excerpt is available for this finding.

Scope Creep

Low
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

Scanner excerpt · SKILL.md (reported line 30)May include surrounding context.

md
- Don't quote event titles unless needed to disambiguate.

### Calendar scope
- Trust gcalcli config (default/ignore calendars). Don't broaden scope unless user asks "across all calendars" or results are clearly wrong.

### Agenda (today-only by default)
- If user asks "agenda" without a period, return today only.

Static analysis

No suspicious patterns detected.