Back to skill

Security audit

Meeting Scheduler Pro

Security checks for vulnerabilities and agentic risk

Overview

This meeting assistant is mostly coherent, but it needs Review because it defaults to broad automatic processing of calendar, Gmail, web, and local meeting-history data before stronger opt-in and source-isolation controls are shown.

Install only if you are comfortable giving the workflow access to Google Calendar and, if enabled, Gmail context. Before use, consider turning off auto_prep, include_email_context, and include_web_search until you need them; verify the gog CLI source before installing it globally; review local meeting-notes regularly; and confirm exact recipients, event IDs, and message bodies before approving any calendar update, task sync, or email send.

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)

T08 · Insecure Dependencies

Warning
Location
scripts/setup.sh:17
Finding
Unpinned Global Installation of a Privileged Third-Party CLI<![CDATA[ ## Vulnerability Details **File Location**: `scripts/setup.sh:17-23`; additional installation guidance at `SKILL.md:525-526` **Vulnerability Type**: Unpinned and insufficiently verified third-party dependency **Risk Level**: Medium ### Vulnerable Code ```bash # Check gog CLI echo "Checking gog CLI..." if ! command -v gog &>/dev/null; then echo "❌ gog CLI not found." echo " Install it via OpenClaw or run: npm install -g gog" exit 1 fi ``` The same unsafe installation guidance appears in the Skill documentation: ```markdown ### "gog: command not found" Install gog: `npm install -g gog` or check your OpenClaw installation — gog should be bundled. ``` ### Technical Analysis The project recommends globally installing a package identified only by the short npm package name `gog`. It does not provide: - A verified publisher or official package URL. - A pinned, audited package version. - A package integrity digest or signature. - A lockfile or reproducible installation mechanism. - A validation step confirming the installed executable's identity. A global npm installation may run package lifecycle scripts with the installing user's permissions. If the package name resolves to an unintended, compromised, or malicious release, arbitrary code can execute during installation. The resulting executable is subsequently trusted to authenticate with Google and process calendar and Gmail data. This substantially increases the consequences of a supply-chain compromise. ### Attack Path 1. A user runs `scripts/setup.sh`. 2. The script reports that `gog` is missing and recommends `npm install -g gog`. 3. npm resolves a compromised, malicious, or unintended package release. 4. Package lifecycle scripts execute with the user's local privileges during installation. 5. The installed executable is later used for `gog auth login`. 6. The malicious executable gains an opportunity to access OAuth authorization data and calendar or Gmail content processed t ...[truncated 806 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Identify the dependency by its verified official publisher, registry page, and source repository. 2. Pin installation to a specifically audited version rather than installing the latest release: ```bash npm install -g verified-package-name@X.Y.Z ``` 3. Publish and verify an expected package integrity digest or signed release artifact. 4. Prefer a project-local, lockfile-controlled dependency over a global installation where technically possible. 5. Disable unnecessary npm lifecycle scripts during installation when compatible: ```bash npm install --ignore-scripts ``` 6. Document the expected executable path, version output, publisher, and checksum. 7. Validate the installed CLI before requesting Google authentication. 8. Recommend least-privilege Google OAuth scopes and avoid granting Gmail access unless the user explicitly enables email-context functionality. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:207
Finding
Untrusted Calendar, Email, Note, and Web Content Is Processed Without Prompt-Injection Isolation<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:207-215` and `SKILL.md:261-269` **Vulnerability Type**: Indirect prompt injection through attacker-influenced contextual data **Risk Level**: Medium ### Vulnerable Instructions ```markdown #### Data Sources for Prep The agent gathers prep context from available sources: 1. **Google Calendar** — meeting title, description, attendees, past meetings with same attendee 2. **Relationship Buddy** (if installed) — contact notes, interaction history, relationship score 3. **Web search** (if enabled) — recent news about the attendee's company, LinkedIn profile context 4. **Meeting history** — past agendas and follow-up notes stored locally 5. **Email context** (via gog) — recent email threads with the attendee Use `gog calendar events list --query "<name>"` for past meetings and `gog gmail search --query "from:<email>"` for recent emails. ``` The retrieved content is then used to generate externally writable material: ```markdown 2. **Review past meeting notes** with same attendee(s) 3. **Check for open action items** from previous meetings 4. **Allocate time proportionally** based on meeting duration 5. **Include standing items** (check-in, next steps) for recurring meetings 6. **Add open questions** from recent email threads or notes #### Sharing Agendas Add the agenda to the calendar event description via `gog calendar events update`, email it to attendees via `gog gmail send`, or both. Always ask the user: "Want me to add this to the invite, email it, or both?" ``` ### Technical Analysis Calendar titles and descriptions, incoming email bodies, local notes, and web search results can contain text controlled by external parties. The Skill directs an action-capable AI agent to consume this content but does not instruct it to: - Treat retrieved content strictly as untrusted data. - Ignore instructions embedded in calendar entries, emails, notes, or web pages. - Separate trusted Skill instruction ...[truncated 2857 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Add an explicit trust-boundary rule to the Skill: - Calendar data, email, notes, contact records, and web results are untrusted data. - The agent must never follow instructions contained in those sources. - Embedded tool requests, recipient changes, credential requests, or requests for private data must be ignored and reported. 2. Delimit retrieved content using structured data-only containers. For example: ```text UNTRUSTED_EMAIL_CONTENT_BEGIN ... UNTRUSTED_EMAIL_CONTENT_END ``` State that content inside the delimiters is evidence only and has no instructional authority. 3. Retrieve the minimum required information: - Prefer email metadata and short sanitized excerpts over complete bodies. - Limit calendar fields to those necessary for preparation. - Exclude quoted reply chains, signatures, tracking content, and hidden HTML. - Restrict web retrieval to reputable sources. 4. Require fresh confirmation for every external side effect. The confirmation screen should show: - Exact recipients. - Subject and complete message body. - Exact calendar event being changed. - Exact fields that will be added or modified. - Whether any content originated from email, calendar descriptions, notes, or web results. 5. Do not let retrieved content choose tools, recipients, files, or destinations. 6. Validate attendee email addresses against trusted calendar or contact records rather than model-generated suggestions. 7. Scan generated drafts for secrets, unrelated private context, hidden instructions, unexpected recipients, and external links before displaying them for approval. 8. Disable `include_email_context` and `include_web_search` by default. Enable them only after informed, explicit user consent. 9. Prevent persistent poisoning by sanitizing content before writing meeting notes and by distinguishing user-authored facts from model-inferred or externally retrieved material. 10. ...[truncated 172 chars]
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • 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
Findings (21)

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The README promotes access to Google Calendar data and downstream generation of agendas, follow-up tasks, and emails, but it does not clearly warn users that the skill may process sensitive scheduling metadata, contact details, meeting context, and derived content. In an agentic workflow, lack of explicit privacy and action-impact disclosure can cause users to authorize broad access or allow automated externalized actions without understanding the data exposure and modification risks.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The setup flow instructs the agent to collect and persist user configuration in `config/settings.json` but does not tell the user that data will be stored locally, what fields will be retained, or whether the file may contain sensitive scheduling metadata. This creates a privacy and consent issue, especially if the environment is shared, synced, or backed up automatically.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill recommends searching company news and pulling recent email threads with attendees for prep without a clear privacy disclosure or consent checkpoint. That can cause the agent to process sensitive communications and third-party personal data beyond what the user reasonably expects during basic scheduling setup.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
Automatically generating prep briefs for upcoming meetings means the agent may proactively inspect calendar details, attendee information, emails, and related context on an ongoing basis without a prominent warning during setup. This increases privacy risk because background processing can continue after initial configuration and may involve sensitive business or personal meeting data.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill explicitly describes automated meeting prep using Google Calendar, Gmail search, web search, and optional relationship-history sources, but it does not clearly warn users that sensitive calendar and email data may be accessed and processed automatically. This creates a real privacy and consent issue because users may enable or invoke the skill without understanding the scope of data access, increasing the chance of overcollection or unexpected exposure of personal or business information.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill states that follow-up notes and meeting history are saved locally and then reused for future prep, but it does not provide a clear warning about local retention of potentially sensitive meeting content, decisions, and action items. This is dangerous because users may not realize that confidential business notes and personal data persist on disk, where they could later be accessed by other local users, backups, or unrelated tools.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The spec explicitly states that meeting, contact, and follow-up metrics are persistently stored and historically retained, but it provides no user-facing notice, consent model, retention limit, or access controls. Because these metrics reveal work habits, relationship patterns, and potentially sensitive behavioral data, silent long-term collection increases privacy and compliance risk if the data is exposed, misused, or retained beyond user expectations.

Vague Triggers

Medium
Confidence
93% confidence
Finding
The skill is described as triggering when a calendar event ends, without clearly limiting activation to meetings the user explicitly wants processed. In this context, that can cause the agent to initiate follow-up workflows after unrelated or sensitive events, increasing the chance of unintended note capture, task creation, scheduling, or outbound communication based on the wrong context.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The skill description does not upfront disclose that it may create tasks, send email, save meeting notes locally, queue scheduling requests, and potentially use external integrations. This lack of transparency weakens informed consent and can lead users to authorize what seems like a passive summarization flow when it actually performs state-changing local and external actions involving potentially sensitive meeting content.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The on-demand trigger phrase "Prep me for my 10 AM" is underspecified and can cause the agent to act on ambiguous natural-language requests without clear confirmation of which meeting or which data sources should be used. In a skill that aggregates calendar, email, notes, and relationship data, broad triggering increases the chance of pulling sensitive context for the wrong meeting or surfacing private information unexpectedly.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill explicitly states that it uses Gmail, Google Calendar, meeting notes, web search, and relationship-history data, but it does not present a clear user-facing warning or consent boundary for accessing privacy-sensitive information. This creates a real risk of users receiving synthesized personal or business-sensitive data without understanding what sources were queried or whether all participants would expect that information to be used.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
This markdown file explains that the agent pulls calendar events and creates a meeting invite, which affects user data and an external attendee. The description does not include any warning or disclosure about accessing calendar contents, using attendee email addresses, or modifying the user's calendar.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
This shell script retrieves calendar events and may print them to stdout or write them to a file, which can expose sensitive meeting titles or details. While the header says it exports meetings, there is no explicit warning, confirmation, or privacy notice around the data access and export behavior.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The script header states it only validates prerequisites and initializes configuration, but it also scans for other installed skills and silently enables cross-skill integrations by modifying settings.json. This hidden behavior reduces transparency and can expand access to additional user data sources or automations without explicit user consent.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
# Set script permissions
echo ""
echo "Setting script permissions..."
chmod 700 "$SCRIPT_DIR/setup.sh"
chmod 700 "$SCRIPT_DIR/export-schedule.sh"
chmod 700 "$SCRIPT_DIR/weekly-agenda.sh"
echo "✅ Scripts set to chmod 700."
Confidence
80% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
# Set script permissions
echo ""
echo "Setting script permissions..."
chmod 700 "$SCRIPT_DIR/setup.sh"
chmod 700 "$SCRIPT_DIR/export-schedule.sh"
chmod 700 "$SCRIPT_DIR/weekly-agenda.sh"
echo "✅ Scripts set to chmod 700."
Confidence
80% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
# Set script permissions
echo ""
echo "Setting script permissions..."
chmod 700 "$SCRIPT_DIR/setup.sh"
chmod 700 "$SCRIPT_DIR/export-schedule.sh"
chmod 700 "$SCRIPT_DIR/weekly-agenda.sh"
echo "✅ Scripts set to chmod 700."
Confidence
80% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
# Set script permissions
echo ""
echo "Setting script permissions..."
chmod 700 "$SCRIPT_DIR/setup.sh"
chmod 700 "$SCRIPT_DIR/export-schedule.sh"
chmod 700 "$SCRIPT_DIR/weekly-agenda.sh"
echo "✅ Scripts set to chmod 700."
Confidence
80% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Excessive Permissions

Low
Category
Privilege Escalation
Content
## Recommendations

1. **Review gog permissions:** Ensure you've granted only the scopes you're comfortable with (Calendar read/write, Gmail read)
2. **Audit meeting notes regularly:** The `meeting-notes/` directory accumulates context over time. Review and prune as needed.
3. **Disable email context if sensitive:** If your email contains highly sensitive information, set `prep.include_email_context: false` in settings.json
4. **Disable web search if private:** If you don't want attendee names used in web searches, set `prep.include_web_search: false`
Confidence
80% confidence
Finding
Skill requests more permissions than appear necessary for its stated functionality. Review if elevated access is justified.

Context-Inappropriate Capability

Low
Confidence
80% confidence
Finding
The file header describes the script as a 'Weekly Agenda Generator' that generates a week-ahead meeting prep document, but the implementation also reads settings from a local JSON config to incorporate availability policy into the output. In addition, the generated report directs the agent to check a local 'meeting-notes/' directory for past interactions, which expands the skill toward broader contextual data access beyond simply listing calendar events for an agenda.

Missing User Warnings

Low
Confidence
88% confidence
Finding
This code performs a file write using a user-supplied path and truncates any existing file via shell redirection. While the script's usage comments show that a custom output path is supported, there is no confirmation prompt or explicit warning that an existing file may be overwritten.

Static analysis

No suspicious patterns detected.