Back to skill

Security audit

Ai Meeting Helper

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its meeting-notes purpose, but its installer and uninstaller can create or delete configuration and backup files outside the skill folder, which could affect unrelated credentials or data.

Review this skill before installing. It appears intended to generate meeting notes, but avoid running its install or uninstall scripts as-is unless the path bug is fixed so .env, backups, and logs stay inside the skill directory. Treat meeting recordings and transcripts as sensitive because they are sent to OpenAI services, and verify generated action items or decisions before relying on them.

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 (3)

T09 · Insecure Skill Coding Practices

Warning
Location
install.sh:3
Finding

Configuration is created and deleted outside the skill directory

Content
View full analysis
"$BASE_DIR/.env" << 'EOF' # OpenAI API Configuration OPENAI_API_KEY=your-api-key-here # 可选:使用代理 # HTTP_PROXY= # HTTPS_PROXY= EOF echo "⚠️ 请编辑 $BASE_DIR/.env 文件,填入你的 OPENAI_API_KEY" fi ``` ```bash # uninstall.sh SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BASE_DIR="$(dirname "$SCRIPT_DIR")" 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 "✅ 已删除配置和备份" fi ``` ```python # source/meeting_helper.py BASE_DIR = Path(__file__).parent.parent load_dotenv(BASE_DIR / ".env") ``` ### Technical Analysis The shell scripts are located in the project root. Consequently, `SCRIPT_DIR` is already the project directory, while `BASE_DIR="$(dirname "$SCRIPT_DIR")"` resolves to its parent. The installer therefore creates `.env`, `.ai_meeting_backup`, and `.ai_meeting_logs` in the parent workspace rather than inside the skill. The Python application calculates its base directory differently: the parent of `source/` is the project root. It attempts to load `.env` from the project itself, not from the parent directory used by the installer. This mismatch can cause configuration failure and may encourage users to place an API key in an unintended shared workspace file. The uninstaller uses the same incorrect shell path and can remove the parent directory's `.env` after a generic confirmation. That file may belong to another project or contain unrelated credentials ...[truncated 1257 chars]
Remediation
View remediation
&2; exit 1 ;; esac ``` 6. Use `--` before path operands passed to `rm` and other filesystem utilities. 7. Restrict the credential file to the current user after creation: ```bash chmod 600 "$BASE_DIR/.env" ``` ]]>

T08 · Insecure Dependencies

Warning
Location
install.sh:13
Finding

Runtime dependencies are installed without reproducible version and integrity controls

Content
View full analysis
=1.0.0", "python-dotenv>=1.0.0" ] ``` ```bash pip install openai python-dotenv ``` ### Technical Analysis The installation script asks pip to resolve the latest available versions of `openai` and `python-dotenv`. The metadata only specifies lower bounds, and the documentation likewise installs unconstrained versions. There is no lockfile, exact version pinning, package hash verification, upper version bound, or isolated virtual environment. As a result, the reviewed source does not determine which third-party code will be installed in the future. The package names shown in the project are legitimate and no dependency confusion or typosquatting is evident in the audited files. The risk arises from mutable dependency resolution: a compromised release, compromised package index, or incompatible future version could be installed and execute with the invoking user's permissions. ### Attack Path 1. A user runs `install.sh`. 2. `pip3` contacts its configured package index and resolves the current versions of both packages. 3. Because no exact versions or hashes are specified, artifacts that were not part of this audit may be selected. 4. Package installation hooks or subsequently imported package code execute under the invoking user's account. 5. A compromised dependency could read accessible data, alter user files, or misuse environment credentials, including `OPENAI_API_KEY`. Exploitation requires a compromised dependency, package index, package source, or local pip configuration. No such compromise is present in the audited project itself. ### Impact Assessment A malicious dependency would run with ...[truncated 518 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
source/meeting_helper.py:58
Finding

Untrusted transcript content is embedded directly into the LLM instruction

Content
View full analysis
Remediation
View remediation
\n" f"{transcript}\n" "" ), }, ] ``` 3. Use a strict JSON schema with required fields, type constraints, length limits, and rejection of unexpected properties. 4. Validate `participants`, `action_items`, `decisions`, and `todo` before formatting or saving them. 5. Mark generated notes as unverified and require human approval before publishing or treating action items and decisions as authoritative. 6. Consider including transcript citations or timestamps for important decisions and action items so users can verify generated claims. 7. Detect common instruction-injection patterns and warn the user when suspicious transcript content is encountered, while recognizing that pattern detection alone is not a complete defense. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
Findings (24)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared purpose is meeting transcription and summarization, but the detected behavior includes uninstall and cleanup flows that delete local files, backups, logs, and configuration data. That mismatch is dangerous because destructive behavior outside the stated purpose can surprise users, hide evidence, or cause data loss, especially if triggered during install/uninstall or maintenance actions.

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
84% confidence
Finding

The skill metadata does not declare any tool or permission scope, yet the documented installation and operation imply access to environment variables, shell execution, and file creation/output. This is dangerous because users and platforms cannot accurately assess or constrain what the skill may access, increasing the chance of over-privileged execution or unexpected side effects.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The description and examples consistently present the skill as a Chinese meeting-minutes generator, but there is no indication that users can choose output language or that the Chinese locale is an intentional region-specific limitation. This can violate language/locale policy if the skill implicitly forces a specific language without opt-in.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill sends meeting audio and derived text to external OpenAI services but does not prominently warn users that potentially sensitive meeting content leaves the local environment. This is dangerous because meetings often contain confidential business, personal, or regulated information, and users may unknowingly transmit it to a third party.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This shell script presents its status messages and usage guidance in Chinese only, including installation prompts and next-step instructions. That can violate a language/locale policy when users are not given an explicit language choice or opt-in and the locale constraint is not justified in the file.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest description and author metadata are entirely in Chinese, indicating a language-specific skill presentation with no accompanying opt-in, alternative locale, or justification that this skill is region-specific. The policy requires flagging language or locale constraints when the skill forces a specific language without user choice.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This function uploads raw audio to an external transcription API without any explicit user-facing notice or consent flow. Because meeting recordings often contain confidential business or personal data, silent off-system transmission creates a real privacy and compliance risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The full transcript is forwarded to an external LLM for summarization without warning users that conversation content will leave the local system. This expands exposure from audio to text and may disclose sensitive discussions, identities, decisions, and action items to a third-party service.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The summarization prompt passes the entire transcript downstream and instructs the model to produce structured notes from it without any minimization or redaction safeguards. In a meeting-helper context, this is more dangerous because recordings commonly contain sensitive operational, legal, HR, or customer information that may be unnecessarily exposed and reproduced in outputs.

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, log messages, prompts, and generated output formatting are written in Chinese, and the LLM prompt instructs generation of Chinese meeting minutes by default. There is no visible option for users to choose another language or locale, which can violate language/locale policy when not explicitly justified.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
72% confidence
Finding

For a skill described only as a meeting recording to notes generator, reading local environment configuration and requiring an API key is an extra capability that is not disclosed in the manifest text. While networked transcription/summarization may be expected from the implementation, local secret loading is a distinct capability that should be justified or declared.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The stated purpose is to convert meeting recordings into structured notes, which implies transcription and summarization. The optional backup feature copies and stores the source audio into a separate hidden directory, which is additional file-retention behavior not mentioned in the manifest description.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The script's natural-language output and confirmation prompt are entirely in Chinese, which imposes a specific language on users without any opt-in or documented justification. This matches the language/locale policy violation category because the file does not offer an alternative language or indicate that the skill is intended only for Chinese-speaking users.

Content

No source excerpt is available for this finding.