Back to skill

Security audit

schedule-feishu

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Feishu schedule helper, but users should understand it stores Feishu document metadata locally and automatically deletes old schedule entries.

Install only if you are comfortable granting Feishu document read/write and reminder-message access for this schedule workflow. Check the retention setting before use because old schedule entries are deleted automatically, and avoid sharing or committing config.json after it contains your Feishu document URL/token and chat identifier.

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
SKILL.md:26
Finding
Plaintext Storage of Feishu Document Access Metadata and User Identifier<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:26-34` **Corroborating Location**: `config.json:1-6` **Vulnerability Type**: Plaintext sensitive-data storage **Risk Level**: Medium The Skill instructs the agent to persist a Feishu document token, full document URL, and Feishu user identifier in an ordinary plaintext configuration file. ### Vulnerable Code From `SKILL.md:26-34`: ```markdown ## 配置文件(自动生成) 所有配置项保存在技能目录下的`config.json`文件中,无需硬编码到其他文件: ```json { "schedule_doc_url": "飞书文档完整URL", "doc_token": "飞书文档token", "max_retention_days": 7, // 最大保留天数,默认7 "chatId": "ou_xxxxxxxxxxxxxxxx" // 飞书用户ID,从飞书对话中自动获取 } ``` ``` The corresponding plaintext schema appears in `config.json:1-6`: ```json { "schedule_doc_url": "", "doc_token": "", "max_retention_days": 7, "chat_id": "" } ``` The values included in the audited artifact are currently empty, so no active credential or user identifier was exposed by this copy of the project. ### Technical Analysis The design places potentially sensitive access metadata directly in `config.json` under the Skill directory. The documentation does not require restrictive file permissions, encryption at rest, a protected secret store, access isolation, log redaction, or exclusion from source control and backups. The `doc_token` may identify or authorize operations against a Feishu document, depending on the surrounding Feishu API and application authorization model. The full document URL may also expose a directly usable document reference. The `chat_id` or equivalent user identifier is persistent account metadata that can facilitate user targeting if exposed. Any local process, installed Skill, workspace user, backup service, or artifact collection process with read access to the Skill directory may be able to retrieve these values after initialization. Actual document access would remain subject to Feishu's authentication and document-permission enforcement; the token alone is not proven to byp ...[truncated 1584 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Store document credentials and access tokens in the platform's protected secret store rather than in the Skill directory. 2. Keep only a non-sensitive secret reference or opaque configuration key in `config.json`. 3. If local file storage is unavoidable: - Apply owner-only file permissions, such as mode `0600`. - Ensure the containing directory is accessible only to the service account. - Encrypt sensitive values at rest with keys held outside the project directory. 4. Add `config.json` or a generated secrets variant to source-control ignore rules, backup exclusions, support-bundle exclusions, and log-redaction policies. 5. Separate non-sensitive settings such as `max_retention_days` from sensitive document and account metadata. 6. Avoid storing the full document URL when a protected internal reference is sufficient. 7. Validate that a user identifier extracted from message context belongs to the expected authenticated Feishu tenant and account before replacing the configured identifier. 8. Apply least-privilege Feishu permissions so the integration can access only the intended schedule document and messaging recipient. 9. Support token rotation and securely delete superseded tokens. 10. Document the sensitivity of each field and fail safely when secure storage is unavailable. ]]>
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
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (3)

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The manifest description and all user-facing instructions/messages in SKILL.md are written exclusively in Chinese, including fixed confirmation and reminder message examples. There is no indication that users may choose another language or that the skill is intentionally limited to a Chinese-speaking or region-specific context, which can violate language/locale policy requirements.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The skill advertises automatic cleanup of historical schedule data but does not present this destructive behavior as a prominent warning or require clear opt-in acknowledgment. Because schedules may contain important records, silent deletion can cause loss of user data and undermine availability and auditability, especially when the retention window defaults to only seven days.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill states it will automatically extract the user's Feishu chat ID from message context and persist it to config.json without clear, prominent consent or notice at the point of collection. Persisting an identifier tied to a user account increases privacy risk and can enable unintended tracking, correlation, or misuse if the config file is exposed or reused across contexts.

Static analysis

No suspicious patterns detected.