Back to skill

Security audit

Active Memory for Calculus Teaching

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent calculus tutoring memory tool, but it stores and reuses student learning data automatically with weak consent, transparency, and path-safety controls.

Review this carefully before installing in a real classroom or any environment involving minors or regulated student records. Use only with explicit student or administrator consent, set a dedicated private memory directory, avoid syncing it to shared Obsidian/cloud storage, validate student identifiers, and require a way to inspect and delete stored profiles, transcripts, dream summaries, and knowledge-graph files.

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

T09 · Insecure Skill Coding Practices

Error
Location
tools/memory_apply.py:68
Finding

Path Traversal Through Unvalidated Student Identifier

Content
View full analysis
cutoff_time: self.session_memories.append(memory) ``` ### Technical Analysis The `student_id` parameter is incorporated directly into filesystem paths without validation or canonical containment checks. Both profile loading and recent-memory loading are affected. In `_load_student_profile`, traversal components can cause the resulting filename to resolve outside the intended `profiles` directory. In `_load_recent_memories`, an absolute path or traversal sequence can redirect directory enumeration to another location accessible to the process. `os.path.join()` does not enforce containment. In particular, an absolute later component can replace the preceding base path, while `..` components remain effective when the operating system resolves the path. The only content restriction applied to enumerated me ...[truncated 1996 chars]
Remediation
View remediation
str: if not STUDENT_ID_PATTERN.fullmatch(student_id): raise ValueError("Invalid student identifier") return student_id ``` 2. Resolve and verify every generated path remains beneath its intended directory: ```python from pathlib import Path def safe_child(base: Path, *parts: str) -> Path: base = base.expanduser().resolve() candidate = base.joinpath(*parts).resolve() if candidate != base and base not in candidate.parents: raise ValueError("Path escapes the permitted directory") return candidate ``` 3. Apply separate containment checks for the `profiles` and `memories` directories. 4. Reject absolute identifiers, path separators, `.` components, and `..` components. 5. Catch `JSONDecodeError`, invalid timestamps, and filesystem errors without exposing sensitive paths. 6. Add authorization checks so a caller can access only the student record associated with its authenticated identity. 7. Add tests covering absolute paths, nested traversal, symbolic links, malformed JSON, and cross-student access. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
hermes.config.yaml:28
Finding

Automatic Persistence of Student Conversations Without Explicit Consent

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
auto-upload.sh:31
Finding

Unpinned Global Dependency Installation With Privileged System Modification

Content
View full analysis
/dev/null; then echo -e "${YELLOW}⚠ Node.js not found. Installing...${NC}" # 尝试安装 Node.js (根据系统) if command -v apt-get &> /dev/null; then sudo apt-get update && sudo apt-get install -y nodejs npm elif command -v yum &> /dev/null; then sudo yum install -y nodejs npm elif command -v brew &> /dev/null; then brew install node else echo -e "${RED}✗ Please install Node.js manually from https://nodejs.org${NC}" exit 1 fi fi echo -e "${GREEN}✓ Node.js: $(node --version)${NC}" # 检查 ClawHub CLI if ! command -v clawhub &> /dev/null; then echo -e "${YELLOW}⚠ ClawHub CLI not found. Installing...${NC}" npm install -g @clawhub/cli if [ $? -ne 0 ]; then echo -e "${RED}✗ Failed to install ClawHub CLI${NC}" exit 1 fi fi echo -e "${GREEN}✓ ClawHub CLI installed${NC}" ``` ### Technical Analysis The optional upload script automatically installs operating-system packages and globally installs `@clawhub/cli` without specifying a version or integrity value. An unversioned command such as: ```bash npm install -g @clawhub/cli ``` resolves whatever release the configured npm registry currently serves. Consequently, the effective code executed during installation can change after this Skill has been reviewed. npm packages may execute lifecycle scripts during installation, and a global installation modifies the user's or system's command environment. The package name is scoped and is consistent with the declared ClawHub publishing workflow. No evidence was found that the named package is malicious. The vulnerability is the uncontrolled dependency resolution and broad installation scope, not a confirmed malicious dependency. The script a ...[truncated 1678 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (71)

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · .gitignore (reported line 45)May include surrounding context.

text
# 敏感信息(不应提交)
*.key
*.pem
*.env
config.local.yaml
secrets.yaml

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · .gitignore (reported line 47)May include surrounding context.

text
*.pem
*.env
config.local.yaml
secrets.yaml

# 测试数据
test_data/

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The description promotes automatic collection of student preferences, mastery state, error patterns, summaries, and knowledge graphs, but does not warn users that learning data will be collected and retained. For student-facing educational tooling, this creates a significant privacy and consent risk, especially if minors or sensitive educational records are involved.

Content

No source excerpt is available for this finding.

Vague Triggers

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill describes itself as operating automatically and proactively across conversations, but it does not define concrete trigger boundaries, exclusions, or user-controlled scopes. In a teaching context with student data, this can cause the agent to collect, infer, and act on sensitive information outside the user's reasonable expectations, increasing privacy and behavioral safety risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill promotes persistent transcript storage and automated student profiling, yet it does not present any user-facing warning, consent flow, or retention explanation. Because the context is education and student records, undisclosed collection and persistence materially raises privacy, compliance, and trust risks.

Content

No source excerpt is available for this finding.

Vague Triggers

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The documented 'zero-trigger memory' means the system extracts memories without any explicit user action, but the skill provides no constraints on what content is eligible for extraction. That makes overcollection likely, including incidental personal data, and enables silent profiling of students based on normal conversation.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The configuration explicitly enables transcript persistence and automated dream-summary storage to disk, but there is no accompanying user warning or consent requirement. This is dangerous because it operationalizes long-term retention of potentially sensitive educational conversations and inferred learner characteristics by default.

Content

No source excerpt is available for this finding.

Chaining Abuse

High
Category
Tool Misuse
Confidence
75% confidence
Finding

Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Content

Scanner excerpt · auto-upload.sh (reported line 37)May include surrounding context.

sh
echo -e "${YELLOW}⚠ Node.js not found. Installing...${NC}"
    # 尝试安装 Node.js (根据系统)
    if command -v apt-get &> /dev/null; then
        sudo apt-get update && sudo apt-get install -y nodejs npm
    elif command -v yum &> /dev/null; then
        sudo yum install -y nodejs npm
    elif command -v brew &> /dev/null; then

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

Persistent transcript storage is explicitly enabled, but the manifest provides no user-facing warning, consent flow, or disclosure of retention behavior. This creates a high risk of collecting and storing conversational data without informed user awareness, especially for students who may reveal personal learning history or other sensitive details.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The dream diary and knowledge-graph outputs automatically store derived data about the user, including inferred weak points, gaps, and progress, without any warning or consent mechanism. Derived profiles can be more sensitive than raw transcripts because they aggregate and infer behavioral or educational traits over time.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The prompt explicitly says not to ask before remembering user preferences and to 'directly remember and apply' them in future interactions. This is a stronger privacy issue than generic personalization because it instructs silent persistent storage and reuse of user-derived data without notice or permission.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

This section directly instructs the model to remember user information without asking and use it in future interactions, making the hidden retention intentional and operational. In a tutoring setting, stored patterns about errors, pace, and weak points can amount to sensitive profiling when retained across sessions without informed approval.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The prompt instructs the system to hide the existence of the memory system from the student while using retained data for personalization. Concealed retention is particularly dangerous because users cannot make informed decisions about disclosure, corrections, or deletion of their learning profile.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
82% confidence
Finding

The report includes Chinese-dominant user-facing text with an English fragment ('UPLOAD COMPLETE!') but does not state whether the skill is intended for Chinese-speaking users or offer a language choice. This can create a locale-policy issue if the skill experience effectively assumes a language without user opt-in or justification.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The report advertises 'zero-trigger memory' and automatic learner profiling/tracking without defining clear activation boundaries, opt-in conditions, or scope limits. In a teaching skill handling student interactions, broad automatic activation can cause unexpected data capture and persistence beyond what users reasonably expect.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The quickstart describes automatic recording of user preferences, mastery tracking, error patterns, and generation of persistent summaries under a local Obsidian directory, but it does not warn users that personal learning data will be stored and retained. This creates a real privacy and consent issue because users may enable the skill without understanding that behavioral and preference data is being persisted to disk.

Content

No source excerpt is available for this finding.

File System Enumeration

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Code scans file system directories looking for sensitive files. This could be reconnaissance for credential theft.

Content

Scanner excerpt · QUICKSTART.md (reported line 99)May include surrounding context.

python3 ~/.openclaw/skills/active-memory-calculus/tools/dream_generator.py test_data.json

检查目录权限

ls -la ~/obsidian/calculus-memory/

text

### 问题:工具脚本错误

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The README explicitly promotes zero-trigger automatic extraction of student information and continuous learner profiling without any visible consent, minimization, or privacy warning. In an educational context, this can lead to collection of sensitive behavioral and performance data without informed user awareness, increasing privacy, compliance, and misuse risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The README describes automated background summarization via the dreaming system and generation of learning summaries/files, but does not warn that this process may create derived records about students outside the immediate conversation. Background processing of educational interactions is especially sensitive because it can infer weaknesses, risks, and performance trends without clear notice.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The configuration examples enable transcript persistence and specify a diary/output path for generated learning records, yet the README provides no warning that these locations may contain sensitive educational data. This raises risk of over-retention, accidental disclosure, insecure local storage, and noncompliance with student privacy obligations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The skill description and operational examples are presented entirely in Chinese and describe the teaching interaction in that language, but there is no indication that users may choose another language or that the locale restriction is intentional and justified. This can constitute a language/locale policy issue when the skill appears to force a specific language by default.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Automatic transcript persistence combined with zero-trigger memory extraction causes collection and retention of user-provided conversation data without a clear consent action. In the student-learning context, that creates meaningful privacy harm because educational struggles, preferences, and inferred weaknesses may be stored and reused silently.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The dreaming workflow periodically summarizes and logs session contents into persistent notes, which increases the attack surface for sensitive student-provided data and inferred educational profiles. The risk is amplified by automation and periodic execution, because users may be unaware that their conversations are being transformed into long-lived artifacts.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The examples describe automatic generation of DREAMS.md summaries containing mastery gaps, weak points, and intervention suggestions, but they do not warn that this information will be written to persistent files. Even if intended for pedagogy, writing inferred student performance data to notes creates disclosure and secondary-use risk if the files are accessible to others or backed up externally.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This .txt file falls under the plain-text scope for vague-trigger review. The phrase "零触发自动记忆学生偏好" implies the skill may activate and store information automatically without any explicit invocation criteria, and the file provides no constraints or negative examples clarifying when memory collection should or should not occur.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.