Back to skill

Security audit

feishu-meeting-scheduler

Security checks for vulnerabilities and agentic risk

Overview

The skill is a real Feishu scheduling service, but it exposes powerful calendar and messaging actions through insufficiently scoped public APIs.

Review before installing. This should only run behind strong authentication or a private gateway, with authorization checks for who can query or message each Feishu user. Configure the Feishu encrypt key, restrict `OPENCLAW_WAKE_ENDPOINT` with `ALLOWED_WAKE_DOMAINS`, minimize Feishu app scopes, redact logs, document consent and retention for calendar/vote data, and add a reviewed lockfile for deployment.

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

T05 · Unauthorized Access and Privilege Escalation

Error
Location
index.js:25
Finding

Privileged Feishu Scheduling APIs Lack Caller Authentication and Authorization

Content
View full analysis
{ const { userIds, startTimeIso, endTimeIso, durationMinutes } = req.body; // 参数验证 if (!userIds || !Array.isArray(userIds) || userIds.length === 0) { return res.status(400).json({ error: 'userIds 必须是非空数组' }); } if (!startTimeIso || !endTimeIso || !durationMinutes) { return res.status(400).json({ error: '缺少 startTimeIso / endTimeIso / durationMinutes' }); } if (typeof durationMinutes !== 'number' || durationMinutes <= 0) { return res.status(400).json({ error: 'durationMinutes 必须是正整数' }); } try { const timeOptions = await feishu.getCommonFreeTime( userIds, startTimeIso, endTimeIso, durationMinutes ); res.json({ success: true, message: timeOptions.length > 0 ? '找到了以下空闲时段' : '在给定时间内所有人无符合要求的共同空闲时段', data: { options: timeOptions } }); } catch (error) { console.error('[API Error] calc-free-time:', error); res.status(500).json({ error: error.message }); } }); ``` ```js app.post('/api/claw/dispatch-cards', async (req, res) => { const { meetingTopic, userIds, timeSlots, agentMessage } = req.body; if (!meetingTopic || typeof meetingTopic !== 'string') { return res.status(400).json({ error: 'meetingTopic 不能为空' }); } if (!userIds || !Array.isArray(userIds) || userIds.length === 0) { return res.status(400).json({ error: 'userIds 必须是非空数组' }); } if (!timeSlots || !Array.isArray(timeSlots) || timeSlots.length === 0) { return res.status(400).json({ error: 'timeSlots 必须是非空数组' }); } if (!agentMessage || typeof agentMessage !== 'string') { return res.status(400).json({ error: 'agentMessage 不能为空' }); } try { const sessionId = 'ses_' + c ...[truncated 3008 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
index.js:110
Finding

Feishu Webhook Requests Can Be Replayed

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
bitableStore.js:103
Finding

Sensitive Scheduling and Bitable Identifiers Are Written to Application Logs

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
package.json:15
Finding

Dependency Installation Is Not Reproducible Because No Lockfile Is Present

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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (37)

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 · README.md (reported line 31)May include surrounding context.

md
复制环境变量模板,并填入你自己飞书应用的 ID 和 Secret:

\`\`\`bash
cp .env.example .env
\`\`\`

然后在项目根目录执行:

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The skill is presented as a generic event-driven scheduling assistant, but the documentation reveals exposed HTTP endpoints, webhook-triggered execution, outbound wake-up callbacks to an external endpoint, and state storage in Feishu Bitable. Undisclosed triggers and external network egress materially change the trust model: they can cause the agent to process external input and transmit sensitive coordination state outside the originally described boundary.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The skill is presented as a generic event-driven scheduling assistant, but the documentation reveals exposed HTTP endpoints, webhook-triggered execution, outbound wake-up callbacks to an external endpoint, and state storage in Feishu Bitable. Undisclosed triggers and external network egress materially change the trust model: they can cause the agent to process external input and transmit sensitive coordination state outside the originally described boundary.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- **`feishuService.js`**: 包含所有包含 Feishu Open API 网关交互的核心认证 (TenantAccessToken Cache)、区间合并算法、卡片 Message Card DOM 构建和真实创建日历日程模块 (`createMeeting`)。

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

The skill is designed to query multiple users' calendar free/busy data and send interactive scheduling cards, but the documentation provides no explicit consent, notice, or access-control expectations. In a workplace scheduling context, this can normalize collection and redistribution of attendance-availability data without clearly defined authorization boundaries, increasing privacy and misuse risk.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The README says the Feishu callback lets the service '实现真正的建日程功能' when a manager clicks a time slot, implying actual scheduling behavior consistent with the manifest's '智能排期与日程协调助手' description. However, L78 explicitly states the current callback only prints the selected time and does not call any Create Calendar Event API, so the implemented behavior falls short of the claimed scheduling action.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The manifest does not declare tool scope or permissions even though the skill clearly relies on network and environment-backed capabilities. That weakens security boundaries and informed consent: an agent or reviewer cannot accurately tell what external access the skill will exercise, increasing the chance of overprivileged or unexpected execution.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill collects and redistributes participant availability, voting choices, and non-response status during scheduling conflicts, but the description does not warn users about that data handling. In a scheduling context this is sensitive workplace metadata that can reveal habits, relationships, and internal coordination details, especially when broadcast back to multiple participants or sent through webhook wake-up flows.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest describes coordination assistance, but the documented implementation includes actual meeting creation. That is a meaningful privilege escalation from advisory behavior to taking side-effecting actions in users' calendars, which can be abused to create unauthorized events, spam participants, or alter records without clear disclosure.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest presents the skill name and description only in Chinese, indicating a fixed language/locale experience without offering a user choice or documenting a justified region-specific constraint. Under the policy, forcing a specific language without opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The code performs a destructive DELETE request to remove a bitable app and only logs success or failure internally. In this file there is no confirmation prompt or explicit user-facing disclosure warninging that session completion, conflict resolution, or TTL cleanup will permanently delete the associated table.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The entire skill content is written as if responses and reporting should be in Chinese, with no indication that the user can choose another language. Per the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is clearly justified.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The markdown describes creating and modifying project files and even references tool actions like creating repaired versions, but it does not warn the user that file changes may occur or clearly separate analysis from modification. In an agent skill context, this can mislead users into approving or triggering unintended code changes, especially when the content mixes review, planning, and execution-oriented language.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The method queries Feishu free/busy information for multiple users, which reveals participants' schedule availability. Although the file performs the API call, there is no confirmation prompt, user-facing notice, or explanatory comment warning that user calendar data will be fetched and transmitted to an external service.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code explicitly formats dates and times with 'zh-CN' and 'Asia/Shanghai', and similar hard-coded locale behavior also appears in meeting confirmation text. This forces a specific language/locale presentation without user opt-in, which matches the policy violation criteria.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The confirmation text is always rendered using 'zh-CN' locale and 'Asia/Shanghai' timezone. This imposes a fixed language and regional format on all users rather than offering a choice or documenting a valid region-specific limitation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The natural-language comments and user-facing behavior describe the skill as operating entirely in Chinese, and later responses/messages are also hardcoded in Chinese. There is no indication that users can opt into another language or locale, which can violate language-choice policy when the skill is used in a broader context.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest frames this skill as a Feishu-based one-sentence scheduling and calendar coordination assistant. In addition to scheduling operations, the code performs an outbound POST to an arbitrary configured endpoint to wake another agent and hand off conflict-resolution work, which is a broader orchestration/integration behavior not reflected in the description.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

When a scheduling conflict occurs, the skill sends session metadata and a generated instruction message to an externally configured endpoint. For a Feishu scheduling assistant, interacting with Feishu APIs is expected, but posting to an unrelated arbitrary endpoint is a separate capability that is not clearly justified by the manifest's stated purpose.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill description is broad and frames the API as generally available to an LLM/agent, but it does not define clear preconditions such as required user authorization, allowed initiators, or when calendar coordination is permitted. In a scheduling skill that can read multiple users' calendars and trigger outbound messaging, vague invocation boundaries increase the risk of overreach, unintended activation, and privacy-impacting actions without sufficiently explicit user intent.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This endpoint reads calendar availability for multiple users based on their Feishu user IDs, but the specification does not disclose consent, authorization scope, or what data is accessed and returned. In this context, even if only free/busy data is intended, querying multiple employees' schedules can reveal sensitive behavioral and organizational information and can be abused for surveillance or unauthorized coordination.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This endpoint sends messages to other users and states that the dispatch is immediately persisted and tracked, yet the skill description does not require explicit user confirmation or clearly warn about external communication and retention. In an agent setting, that creates a meaningful risk of unintended outreach, spam, social engineering amplification, and privacy issues from storing recipient interactions or session-linked behavior.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest makes ALLOWED_WAKE_DOMAINS optional, which means the wake endpoint may accept activation from any domain unless the runtime code imposes a stricter default. For an event-driven scheduling skill that can trigger agent wakeups, an unrestricted origin scope increases the chance of unauthorized or unexpected external activation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The README content is entirely in Chinese and does not indicate that the skill is intentionally limited to Chinese-speaking users or a specific regional deployment. Under the language/locale policy, forcing a single language without opt-in or justification is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The manifest presents a Feishu scheduling and calendar coordination assistant, but the architecture description adds a local file-system based persistence layer for transaction/session records. Persistent filesystem storage is not mentioned in the manifest and is not an obvious user-facing capability from the stated purpose alone.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
feishuService.js:188

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
index.js:8