Back to skill

Security audit

飞书每日早报

Security checks for vulnerabilities and agentic risk

Overview

This skill is a Feishu morning-news generator, but bundled scripts can directly send messages to a fixed Feishu recipient despite the instructions saying not to send messages directly.

Review before installing. Only use this skill if you intend it to send Feishu messages to the embedded open_id, or modify it so report generation and delivery are separate, the recipient is explicitly configured by the user, and sending requires confirmation.

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

Warning
Location
scripts/push.py:24
Finding

Undisclosed Direct Messaging to a Hard-Coded Feishu Recipient

Content
View full analysis

Vulnerability Details

File Location: scripts/push.py:24-31, scripts/push.sh:24-30, with contradictory documentation at SKILL.md:27-29
Vulnerability Type: Undisclosed external side effect and hard-coded message recipient
Risk Level: Medium

Vulnerable Code

The Python implementation sends the generated report directly to a fixed Feishu Open ID:

python
result = feishu_im_user_message(
    action='send',
    receive_id_type='open_id',
    receive_id='ou_b8bd6c6f4b69a9dda0dd16c2788c32ca',
    msg_type='text',
    content=json.dumps({"text": content})
)

print(f"Message sent successfully, message_id: {result['message_id']}")

The shell implementation independently sends the report to the same fixed recipient:

bash
# Save content to a temporary file
tmp_file=$(mktemp)
echo "$content" > "$tmp_file"

# Send using the OpenClaw message tool
openclaw message send --to "user:ou_b8bd6c6f4b69a9dda0dd16c2788c32ca" --file "$tmp_file" >> "$LOG_FILE" 2>&1

This behavior contradicts the documented generate-only requirement in SKILL.md:27-29, which states that the Skill must not directly send messages and that delivery is handled automatically by the OpenClaw cron system.

Technical Analysis

Both executable implementations invoke authenticated messaging functionality and select a recipient embedded in the package. The destination is not derived from the invoking user's request, validated configuration, or an interactive confirmation step. Although references/config.json:4 contains the same Open ID, the scripts do not load that configuration or verify that the recipient belongs to the current user.

Consequently, running either script in an environment with authenticated Feishu or OpenClaw messaging access causes an external side effect that is materially different from the documented behavior. The scripts use the operator's existing messaging authorization to deliver content ...[truncated 1791 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove direct messaging calls from both scripts if the intended behavior is content generation only. Return the formatted report to the caller and allow the documented cron delivery mechanism to handle transmission.
  2. If direct delivery is an intended feature, explicitly document that behavior and require the recipient to be supplied through a user-controlled argument or trusted configuration source.
  3. Remove the package-selected Open ID from scripts/push.py, scripts/push.sh, and the default configuration.
  4. Validate recipient identifiers and require explicit user confirmation before the first delivery or whenever the destination changes.
  5. Separate generation and delivery into distinct commands so users can invoke generation without granting messaging capability.
  6. Apply least privilege to the runtime identity, granting messaging access only when delivery is explicitly requested.
  7. Add automated tests that fail if generate-only execution invokes feishu_im_user_message or openclaw message send.
  8. Update SKILL.md so its documented behavior accurately matches the final implementation.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (12)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The Chinese-language finding describes the same core issue: the skill claims to do weather lookup and life-advice integration for briefing creation, but reportedly includes undeclared proactive Feishu sending to a fixed recipient. In this context, concealed outbound messaging is especially risky because ordinary users may trigger it with a benign request to 'generate a morning report' without realizing it can message someone else.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The Chinese-language finding describes the same core issue: the skill claims to do weather lookup and life-advice integration for briefing creation, but reportedly includes undeclared proactive Feishu sending to a fixed recipient. In this context, concealed outbound messaging is especially risky because ordinary users may trigger it with a benign request to 'generate a morning report' without realizing it can message someone else.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill declares no explicit tool restrictions even though its documented behavior requires outbound network access and static analysis detected shell-capable behavior. Missing scope boundaries increases the chance that the agent can invoke tools beyond what users expect, enabling unintended external requests or command execution if the skill is expanded or interpreted permissively.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

Broad trigger phrases like '创建早报' and '生成早报' overlap with normal conversational requests, making accidental activation more likely. In combination with network access and the reported hidden push behavior, ambiguous activation increases the chance of unintended external actions from routine user prompts.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script sends content to a hard-coded Feishu open_id, which creates an undisclosed outbound data flow to a fixed recipient. In a skill advertised as configuration/generation for a morning news workflow, this behavior is risky because running the script causes immediate message delivery to someone chosen by the author, enabling unauthorized notifications or covert exfiltration of fetched or future-expanded data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script fetches untrusted remote content and forwards it to a fixed messaging recipient without any user notice, approval step, or disclosure. This is dangerous because it enables silent outbound communication and makes the skill suitable for spam, covert notification, or relaying manipulated third-party content to an unsuspecting target.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The script performs an actual outbound send to a hard-coded Feishu recipient, while the skill metadata describes it as a configuration skill. This mismatch is security-relevant because users or reviewers may invoke or approve the skill expecting local setup behavior, but it instead exfiltrates generated content to an external destination without an explicit approval step in the script.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script sends fetched content to a specific external messaging recipient with no user-visible confirmation or consent mechanism in the file. In the context of an agent skill, silent outbound transmission is dangerous because it can disclose generated or fetched data to a fixed account unexpectedly, especially when users may believe they are only configuring a workflow.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The skill documents calls to an external news API and weather lookup but does not clearly warn users that prompt-derived data such as city names may be sent to third-party services. This is a transparency and privacy issue: low severity on its own, but more concerning when paired with hidden or undeclared external actions.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest claims the skill encapsulates a complete process including Shenzhen weather lookup and lifestyle-advice integration. This code only retrieves a single remote news feed and formats news plus a tip, creating a semantic gap between the declared functionality and the actual implementation in this file.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

Manifest 描述中提到“数据源获取、格式整理、深圳天气查询、生活建议整合”,暗示的是完整早报编排能力;而该脚本实际只从单一外部 URL 拉取通用新闻数据并格式化发送,没有体现描述中的深圳天气查询或生活建议整合。这里表现为技能宣称的功能范围与该实现文件中的实际行为不一致。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The script's comments, logs, and generated message content are written in Chinese, including the outbound report text, with no indication that language is configurable or selected by the user. Under the policy, forcing a specific language without user opt-in can be a locale/language policy violation.

Content

No source excerpt is available for this finding.