Back to skill

Security audit

meeting-notetaker

Security checks for vulnerabilities and agentic risk

Overview

This meeting-notes skill is related to its stated purpose, but it reaches into raw calendar credentials and can change monday.com data with under-scoped controls.

Review this before installing. It should only be used if you are comfortable with the agent accessing the owner's Google Calendar, attendee lists, notetaker history, and monday.com write actions. A safer version would remove shell sourcing, use platform-managed scoped credentials, narrow the trigger phrases, and require explicit board selection and confirmation before creating items.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:10
Finding

Arbitrary Shell Execution Through Sourced Context File

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 10–13
Vulnerability Type: Unsafe shell sourcing of an external configuration file
Risk Level: High

Complete Code Snippet:

bash
CONTEXT_FILE="/opt/ocana/openclaw/workspace/skills/meeting-notetaker/.context"
[ -f "$CONTEXT_FILE" ] && source "$CONTEXT_FILE"
# Then use: $OWNER_EMAIL, $CALENDAR_ID, $GOG_CREDS, etc.

Technical Analysis

The source shell built-in executes the contents of .context in the current shell rather than treating the file as passive configuration data. The file resides outside the reviewed project, and the Skill does not require verification of its ownership, permissions, integrity, or syntax before execution.

Consequently, any shell construct placed in .context—including command substitutions, redirections, function definitions, or direct commands—will run with the privileges and environment of the process invoking the Skill. Merely checking that the file exists does not establish that it is trusted.

Attack Path

  1. An attacker or compromised process obtains write access to /opt/ocana/openclaw/workspace/skills/meeting-notetaker/.context.
  2. The attacker inserts arbitrary shell commands into that file, such as commands that read credentials or transmit sensitive data.
  3. A user invokes the Meeting Notetaker Skill.
  4. The initialization instructions execute source "$CONTEXT_FILE".
  5. The injected commands execute in the current shell with the Agent's effective privileges.

Exploitation depends on an attacker being able to modify the external context file; its permissions and ownership were not available for review.

Impact Assessment

Successful exploitation can provide arbitrary command execution with the invoking Agent's effective privileges. The resulting scope may include access to environment variables, local files readable by the Agent, monday.com or Google credentials available to the process, ...[truncated 226 chars]

Remediation
View remediation

Remediation Suggestions

  1. Do not use source to load configuration data.
  2. Store configuration in a non-executable format such as JSON or a strictly defined environment file.
  3. Parse the file with a non-shell parser and allowlist only required keys, such as OWNER_EMAIL, CALENDAR_ID, and GOG_CREDS.
  4. Reject unknown keys, shell metacharacters, command substitutions, malformed values, and duplicate entries.
  5. Before reading the file, verify that it is a regular file, is owned by the expected account, is not a symbolic link, and is not writable by group or other users.
  6. Minimize loaded values; replace the open-ended reference to “etc.” with an explicit list of required fields.
  7. Prefer a dedicated secrets or credential provider for sensitive values, and expose only the specific credentials required for the requested operation.
  8. Run the Skill under a restricted service account with narrowly scoped filesystem and network permissions to reduce impact if configuration integrity is compromised.
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (6)

Intent-Code Divergence

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill claims it only covers monday.com Notetaker meetings, but later instructs direct access to Google Calendar. This mismatch is dangerous because it obscures the true permission boundary of the skill, making reviewers and users more likely to authorize or trigger it without understanding that calendar data will also be accessed.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
99% confidence
Finding

The skill explicitly references a filesystem path to credentials.json and instructs direct use of owner credentials for Google Calendar access. Hardwiring credential locations and encouraging direct credential use materially increases the risk of secret exposure, privilege misuse, and unauthorized access to sensitive calendar contents for the owner account.

Content

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

md
When triggered by "next meeting" or similar:

1. **Fetch calendar** using direct Google Calendar API (NOT `gog` CLI — broken on server). Use credentials from `/opt/ocana/openclaw/.gog/credentials.json` account `owner`. See owner-briefing skill for the full auth flow.
2. **Find the next upcoming event** — first event that starts after now
3. **Extract participants** from the calendar event (attendees list)
4. **Search notetaker** for past meetings with the same participants or title keywords:

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill includes state-changing behavior to create monday.com board items, which exceeds a read-only note retrieval function. Mixing retrieval and write actions in one skill raises the risk of unintended task creation, abuse of inferred action items, and permission creep from passive data access into active modification of business systems.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The skill instructs sourcing a local context file that exposes operational variables such as owner identity, calendar ID, and credentials, even though the primary function is meeting-note retrieval. Loading broad local context into the skill unnecessarily expands the available secret and identity surface, increasing the chance of credential leakage or unauthorized cross-tool access if the skill is triggered or modified.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

Broad trigger phrases like 'next meeting' and 'what do I have next' can cause the skill to activate for general calendar-assistant requests outside its stated purpose. In this skill's context, overbroad activation is more dangerous because the skill has access to additional systems and actions, so accidental invocation could expose calendar data or initiate workflows the user did not intend.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill extends from meeting-note retrieval into direct Google Calendar access and participant correlation for meeting-prep generation, which broadens both data access and behavioral scope. This creates a privilege-expansion path where a note-summary request can disclose future meetings, attendee lists, and related historical context that may be more sensitive than the original user request warrants.

Content

No source excerpt is available for this finding.