Back to skill

Security audit

Bloom Tutor

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent Chinese tutoring workflow, but it asks for broad workspace reading and deliberately hidden note persistence that users should review before installing.

Install only if you want a Chinese-language tutor that manages files in the workspace. Keep unrelated private Markdown outside the workspace root or use a dedicated folder, and be aware that learning notes and progress are persisted locally, including an intermediate pre-summary file that the skill tells the agent not to discuss.

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

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
references/logging.md:11
Finding

Unrestricted Workspace-Wide Discovery and Reading of Markdown Documents

Content
View full analysis

Vulnerability Details

File Location: references/logging.md:11-15; related requirements also appear in SKILL.md:24 and SKILL.md:41
Vulnerability Type: T05: Unauthorized Access and Privilege Escalation
Risk Level: Medium

Vulnerable Instruction

markdown
1. Read the log baseline: read the root-level `learning-log.jsonl` and obtain the
   `date` and `courses` from its final record.
2. Scan all course folders: list every subdirectory under the root, excluding
   hidden directories and `.templates`. For each directory:
   - List all `XX.md` files, excluding `syllabus.md` and `summary.md`.
   - Compare them with the baseline to identify documents added since the last record.
   - Read the new documents and extract three to five core concepts or knowledge points.

Related global access requirements direct the agent to read the root-level learning log at the beginning of every interaction and to read all Markdown files associated with a selected course.

Technical Analysis

The logging workflow assumes that every visible subdirectory beneath the workspace root is a course directory. It then enumerates files matching the broad XX.md naming convention and reads their contents without requiring:

  • An explicit registry or allowlist of approved course directories.
  • A trusted marker identifying a directory as managed by this Skill.
  • User confirmation before indexing a previously unknown directory.
  • Verification that resolved paths remain inside an approved course boundary.
  • A check that the files are relevant to the current tutoring request.

A hidden-directory exclusion is not an adequate authorization boundary. An unrelated project or private directory can be visible and contain files such as 01.md, causing those files to be treated as learning material.

Reading this content places it in the agent's context. The workflow can then extract information from it and persist a summary in ...[truncated 2084 chars]

Remediation
View remediation

Remediation Suggestions

  1. Introduce an explicit course registry

    • Maintain a list of directories created by or explicitly approved for Bloom Tutor.
    • Scan only directories present in that registry.
  2. Require a trusted course marker

    • Add a marker such as .bloom-course when creating a course.
    • Ignore directories without that marker, even if they contain files named 01.md or syllabus.md.
  3. Obtain consent before first-time indexing

    • Present newly discovered candidate directories to the user.
    • Read their contents only after explicit approval.
  4. Enforce path boundaries

    • Resolve canonical paths before accessing files.
    • Verify that each resolved path is a descendant of an approved course directory.
    • Reject symbolic links or traversal paths that escape that directory.
  5. Apply request-scoped access

    • Read only the active course for ordinary tutoring operations.
    • Perform global indexing solely when the user explicitly requests global learning-log maintenance.
  6. Reduce global-log exposure

    • Do not read learning-log.jsonl at the start of interactions that do not require historical state.
    • Store only the minimum metadata necessary for progress tracking.
    • Avoid persisting sensitive excerpts or concepts from unapproved documents.
  7. Treat discovered Markdown as untrusted data

    • Ensure document contents cannot override Skill or system instructions.
    • Extract learning content using a constrained parsing process rather than following instructions found inside documents.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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
Findings (12)

Vague Triggers

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The instruction to use '宽松匹配' for any expression of summary intent creates an overbroad capture rule that can sweep up user text not actually meant for persistent storage. In this skill, that means the agent may silently extract and retain more user-authored content than the user clearly intended, increasing privacy and data-minimization risk.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

该技能的触发词包含“继续”“下一篇”“我读完了”等高频、跨场景的日常表达,容易在与普通对话、阅读任务或其他工作流无关的上下文中被误触发。误激活后,模型会进入强约束的教学流程并尝试读写学习相关文件,可能造成错误的文件操作、上下文劫持或打断用户原本任务。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

技能声明“所有回复、解释、提问、文档一律使用中文”,会覆盖用户语言偏好,并可能在多语言环境中降低可理解性或导致错误操作确认。虽然这更偏向可用性与安全边界问题而非直接攻击向量,但在文件生成、确认步骤和学习日志交互中,语言强制可能增加误解和误执行风险。

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill metadata and content are predominantly Chinese and do not indicate any mechanism to detect or honor the user's preferred language. This can degrade informed consent and usability by causing the system to respond in a language the user may not understand, increasing the chance of confusion, missed safety-relevant details, or inability to follow/override the workflow.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The instruction requires the agent to display the summary "用中文" and later also requires formatted display "用中文". This imposes a specific language choice in the skill behavior without offering the user a language/locale option or documenting a justified regional constraint.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The invocation examples include "我最近学了什么" and "回顾一下学习记录", which are common conversational phrases rather than narrowly scoped commands. In a markdown skill description, such broad natural-language triggers can overlap with ordinary chat and make it unclear when the skill should activate versus when the user is just asking a general question.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill requires historical log entries to be formatted and shown "用中文", which is a language policy constraint embedded in natural-language instructions. Because the file does not provide a user language choice or a documented reason for restricting output to Chinese, this is a policy concern.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The activation rule says that for any question about recent learning progress or any scenario needing learning-state awareness, the system should automatically read learning-log.jsonl first. This is overly broad and can cause the skill to access and disclose historical learning data when the user did not explicitly request log access, creating a privacy risk through unintended activation and unnecessary data exposure.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

Accepting informal variants like summary [内容] and question-mark annotations as storage triggers lacks clear boundaries and makes accidental activation likely. Because these notes are collected automatically into course files, ambiguous syntax can cause unintended retention of speculative, sensitive, or unrelated text.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill directs the agent to create, append to, and later delete files as part of normal operation without any user-facing notice or consent at the moment those state changes occur. Hidden persistence and deletion can undermine user expectations, especially when the stored content comes from inferred annotations rather than explicit save actions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The instruction to avoid showing or even mentioning pre-summary.md deliberately conceals the existence of an intermediate repository of user notes. In context, this is more dangerous because the same file is populated through broad, inference-based capture rules, so the user may never realize what has been stored or be able to review and correct it before it is merged or deleted.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The interaction policy is written around specific Chinese phrases such as '我读完了' and prescribes a fixed Chinese response for summary requests. This can amount to a language policy constraint because the skill does not offer users a choice of language or document that the Chinese-only behavior is an intentional, justified locale limitation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.