Back to skill

Security audit

blooming-elf 绽放精灵

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent plant-care assistant, but it persists household context, schedules, file paths, and document IDs in shared plaintext agent memory and uses broad document/knowledge-base integrations.

Install only if you are comfortable with a plant assistant keeping persistent records in shared plaintext agent memory and creating user-confirmed reminders. Prefer a dedicated local folder or tightly scoped IMA knowledge base, avoid storing unnecessary household details, and periodically review or delete the MEMORY.md configuration and any scheduled automations.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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 (2)

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:153
Finding

Overbroad Access to Shared Agent Memory

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 153-184
Vulnerability Type: T05: Unauthorized Access and Privilege Escalation
Risk Level: Medium

Vulnerable Code Snippet

markdown
## 用户配置

存储:`~/.workbuddy/MEMORY.md`,区块 `## 绿灵 配置`(真实用户)或 `## 虚拟用户X 绿灵 配置`(多用户时按名字匹配)。

```markdown
## 绿灵 配置
| 项目 | 值 |
|------|-----|
| 精灵名字 | 绿灵 |
| 城市 | {城市} |
| 气候类型 | {气候} |
| 知识库 ID (OpenAPI) | {kb_id} |
| 知识库 ID (MCP) | {kb_id_mcp} |
| 文件夹 ID | {folder_id} |
| 种植环境 | {室内/室外/阳台} |
| 窗户朝向 | {朝向} |
| 温湿度计 | {有/无} |
| 室内温度 | {值} |
| 室内湿度 | {值} |
| 空调/暖气 | {描述} |
| 提醒时间 | {时间} |
| 植物列表 | {兜底数据} |
| 上次浇水 | {YYYY-MM-DD} |
| 档案笔记 ID | {note_id} | # IMA 用户使用 |
| 日志笔记 ID | {log_note_id} | # IMA 用户使用 |
| 档案文件路径 | {path} | # 本地用户使用 |
| 日志文件路径 | {path} | # 本地用户使用 |
| 配置状态 | ✅ 已配置 |

读取逻辑

Skill 启动时读 MEMORY.md → 找到对应「## 绿灵 配置」区块 → 解析字段。 无配置 = 立即启动新手引导(强制规则 1)。

text

The same shared file is repeatedly accessed during normal operation at lines 15, 489, 519, and 596-606.

### Technical Analysis

The Skill is instructed to read the global `~/.workbuddy/MEMORY.md` file whenever it starts and during multiple routine workflows. That file can contain persistent state belonging to other Skills, users, or unrelated Agent functions. Reading the entire shared file violates least-privilege principles because plant tracking only requires access to the Skill's own configuration section.

Even though the documented parsing logic intends to locate the plant-care configuration block, access is granted at the file level. There is no isolation mechanism, scoped state API, access-control check, or guarantee that unrelated sections will be excluded from the Agent's context. Any sensitive information elsewhere in the file can consequently become available during Skill execution.

### Attack Path

1. A user activates the Skill or requests a routine plant-care operation.
2. The Skill reads t
...[truncated 1285 chars]
Remediation
View remediation

Remediation Suggestions

  1. Replace shared-memory storage with a dedicated file such as ~/.workbuddy/skills/blooming-elf/state.json.
  2. Apply restrictive filesystem permissions so only the current user and the Skill runtime can access the state.
  3. If shared memory is unavoidable, use a scoped API that returns only the blooming-elf namespace instead of reading the entire file.
  4. Validate the configuration schema and reject unexpected fields or embedded instructions.
  5. Keep retrieved state out of the conversational context unless a specific field is needed for the current operation.
  6. Avoid following instructions found inside stored data; treat all persisted values as untrusted data.
  7. Add explicit handling for multiple users so one user's section cannot be returned or modified during another user's session.

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:153
Finding

Plaintext Persistence of Personal Data and Storage Identifiers

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 153-180 and 417-418
Vulnerability Type: T09: Insecure Skill Coding Practices
Risk Level: Medium

Vulnerable Code Snippet

markdown
存储:`~/.workbuddy/MEMORY.md`,区块 `## 绿灵 配置`(真实用户)或 `## 虚拟用户X 绿灵 配置`(多用户时按名字匹配)。

```markdown
## 绿灵 配置
| 项目 | 值 |
|------|-----|
| 精灵名字 | 绿灵 |
| 城市 | {城市} |
| 气候类型 | {气候} |
| 知识库 ID (OpenAPI) | {kb_id} |
| 知识库 ID (MCP) | {kb_id_mcp} |
| 文件夹 ID | {folder_id} |
| 种植环境 | {室内/室外/阳台} |
| 窗户朝向 | {朝向} |
| 温湿度计 | {有/无} |
| 室内温度 | {值} |
| 室内湿度 | {值} |
| 空调/暖气 | {描述} |
| 提醒时间 | {时间} |
| 植物列表 | {兜底数据} |
| 上次浇水 | {YYYY-MM-DD} |
| 档案笔记 ID | {note_id} | # IMA 用户使用 |
| 日志笔记 ID | {log_note_id} | # IMA 用户使用 |
| 档案文件路径 | {path} | # 本地用户使用 |
| 日志文件路径 | {path} | # 本地用户使用 |
| 配置状态 | ✅ 已配置 |
text

```markdown
> ⚠️ **收尾必做**:把完整配置写入 MEMORY.md 的「## 绿灵 配置」区块(首次写入会告知用户),并把 `配置状态` 设为 `✅ 已配置`。**漏写这步,下次对话会重新触发强制规则 1(新手引导无限循环)**。至少写入:城市、气候类型、种植环境、窗户朝向、温湿度计、空调/暖气、提醒时间,以及档案/日志的 ID 或路径。

Technical Analysis

The Skill requires a complete configuration to be written in plaintext to shared Agent memory. The data includes household context, environmental measurements, reminder schedules, local filesystem paths, knowledge-base identifiers, folder identifiers, and remote document identifiers.

The design does not specify encryption, field-level access control, data minimization, expiration, secure deletion, or redaction. It also stores identifiers and personal context together in a file that other Agent components may be able to read. Although document IDs are not necessarily authentication credentials, they can disclose resource structure and may facilitate unauthorized access if another integration accepts them without adequate authorization checks.

Telling the user that the configuration is being written does not adequately mitigate the storage risk. The instructions require persistence as part of setup and ...[truncated 1751 chars]

Remediation
View remediation

Remediation Suggestions

  1. Store only fields strictly required for plant-care calculations; avoid retaining exact environmental and schedule information when coarse values are sufficient.
  2. Move configuration into a private, Skill-specific state store with restrictive permissions.
  3. Keep remote resource identifiers separate from ordinary conversational memory and protect them as sensitive metadata.
  4. Encrypt sensitive state at rest where supported, with keys managed outside the stored configuration.
  5. Obtain explicit, granular consent before persisting household information or uploading records to IMA.
  6. Provide users with commands to inspect, export, correct, and permanently delete all retained data.
  7. Define retention limits and automatically remove stale document IDs, paths, and environmental measurements.
  8. Redact paths and identifiers from logs, diagnostic messages, and normal responses.
  9. Verify authorization independently whenever a document identifier is used; possession of an identifier must never be treated as proof of access.
  10. Document whether other Skills or Agent components can read the state and enforce namespace isolation accordingly.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (6)

Tp2

High
Category
MCP Tool Poisoning
Confidence
85% confidence
Finding

Mixing characters from multiple Unicode scripts in a single identifier is a common technique to create visually ambiguous tool names.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The onboarding rule requires the agent to output a fixed Chinese greeting verbatim, including exact emoji and formatting, and the rest of the skill instructions are likewise Chinese-only. There is no opt-in or language-selection mechanism, so the skill imposes a specific language regardless of user preference.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The skill instructs the agent to enumerate knowledge bases, inspect folders, and associate documents with them, which is broader than necessary for a watering reminder assistant. This creates unnecessary access to potentially unrelated knowledge-base metadata and increases the chance of cross-context data exposure or unauthorized document placement.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill includes behavior to retrieve document URLs and disclose local archive/file locations to the user, which expands its capability beyond plant-care assistance into data-location exposure. If triggered in the wrong context, this can reveal sensitive storage metadata, temporary access links, or filesystem paths that help a user enumerate or access documents unrelated to the immediate task.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

Phrases such as '帮我看看', '记一下', '状态不好', and '快死了' are common colloquial expressions and are not sufficiently scoped to plant-care tasks. Although grouped by intent, the file does not consistently constrain them with clear contextual requirements, increasing the chance of unintended invocation.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger says the skill should guide onboarding on '首次对话或提及植物相关话题' when not configured, which is extremely broad and overlaps with ordinary conversation about plants. It does not define narrower invocation boundaries or exclusion examples, so the skill could activate unexpectedly in many benign contexts.

Content

No source excerpt is available for this finding.