Back to skill

Security audit

ical

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed calendar CLI helper, but it normalizes forceful calendar changes and includes agent-skill installation behavior that users should review before installing.

Review this carefully before installing. Use a pinned, trusted release instead of `@latest` where possible, grant Calendar permissions only if you want the tool to read and modify your calendars, avoid allowing agents to run delete/update/import commands with `--force` unless you explicitly approved the exact target, and treat `ical skills install` as a change to your local agent behavior because it writes into agent skill directories.

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:14
Finding

Unpinned Third-Party CLI Installation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 14-18
Vulnerability Type: Unpinned and mutable third-party dependency installation
Risk Level: Medium

bash
## Installation

```bash
go install github.com/BRO3886/ical/cmd/ical@latest
text

### Technical Analysis

The installation command uses the mutable Go module selector `@latest`. Consequently, the source code downloaded, compiled, and installed at execution time may differ from the version that was reviewed during this audit. The project does not specify an immutable version or commit, verify a checksum or signature, or require inspection of the resolved dependency before execution.

Although no malicious behavior was identified in the audited documentation itself, this installation approach creates a supply-chain trust boundary. A compromise of the upstream repository, its release process, the maintainer account, or the dependency-resolution path could cause users to compile and install attacker-controlled code.

### Attack Path

1. An attacker compromises the upstream repository, release workflow, maintainer credentials, or another relevant supply-chain component.
2. The attacker publishes a malicious version that Go resolves through the `@latest` selector.
3. A user or AI agent follows the documented installation command.
4. Go retrieves and compiles the mutable upstream source.
5. The resulting binary is installed and later executed with the invoking user's permissions.
6. The malicious binary can abuse those permissions and any Calendar access granted to the application.

### Impact Assessment

Successful exploitation could result in arbitrary code execution under the invoking user's account. The malicious binary could access or modify files available to that user, manipulate Calendar data after receiving the required macOS permissions, or perform other actions within the user's privilege boundary.

The documentation does not request elevated administrative privileges, so pr
...[truncated 170 chars]
Remediation
View remediation

Remediation Suggestions

  1. Replace @latest with a reviewed, immutable semantic version:
    bash
    go install github.com/BRO3886/ical/cmd/ical@vX.Y.Z
    
  2. For stronger reproducibility, document the exact audited commit and provide a controlled source-build procedure.
  3. Publish expected source or release-artifact checksums and require integrity verification before installation.
  4. Document how maintainers authenticate releases, preferably using signed tags or signed release artifacts.
  5. Review the selected release and its transitive dependencies before updating the pinned version.
  6. Replace the placeholder clone URL in the source-build instructions with the exact repository URL and require checkout of a pinned tag or commit before building.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (13)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill documents ical calendars delete as deleting a calendar and all its events, but it does so without an adjacent, explicit warning about irreversible data loss. In an agent context, this increases the chance that a model or user invokes a highly destructive command without appreciating its scope, leading to bulk deletion of calendar data.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
87% confidence
Finding

The documentation explicitly instructs agents and scripts to use ical delete ... --force to skip confirmation, enabling autonomous deletion of calendar events without a user approval checkpoint. Combined with row-number targeting that depends on a cached previous listing, this can cause unintended or incorrect event deletion in automated workflows.

Content

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

ical list --from today --to "next week" # Shows #1, #2, #3... ical show 2 # Show details for row #2 ical update 3 --title "New title" # Update row #3 ical delete 1 --force # Delete row #1 (skip confirmation) ical delete 1 # Delete row #1 (prompts for confirmation)

text

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% 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 · references/commands.md (reported line 63)May include surrounding context.

md
| Flag      | Short | Description              | Default |
| --------- | ----- | ------------------------ | ------- |
| `--force` | `-f`  | Skip confirmation prompt | false   |

Aliases: `rm`, `remove`

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% 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 · references/commands.md (reported line 272)May include surrounding context.

md
| Flag      | Short | Description              | Default |
| --------- | ----- | ------------------------ | ------- |
| `--force` | `-f`  | Skip confirmation prompt | false   |

Aliases: `rm`, `remove`

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% 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 · references/commands.md (reported line 344)May include surrounding context.

md
| Flag      | Short | Description              | Default |
| --------- | ----- | ------------------------ | ------- |
| `--force` | `-f`  | Skip confirmation prompt | false   |

Aliases: `rm`, `remove`

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 · references/commands.md (reported line 251)May include surrounding context.

md
Event selection: same as `show` (no args = picker, number = row, string = event ID, `--id` = exact).

> `--id` and a positional argument are mutually exclusive — passing both is an error.
> `update` has **no** `--force` flag and requires no confirmation — changes apply immediately.

Aliases: `edit`

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

Documenting that event updates apply immediately with no confirmation increases the chance of unintended destructive modification, especially for automated agents or scripts operating on ambiguous selections. In this skill context, calendar data may include important scheduling, recurrence, and notification settings, so silent mistakes can cause real operational disruption.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% 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 · references/commands.md (reported line 262)May include surrounding context.

Delete an event. Asks for confirmation by default.

bash
ical delete 1 --force                              # Row number, skip confirmation
ical rm 2 --force                                  # Alias
ical delete                                        # Interactive picker
ical delete 3 --span future                        # Delete this and future occurrences

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 · references/commands.md (reported line 281)May include surrounding context.

md
Event selection: same as `show` (no args = picker, number = row, string = event ID, `--id` = exact).

> `--id` and a positional argument are mutually exclusive — passing both is an error.
> `update` does **not** have a `--force` flag — it applies changes immediately without confirmation.

Aliases: `rm`, `remove`

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The documentation introduces AI-agent skill installation and management behavior that is outside the stated calendar-management scope. That scope expansion matters because it enables writes into agent skill directories, increasing the attack surface and creating a path for persistence or unauthorized modification of agent behavior if users invoke those commands.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Agent skill installation/uninstallation is unjustified within a calendar-management skill and gives the tool the ability to modify other agents' local skill directories. In a security-sensitive environment, that creates an unnecessary capability for cross-tool persistence, privilege overreach, or supply-chain style abuse if the binary or distributed skill content is compromised.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

Writing into agent skill directories without an explicit warning obscures the user impact of the action and can lead to unintentional modification of other tooling. Although this is not direct code execution by itself, it changes agent behavior surfaces and can create persistence or trust-boundary confusion.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The manifest frames the skill as a terminal interface for Apple Calendar automation, but the command reference says ical version may check for newer versions and notes a background update check controlled by ICAL_NO_UPDATE_CHECK. Update-check functionality is not part of the described calendar-management purpose and represents additional behavior outside that scope.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.