Back to skill

Security audit

Elastolink Meeting Skills

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to be a real Elastolink meeting helper, but it handles bearer tokens and meeting exports in ways that could expose sensitive data or overwrite local configuration.

Review this before installing if your meetings contain confidential or personal information. Use only a minimally scoped Elastolink token, avoid production or long-lived credentials, assume the token may appear in command logs or stdout, and do not run export tools unless you are authorized to retrieve and store that meeting content.

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

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/set-token.cjs:9
Finding

Bearer Token Exposed Through Command-Line Arguments

Content
View full analysis
'); process.exit(1); } const envPath = path.join(__dirname, '..', '.env'); fs.writeFileSync(envPath, `ELASTOLINK_TOKEN=${token}\n`); ``` The documented workflow explicitly places the token in the command: ```markdown 1. Run `node D:\workspace\demo\elastolink\scripts\get-token.cjs` 2. If the output is `NO_TOKEN`, ask the user to enter a token and save it: - User enters a token in the format `sk-xxx` - Run `node D:\workspace\demo\elastolink\scripts\set-token.cjs ` ``` ### Technical Analysis The script receives the bearer token through `process.argv`. Command-line arguments may be exposed through operating-system process inspection, shell history, terminal telemetry, agent execution traces, audit systems, and command logging. This is especially relevant in an AI-agent workflow because the agent must interpolate the user-provided secret into a command string. That command may consequently be retained independently of the destination `.env` file. ### Attack Path 1. A user provides an Elastolink bearer token to the agent. 2. The agent invokes `set-token.cjs` with the token embedded in the command line. 3. The command or process arguments are captured by shell history, process-monitoring tools, agent logs, or execution telemetry. 4. A local user or log reader obtains the exposed token. 5. The attacker submits the token as an `Authorization: Bearer` credential to the configured MCP endpoint. 6. Subject to the token's server-side privileges, the attacker can access meeting-service operations available to that credential. ### Impact Assessment Successful exploitation discloses the Elastolink bearer token. An ...[truncated 330 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/get-token.cjs:9
Finding

Token Presence Check Prints the Complete Credential

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/set-token.cjs:15
Finding

Token File Is Written Without Explicit Access Restrictions and Existing Environment Data Is Truncated

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
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (17)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill instructs the agent to ask for a token and save it to a local .env file without an explicit warning that the credential will be persisted on disk. This can lead users to disclose secrets without informed consent, and local persistence increases the risk of later theft, accidental exposure, or reuse by other processes.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

The skill explicitly documents storing an access token in a project-local .env file, which is a credential storage pattern with material security risk. Even though the file reference is descriptive, normalizing plaintext secret storage in a known workspace path makes token discovery, accidental check-in, or local exfiltration more likely.

Content

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

text
D:\workspace\demo\elastolink\
├── .env                    # Token 存储(自动管理)
├── .session                # Session ID(自动管理)
├── scripts\
│   ├── mcp-call.cjs       # MCP 调用主脚本

Credential Access

High
Category
Privilege Escalation
Confidence
88% confidence
Finding

Accessing a .env file to extract ELASTOLINK_TOKEN is direct credential access, and in this file it is immediately paired with disclosure of the secret. In the context of an MCP/meeting assistant skill, this is more dangerous because such tooling may be invoked by other automation layers, increasing the chance that credentials are exposed beyond the local developer session.

Content

Scanner excerpt · scripts/get-token.cjs (reported line 9)May include surrounding context.

js
const fs = require('fs');
const path = require('path');

const envPath = path.join(__dirname, '..', '.env');

if (!fs.existsSync(envPath)) {
  console.log('NO_TOKEN');

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 · scripts/set-token.cjs (reported line 3)May include surrounding context.

js
#!/usr/bin/env node
/**
 * set-token.js - 保存 token 到 .env
 * 用法: node set-token.js <token>
 */
const fs = require('fs');

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

Building a path to a repository-local .env file is part of a workflow that stores a secret in plaintext on disk. In this skill context, the danger is elevated because MCP/server tooling often runs in developer environments where project files may be synced, shared, or committed, increasing exposure of the token.

Content

Scanner excerpt · scripts/set-token.cjs (reported line 15)May include surrounding context.

js
process.exit(1);
}

const envPath = path.join(__dirname, '..', '.env');
fs.writeFileSync(envPath, `ELASTOLINK_TOKEN=${token}\n`);
console.log('Token saved to .env');

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 · scripts/mcp-call.cjs (reported line 20)May include surrounding context.

js
const envPath = path.join(__dirname, '..', '.env');
fs.writeFileSync(envPath, `ELASTOLINK_TOKEN=${token}\n`);
console.log('Token saved to .env');

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 · scripts/set-token.cjs (reported line 17)May include surrounding context.

js
const envPath = path.join(__dirname, '..', '.env');
fs.writeFileSync(envPath, `ELASTOLINK_TOKEN=${token}\n`);
console.log('Token saved to .env');

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
72% confidence
Finding

The skill metadata and user-facing documentation are written to operate in Chinese context (魔簧会议助手, 会议, Chinese workflow examples) without stating that another language can be used. If organizational policy requires avoiding forced language selection without opt-in, this is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger description is very broad, covering generic terms like meeting, MCP tools, and project names, which can cause the skill to activate in contexts the user did not intend. Unintended invocation is risky here because the skill is designed to access local scripts, token management, and meeting data, increasing the chance of accidental credential prompts or sensitive data access.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill advertises automated export of meeting content to Markdown or Office documents but does not warn that these operations may create files containing sensitive meeting data. In a meeting assistant context, exports can include confidential business notes or personal information, so silent file creation meaningfully increases disclosure risk.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The skill documents sending authenticated requests, including session establishment and later meeting-content retrieval, to an external server at dev.ideasprite.com. In context, this means potentially sensitive meeting metadata and content are transmitted off-host to a remote environment, increasing confidentiality risk if users are unaware, the environment is non-production, or access controls are weak.

Content

Scanner excerpt · references/mcp-tools.md (reported line 19)May include surrounding context.

Initialize (Required First)

bash
curl -X POST https://dev.ideasprite.com/mcp \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation instructs users to enumerate historical meetings and retrieve detailed meeting content from a remote service without any privacy warning, consent check, or data-sensitivity guidance. Because meeting lists, transcripts, markdown, and office exports can contain sensitive business or personal information, this omission can lead to over-collection or disclosure of confidential data during normal use.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This script reads a token from a local .env file and prints it directly to stdout, creating a straightforward secret-disclosure path. Even if intended for developer convenience, emitting credentials to the console makes them easy to capture via terminal history, logs, parent processes, CI output, or other tooling, and the meeting-assistant/MCP context does not justify unrestricted token exfiltration.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script discloses a sensitive credential without any warning, authentication, or confirmation step before printing it. That lowers the barrier to accidental or unauthorized exposure, especially in automation contexts where stdout may be collected or forwarded without the user's awareness.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script persists a sensitive access token in plaintext to a project .env file with no permission hardening, no warning, and no validation that the file is excluded from source control. This creates a realistic risk of accidental disclosure through commits, backups, local malware, shared workspaces, or overly broad file permissions.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

Several tool names and descriptions are presented in Chinese, while the surrounding documentation is in English, and there is no indication that this language choice is optional or required for a specific region. This can violate a language/locale policy if the skill effectively forces one language without user opt-in or justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The script persists the MCP session identifier to ../.session using fs.writeFileSync, but there is no confirmation prompt, user-facing log, or explanatory warning that local state will be created or overwritten. Because this is a code file, silent file writes should be disclosed when they are not clearly communicated to the user.

Content

No source excerpt is available for this finding.