Back to skill

Security audit

Ai Meeting Helper

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly does what it claims, but its install and uninstall scripts can create and delete configuration, backup, and log files outside the skill folder.

Review this skill before installing. It sends meeting audio and transcript text to OpenAI, so avoid confidential or regulated meetings unless that is acceptable for your environment. Do not run the uninstall cleanup unless you have checked the resolved paths, because it may delete .env, backup, or log directories in the parent workspace rather than only inside this skill.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (3)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
uninstall.sh:5
Finding

Shared Parent-Directory Data Can Be Deleted During Uninstallation

Content
View full analysis
"$BASE_DIR/.env" << 'EOF' # OpenAI API Configuration OPENAI_API_KEY=your-api-key-here # Optional proxy configuration # HTTP_PROXY= # HTTPS_PROXY= EOF fi # Create parent-level data directories mkdir -p "$BASE_DIR/.ai_meeting_backup" mkdir -p "$BASE_DIR/.ai_meeting_logs" ``` ```bash # uninstall.sh:5-16 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BASE_DIR="$(dirname "$SCRIPT_DIR")" read -p "Delete configuration files and backup data? (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then rm -f "$BASE_DIR/.env" rm -rf "$BASE_DIR/.ai_meeting_backup" rm -rf "$BASE_DIR/.ai_meeting_logs" fi ``` ### Technical Analysis `SCRIPT_DIR` resolves to the skill package directory, while `BASE_DIR` is explicitly assigned its parent. As a result, installation and removal operations are performed outside the package's own directory. The parent may be a shared workspace containing configuration and data used by other skills. The uninstaller does not verify ownership, check whether the files were created by this package, or confirm that the resolved deletion targets remain within the skill directory. The `rm -rf` operations therefore cross the package's expected filesystem boundary. There is also a path inconsistency: `source/meeting_helper.py` loads `.env` from the skill root, while `install.sh` creates it in the parent directory. Consequently, the installer may create or interact with an unrelated parent-level `.env` without configuring the runtime correctly. ### Attack Path 1. The skill is installed in a shared ski ...[truncated 974 chars]
Remediation
View remediation
&2; exit 1 ;; esac ``` 4. Track files created by the installer in a package-local manifest. The uninstaller should only remove files known to have been created by this installation. 5. Never delete a pre-existing `.env`. If a configuration file already exists, preserve it or create a package-specific configuration file instead. 6. Add automated tests that install and uninstall the package in a temporary shared workspace and verify that sibling and parent files remain unchanged. ]]>

T08 · Insecure Dependencies

Warning
Location
install.sh:16
Finding

Unpinned Dependencies Are Installed from a Mutable Package Source

Content
View full analysis
=1.0.0", "python-dotenv>=1.0.0" ] ``` ```bash # SKILL.md:127-130 pip install openai python-dotenv ``` ### Technical Analysis The installation process does not pin exact dependency versions or verify package hashes. The `>=1.0.0` constraints permit any future version, while the shell installer and documentation provide no version constraints at all. Dependency resolution therefore depends on the current state of the configured Python package index and all transitive dependencies at installation time. No lockfile, hash verification, isolated virtual environment, or trusted-index restriction is present. Although the package names shown are not typosquatted, mutable dependency resolution increases exposure to compromised releases, compromised transitive dependencies, hostile package-index configuration, and unexpected future compatibility or security changes. ### Attack Path 1. A user runs `install.sh` or follows the documented `pip install` command. 2. Pip connects to its configured package index and resolves the latest acceptable packages and transitive dependencies. 3. An upstream package, release, or configured index supplies compromised content. 4. Pip installs that content without checking project-approved hashes. 5. Malicious installation hooks or imported package code execute with the privileges of the user running the installation or application. ### Impact Assessment Successful supply-chain compromise could execute arbitrary Python code with the privileges of the installing user. Depending on those privileges, an attacker could read or mo ...[truncated 325 chars]
Remediation
View remediation
--hash=sha256: python-dotenv== --hash=sha256: ``` 4. Install dependencies in a dedicated virtual environment rather than the user's global Python environment. 5. Explicitly configure and document a trusted package index. Avoid inheriting unknown index URLs from an uncontrolled environment where feasible. 6. Add automated dependency scanning, lockfile update review, provenance checks, and periodic vulnerability monitoring. 7. Keep `install.sh`, `skill.json`, and `SKILL.md` synchronized so all installation methods enforce the same reviewed dependency policy. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
source/meeting_helper.py:55
Finding

Untrusted Meeting Transcripts Can Inject Instructions into the Summarization Prompt

Content
View full analysis
Remediation
View remediation
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
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
Findings (24)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the skill performs uninstall or cleanup actions that remove configuration, backups, or logs unrelated to meeting transcription, that behavior exceeds the stated purpose and can cause destructive local file modification. Hidden or undocumented deletion logic is dangerous because users may grant trust based on the benign description while the skill alters or removes unrelated data.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · install.sh (reported line 22)May include surrounding context.

sh
# 创建配置文件模板
if [ ! -f "$BASE_DIR/.env" ]; then
    echo "📝 创建 .env 配置文件..."
    cat > "$BASE_DIR/.env" << 'EOF'
# OpenAI API Configuration
OPENAI_API_KEY=your-api-key-here

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · install.sh (reported line 31)May include surrounding context.

sh
# 创建配置文件模板
if [ ! -f "$BASE_DIR/.env" ]; then
    echo "📝 创建 .env 配置文件..."
    cat > "$BASE_DIR/.env" << 'EOF'
# OpenAI API Configuration
OPENAI_API_KEY=your-api-key-here

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · install.sh (reported line 44)May include surrounding context.

sh
# 创建配置文件模板
if [ ! -f "$BASE_DIR/.env" ]; then
    echo "📝 创建 .env 配置文件..."
    cat > "$BASE_DIR/.env" << 'EOF'
# OpenAI API Configuration
OPENAI_API_KEY=your-api-key-here

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · source/meeting_helper.py (reported line 27)May include surrounding context.

python
# 创建配置文件模板
if [ ! -f "$BASE_DIR/.env" ]; then
    echo "📝 创建 .env 配置文件..."
    cat > "$BASE_DIR/.env" << 'EOF'
# OpenAI API Configuration
OPENAI_API_KEY=your-api-key-here

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · install.sh (reported line 21)May include surrounding context.

sh
read -p "是否删除配置文件和备份数据?(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    rm -f "$BASE_DIR/.env"
    rm -rf "$BASE_DIR/.ai_meeting_backup"
    rm -rf "$BASE_DIR/.ai_meeting_logs"
    echo "✅ 已删除配置和备份"

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · install.sh (reported line 23)May include surrounding context.

sh
read -p "是否删除配置文件和备份数据?(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    rm -f "$BASE_DIR/.env"
    rm -rf "$BASE_DIR/.ai_meeting_backup"
    rm -rf "$BASE_DIR/.ai_meeting_logs"
    echo "✅ 已删除配置和备份"

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · source/meeting_helper.py (reported line 18)May include surrounding context.

python
read -p "是否删除配置文件和备份数据?(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    rm -f "$BASE_DIR/.env"
    rm -rf "$BASE_DIR/.ai_meeting_backup"
    rm -rf "$BASE_DIR/.ai_meeting_logs"
    echo "✅ 已删除配置和备份"

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · uninstall.sh (reported line 14)May include surrounding context.

sh
read -p "是否删除配置文件和备份数据?(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    rm -f "$BASE_DIR/.env"
    rm -rf "$BASE_DIR/.ai_meeting_backup"
    rm -rf "$BASE_DIR/.ai_meeting_logs"
    echo "✅ 已删除配置和备份"

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
95% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · uninstall.sh (reported line 14)May include surrounding context.

sh
read -p "是否删除配置文件和备份数据?(y/N): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    rm -f "$BASE_DIR/.env"
    rm -rf "$BASE_DIR/.ai_meeting_backup"
    rm -rf "$BASE_DIR/.ai_meeting_logs"
    echo "✅ 已删除配置和备份"

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
95% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · uninstall.sh (reported line 15)May include surrounding context.

sh
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    rm -f "$BASE_DIR/.env"
    rm -rf "$BASE_DIR/.ai_meeting_backup"
    rm -rf "$BASE_DIR/.ai_meeting_logs"
    echo "✅ 已删除配置和备份"
fi

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
95% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · uninstall.sh (reported line 16)May include surrounding context.

sh
if [[ $REPLY =~ ^[Yy]$ ]]; then
    rm -f "$BASE_DIR/.env"
    rm -rf "$BASE_DIR/.ai_meeting_backup"
    rm -rf "$BASE_DIR/.ai_meeting_logs"
    echo "✅ 已删除配置和备份"
fi

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill documentation advertises capabilities that imply shell execution, environment variable access, and file writes, but it does not declare any explicit tool scope or permissions boundaries. This increases risk because an agent or reviewer cannot tell what operations are intended or allowed, making over-privileged execution and unsafe file or shell actions more likely.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
79% confidence
Finding

The description and all examples are written as a Chinese meeting-notes generator, suggesting the skill may be intended to operate in a fixed language/locale. There is no indication that users can choose output language or that the Chinese-only scope is an explicitly justified regional constraint.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Meeting audio and derived transcripts may contain sensitive business or personal information, and sending them to external OpenAI services creates a real privacy and compliance risk if users are not clearly warned. Omitting that disclosure can lead to unintentional exfiltration of confidential content to third-party processors.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

This manifest is in scope for vague-trigger review, and the description only states the capability of generating meeting notes from recordings without clarifying when the skill should or should not be invoked. There is no explicit trigger phrasing, narrow context, or exclusion examples to prevent unintended activation for broadly related meeting or audio tasks.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill name/metadata are general-purpose, but the user-facing description and author metadata are presented only in Chinese, which implies a fixed language/locale without opt-in or justification. The policy allows locale constraints only when user choice is offered or the restriction is clearly documented as region-specific.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The code sends potentially sensitive meeting audio to the transcription API and then sends transcript contents to a chat completion API without any explicit warning, consent gate, or sensitivity check. In this context, the skill handles high-value confidential content, so silent external disclosure materially increases privacy, compliance, and accidental data-sharing risk.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The manifest says the tool generates meeting minutes, but does not disclose that raw meeting audio is uploaded to OpenAI for transcription and transcript text is later sent to an LLM for summarization. Because meetings often contain confidential business or personal information, this undisclosed third-party transmission is a meaningful privacy and data-governance risk.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill's stated purpose is generating meeting minutes, but the code also creates backup copies of the original recordings on disk when --backup is enabled. For meeting audio, this is sensitive data retention beyond the declared behavior, increasing exposure if the host is shared, compromised, or subject to data handling requirements.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This shell script presents all natural-language output and the confirmation prompt only in Chinese, which can violate a language/locale policy when no user opt-in or alternative language is offered. The issue is visible in the echoed status messages and prompt text, and there is no indication that the skill is region-specific or intentionally limited to Chinese-speaking users.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

This shell script presents user-facing messages such as installation status and usage instructions entirely in Chinese. That imposes a specific language on users without opt-in, which matches the policy category for language or locale violations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

User-facing descriptions, prompts, logs, and generated output formatting are all in Chinese, and the system prompt instructs the model in Chinese without any opt-in or configurable language selection. This creates a language policy concern because the skill effectively forces a specific locale rather than allowing user choice.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

The manifest only describes generating meeting minutes from recordings. Loading secrets from .env and environment variables is an additional operational capability involving credential access, which is not mentioned as part of the skill's stated scope.

Content

No source excerpt is available for this finding.