Back to skill

Security audit

RootCraft Learning System

Security checks for vulnerabilities and agentic risk

Overview

This is a learning-helper skill that writes study notes and flashcards locally, with no evidence of exfiltration, credential access, destructive behavior, or hidden persistence.

Install only if you are comfortable with the skill saving generated study materials and flashcard contents locally under OpenClaw workspace directories. Use explicit prompts when invoking it, review generated practice commands before running them, and avoid putting private or sensitive study topics into saved notes unless local retention is acceptable.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
SKILL.md:120
Finding

Unpinned Third-Party Package Installation in Generated Practice Instructions

Content
View full analysis
Remediation
View remediation
\ pandas== \ scikit-learn== ``` 2. Maintain dependencies in a lockfile or requirements file generated from a reviewed environment. 3. Require package hashes and enforce them with `pip install --require-hashes -r requirements.txt`. 4. Review and pin transitive dependencies, not only direct dependencies. 5. Use an explicitly trusted package index and prevent unintended fallback to untrusted or privately configured indexes where practical. 6. Run installation inside a dedicated virtual environment or sandbox with minimal filesystem and network privileges. 7. Require explicit user confirmation before an Agent executes any package-installation command. 8. Add automated dependency scanning and periodically review pinned versions for known vulnerabilities before updating them. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • 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
Findings (18)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The README defines activation phrases such as "I want to learn..." and "This concept is unclear...", which are extremely broad and likely to appear in normal conversation. In an agent ecosystem, this can cause the skill to activate unintentionally and take over unrelated interactions, creating prompt-scope hijacking or unexpected behavior even though the skill itself is educational rather than overtly malicious.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The trigger keywords are extremely broad and include common phrases like 'learn', 'study', and 'how to learn', which can cause the skill to activate in many unrelated conversations. Over-broad activation increases the chance the skill hijacks normal interactions and applies its automation unexpectedly, especially because the skill later couples activation with persistent file-writing behavior.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill mandates automatic saving of detailed study content to /root/.openclaw/workspace/study/{topic}/ without warning or obtaining user consent. Persistent writes create privacy and integrity risks because user prompts, generated educational content, and derived artifacts may be stored unexpectedly on disk, potentially exposing sensitive topics or consuming workspace resources.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill requires calling file-generation and quality-check functions after every learning session, making persistent filesystem modification the default behavior. Because this is automatic and repeated, it amplifies the risk of unintended data retention, resource consumption, and potentially unsafe file operations if user-provided topic names or content are passed into underlying writer functions without strict validation.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill explicitly instructs proactive recommendation on ambiguous learning-related statements, rather than requiring clear user intent to invoke the skill. This weakens activation boundaries and makes it more likely that the skill will take over benign conversations and initiate downstream actions, including content generation and automatic persistence, without sufficiently explicit consent.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The constructor sets language: str = "zh", making Chinese the default locale for generated content unless the caller explicitly overrides it. This is a natural-language locale policy concern because the skill imposes a specific language by default rather than offering neutral auto-detection, prompting, or documented regional justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

export_to_csv creates directories and writes all accumulated card content to a CSV file under the user's home directory. Although the function name implies export, there is no confirmation prompt, print/log disclosure inside the function, or warning comment/docstring indicating that potentially sensitive study content will be persisted to disk at a default path.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

export_to_anki_package saves generated cards to an .apkg file under the user's home directory and creates directories as needed. The function lacks a visible confirmation, print/log disclosure, or explicit warning that study content will be packaged and persisted locally, which is relevant because exported cards may contain sensitive personal notes.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The module name, docstrings, and all user-facing report strings are written in Chinese, which effectively fixes the interaction/reporting language for users. There is no indication that the user can choose a different language or that the locale restriction is intentionally limited to a region-specific use case.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The module docstring and all user-facing generated content are written in Chinese, indicating the skill is designed to operate in a specific language by default. There is no natural-language indication that users may choose another language or opt in to Chinese, which can violate language/locale choice policy.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This Python file performs bulk file creation and writes user-provided content into multiple markdown files and an Anki CSV, but the write loop itself has no confirmation prompt or user-facing notice before persisting data. Although the module docstrings describe saving files, there is no visible warning here about creating or overwriting files under /root/.openclaw/workspace/study.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The docstring says the quality-check module verifies whether the learning flow completely outputs all files, and the required file list includes 05-multi-perspective.md and 08-exam.md. However, the main generation path in create_study_files only creates 05-resources.md and never generates 08-exam.md, so the documented notion of 'complete output' contradicts what the codebase's default generation actually produces.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The file introduces a dedicated '试卷生成模块 v1.1.1' and the quality check requires 08-exam.md, suggesting exam generation is part of the intended output set. But generate_and_save at L392-L411 only calls create_study_files and never calls save_exam_paper, so the advertised module capability is not included in the main workflow.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

The save_exam_paper function creates the target directory if needed and writes an exam markdown file, but provides no confirmation prompt, visible log, or warning to the user in this code path. Because this is a file-creation operation affecting user workspace contents, some explicit disclosure is expected under the rule.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The module docstring says the generator 'supports Chinese and English' and the class uses language-aware labels elsewhere, but generate_from_aha_moment and generate_from_taxonomy always emit Chinese front text such as '啊哈时刻', '相关的概念', '分类结构', and 'MECE 分析'. This is an intent-code divergence because the documentation promises bilingual behavior while these methods do not honor the selected language.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
93% confidence
Finding

This code creates a persistent data directory and stores flashcard content in JSON files under the user's home directory. Although the docstrings mention data storage, there is no confirmation prompt, print/log disclosure, or explicit warning that user-entered card fronts/backs will be saved on disk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The export methods write all card front/back content and tags to CSV and text files, which may duplicate sensitive notes into additional files. There is no confirmation, warning, or visible disclosure that exporting creates portable copies of the user's data.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The file header names the skill in Chinese ("学习资料自动生成器"), which indicates a language-specific presentation, but there is no nearby indication that users can choose their preferred language or that the skill is intentionally limited to a Chinese-language audience. Under the policy, language constraints should be opt-in or clearly justified as region-specific.

Content

No source excerpt is available for this finding.