Back to skill

Security audit

Meeting Agenda

Security checks for vulnerabilities and agentic risk

Overview

This skill appears to provide meeting agenda templates and a small local task helper, with no evidence of exfiltration, privilege escalation, or deceptive execution.

Install only if you are comfortable with a Chinese-first meeting agenda helper and with any task text you add being stored locally in plaintext under the meeting-agenda data directory. Avoid entering sensitive meeting notes, credentials, customer secrets, or confidential action items unless you have reviewed the local storage location and permissions.

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

Note
Location
scripts/script.sh:5
Finding

Undocumented Plaintext Persistence of User-Supplied Task Data

Content
View full analysis

Vulnerability Details

File Location: scripts/script.sh:5-31
Vulnerability Type: Undisclosed plaintext storage and insufficient file-permission hardening
Risk Level: Low

Vulnerable Code

bash
DATA_DIR="${MEETING_AGENDA_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/meeting-agenda}"
DB="$DATA_DIR/data.log"
mkdir -p "$DATA_DIR"

show_help() {
    cat << EOF
meeting-agenda v$VERSION

Productivity and task management tool

Usage: meeting-agenda <command> [args]

Commands:
  add                  Add item
  list                 List items
  done                 Mark done
  priority             Set priority
  today                Today view
  week                 Week view
  remind               Set reminder
  stats                Statistics
  clear                Clear completed
  export               Export
  help                 Show this help
  version              Show version

Data: \$DATA_DIR
EOF
}

_log() { echo "$(date '+%m-%d %H:%M') $1: $2" >> "$DATA_DIR/history.log"; }

cmd_add() {
    echo "$(date +%Y-%m-%d) $*" >> "$DB"; echo "  Added: $*"
    _log "add" "${1:-}"
}

Technical Analysis

The script creates a persistent data directory under the user's home directory whenever it starts. The add command appends the complete user-supplied task text to data.log, while _log records command activity and the first supplied argument in history.log.

The project documentation describes agenda-generation commands, but this script instead implements an unrelated persistent task-management interface. Consequently, users may not reasonably expect meeting or task content to be retained on disk.

The script does not set a restrictive umask or explicitly assign permissions to the directory and log files. Their effective permissions therefore depend on the invoking environment. On systems with a permissive umask, other local accounts or p ...[truncated 1730 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove scripts/script.sh if persistent task management is not part of the documented skill functionality, or update the documentation to describe its behavior accurately.
  2. Avoid creating the data directory for help, version, and other operations that do not require persistence.
  3. Apply restrictive permissions before creating storage:
    bash
    umask 077
    mkdir -p -- "$DATA_DIR"
    chmod 700 -- "$DATA_DIR"
    
  4. Create data and history files with owner-only permissions and verify existing files before writing:
    bash
    touch -- "$DB" "$DATA_DIR/history.log"
    chmod 600 -- "$DB" "$DATA_DIR/history.log"
    
  5. Do not record user-supplied content in activity logs by default. If logging is necessary, make it opt-in and record only non-sensitive operational metadata.
  6. Clearly disclose what information is retained, where it is stored, and how long it remains.
  7. Implement functional deletion and retention controls that remove both task data and corresponding history entries.
  8. Validate that MEETING_AGENDA_DIR resolves to an intended user-controlled location before writing, and use -- for filesystem command operands where supported.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (11)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The description says the skill is used when you need 'meeting agenda capabilities' and includes broad trigger terms like '会议', '议程', and '纪要'. These terms are common in everyday work conversations and the file does not provide clear activation boundaries, exclusions, or negative examples to limit when the skill should trigger.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The prompt explicitly requires output in Chinese ("用中文") with no indication that the user can choose another language. This is a natural-language locale policy issue because it imposes a specific language by default rather than offering opt-in or documenting a justified locale constraint.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

This instruction mandates Chinese output ("用中文") and does not present any language preference or opt-in mechanism. That creates a language policy violation under the stated rules for natural-language policy concerns.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The one-on-one meeting prompt requires the response to be in Chinese without any user-selectable alternative. Because the file gives no opt-in or justification for the locale restriction, this is a policy issue.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The decision-meeting template explicitly instructs the assistant to respond in Chinese and does not offer a language choice. This is a locale restriction that should be optional or justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The meeting-minutes prompt hard-codes Chinese output ("用中文") with no opt-in or alternate locale path. Under the policy rules, forcing a specific language without user choice is a reportable violation.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The help text presents commands like done, priority, remind, week, and clear as real productivity features. However, their implementations at L047-L080 mostly echo messages and log usage, without updating data.log or maintaining any actual task state. This is an intent-code divergence because the user-facing documentation claims capabilities the code does not perform.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script logs command names and user-supplied arguments to a persistent history file without disclosure or consent. This can capture sensitive task names, reminders, priorities, or other meeting-related content, creating an additional privacy leak beyond the main agenda database and increasing the chance of long-term local exposure.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

Most of the instructional content and workflow guidance are presented in Chinese, with no statement that the user can choose their preferred language. That creates a natural-language locale constraint without opt-in, which can conflict with language-choice policy expectations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

Task contents are written in plaintext to a persistent file under a user-controlled data directory without any explicit notice. If users place sensitive meeting notes, action items, or credentials in tasks, that information may remain on disk and be exposed to other local processes, backups, or accidental sharing.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

This markdown file contains user-facing guidance entirely in Chinese, and there is no indication that the user can choose another language or that the skill is intentionally limited to a Chinese-speaking context. That creates a natural-language policy issue under the language/locale rule because it forces a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.