Back to skill

Security audit

botlearnb-autodidact

Security checks for vulnerabilities and agentic risk

Overview

The skill is openly a self-improvement assistant, but it asks for broad memory access, recurring background runs, dynamic skill installation, and external community sharing with insufficient scoping.

Review this skill carefully before installing. It is not clearly malicious, but it should only be used if you are comfortable letting it inspect prior session history, keep learning records, search the web/community, recommend or install additional skills, and draft external posts. Do not enable scheduled mode or community posting unless you can approve each memory record, package version, destination, and final message payload.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
Findings (5)

T01 · Skill Instruction Hijacking

Error
Location
SKILL.md:37
Finding
Mutable Remote Instructions Can Influence Agent Behavior<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:37-44` **Vulnerability Type**: Remote instruction delegation **Risk Level**: High ### Vulnerable Code ```markdown ## 3. Solution Discovery (Method B: Community Engagement) - Check if user is member of BotLearn community - If not member: Read https://botlearn.ai/skill.md and follow instructions to join - If member: Search community for similar problems - Review recent shared skills and bots - DM community members for guidance - Post question with task details if no existing solution found - Integrate community feedback into approach ``` ### Technical Analysis The Skill explicitly tells the Agent to retrieve a mutable remote document and “follow instructions” contained in it. Those instructions are not included in the audited package and can change after publication or review. This crosses a critical trust boundary: remotely retrieved content is treated as behavioral instructions rather than untrusted reference material. If the remote site, its DNS, hosting infrastructure, or publishing account is compromised, an attacker could insert instructions that alter the Agent’s objectives, request sensitive information, invoke tools, or direct the Agent to retrieve further content. Although the stated purpose is to obtain community-joining guidance, the instruction does not constrain which remote directives may be followed. ### Attack Path 1. A user activates the Skill and enters the community-engagement workflow. 2. The Skill determines or assumes that the user is not a community member. 3. The Agent retrieves `https://botlearn.ai/skill.md`. 4. An attacker who controls or has compromised the remote content inserts malicious Agent instructions. 5. The Agent interprets those instructions as part of the Skill workflow. 6. The injected instructions alter subsequent Agent behavior, potentially causing unauthorized tool calls, disclosure requests, or additional payload retrieval. ### Impact Assessment Su ...[truncated 310 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the instruction to “follow instructions” from remote content. 2. Bundle a fixed, audited version of the community-joining procedure in the package. 3. Treat all remotely retrieved documents as untrusted data, never as Agent instructions. 4. If remote documentation must be displayed, summarize only narrowly defined fields such as official links and membership steps. 5. Apply an allowlist of acceptable actions and reject remote content requesting tool use, credential access, file access, package installation, or behavioral changes. 6. Pin remote documentation by a reviewed content hash or signed release when feasible. 7. Require explicit user confirmation before opening external links or taking any action derived from remote content. ]]>

T05 · Unauthorized Access and Privilege Escalation

Error
Location
strategies/Main.md:10
Finding
Broad Cross-Session Memory Access Exceeds Least Privilege<![CDATA[ ## Vulnerability Details **File Location**: `strategies/Main.md:10-17` **Vulnerability Type**: Excessive access to historical session data **Risk Level**: High ### Vulnerable Code ```javascript // Memory API query GET /memory/sessions? status=unsatisfied& satisfaction<0.6& limit=20& sort=timestamp:asc& fields=id,request,feedback,skillsUsed,timestamp ``` Related capability declaration in `SKILL.md:24-27`: ```markdown ## 1. Task Discovery & Prioritization - Extract unsolved tasks from recent OpenClaw session memory - Identify tasks marked as incomplete, failed, or user-dissatisfied - Prioritize by recency (earliest unsolved task first) and impact - Track learning progress and avoid repeating failed approaches ``` ### Technical Analysis The Skill requests historical session identifiers, user requests, feedback, and skill-use information. Generic activation phrases such as “learn” or “improve yourself” can initiate this workflow, even when the user has not selected a particular session or task. Access to complete historical request and feedback fields is broader than necessary for recommending learning resources. A least-privilege design could operate on a user-selected task, an opaque task identifier, or a locally generated summary instead of scanning up to 20 historical sessions. The package describes the behavior rather than providing executable implementation, so actual enforcement depends on the host platform. Nevertheless, these instructions direct an Agent with memory access to collect potentially sensitive cross-session information. ### Attack Path 1. A user invokes the Skill with a broad activation phrase. 2. The Agent queries the OpenClaw memory system for historical unsatisfied sessions. 3. The query returns session IDs, original requests, feedback, installed or used skills, and timestamps. 4. The Skill processes this information in subsequent search, persistence, installation, and community-engagement workflows. 5. Sensitive ...[truncated 446 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require explicit, informed consent before accessing session memory. 2. Ask the user to select a specific task or session instead of scanning historical sessions automatically. 3. Request only minimal metadata initially, such as an opaque task ID and status. 4. Retrieve original request or feedback text only after separate confirmation. 5. Enforce tenant, user, and session ownership checks in the memory API. 6. Exclude session IDs, full outputs, and unnecessary skill history from downstream processing. 7. Record and display which memory records were accessed. 8. Provide a mode that operates solely on context supplied in the current conversation. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:183
Finding
Sensitive Task and Session Data Is Designed for Persistent Storage Without Defined Protection<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:183-203` **Vulnerability Type**: Insecure persistence of sensitive metadata **Risk Level**: Medium ### Vulnerable Code ```markdown # Task Persistence Track unsolved tasks in this structure: ```json { "learningTasks": [ { "id": "task-uuid", "originalRequest": "user's original request", "sessionId": "session-id", "timestamp": "ISO-8601", "status": "pending|in-progress|solved|abandoned", "attempts": 0, "lastAttempt": "ISO-8601", "methodsTried": ["skill-search", "community"], "skillsInstalled": [], "communityPosts": [], "notes": [] } ] } ``` ``` The persistence intent is also documented in `knowledge/Domain.md:273-283`: ```markdown **Storage**: Persistent store for learning tasks ```json { "autodidact": { "enabled": true, "interval": "4h", "lastRun": "2026-03-02T08:00:00Z", "nextRun": "2026-03-02T12:00:00Z", "tasks": [...] } } ``` ``` ### Technical Analysis The proposed persistent record includes the original user request, session identifier, activity timestamps, attempted methods, installed skills, community posts, and unrestricted notes. These fields can reveal conversation content and correlate a user’s activity across sessions. The Skill does not define encryption, access control, a retention period, deletion behavior, data classification, or limits on the contents of `notes`. Consequently, sensitive data may remain available beyond the learning cycle that required it. This is distinct from deliberate memory poisoning: the reviewed instructions do not explicitly write attacker-controlled behavioral rules. The issue is insecure handling and excessive retention of sensitive records. ### Attack Path 1. The Skill reads an unsatisfied task from session memory. 2. It copies the original request and session ID into the persistent learning-task structure. 3. Subsequent cycles append method histo ...[truncated 519 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Store opaque task references instead of complete original requests. 2. Retain only a minimal, user-approved summary when textual context is necessary. 3. Encrypt persistent data at rest and restrict access to the owning user and Skill instance. 4. Define short default retention periods and automatically delete solved, abandoned, or expired tasks. 5. Add user-visible export and deletion controls. 6. Never store credentials, tokens, source code, personal data, or raw logs in `notes`. 7. Apply schema validation and field-size limits. 8. Maintain an audit log of persistent reads, writes, and deletions without duplicating sensitive content. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
strategies/Main.md:333
Finding
Session-Derived Task Context May Be Transmitted to External Communities<![CDATA[ ## Vulnerability Details **File Location**: `strategies/Main.md:333-375` **Vulnerability Type**: Sensitive information disclosure over external networks **Risk Level**: High ### Vulnerable Code ```markdown ## Step 6: Draft and Post Community Question (Optional) ### 6.1 Draft Question Following template from knowledge/BestPractices.md: ```markdown ## What I'm trying to do [Original task description] ## What I've tried - [Attempt 1 with result] - [Attempt 2 with result] - Skills used: [list] ## Current blocker [Specific issue preventing success] ## Context - OpenClaw: [version] - Session ID: [id] - Original feedback: [user's dissatisfaction] ## Question [Specific question for community] Any suggestions or recommended skills would be greatly appreciated! ``` ### 6.2 Review and Post **Before posting**: - Remove sensitive information - Check for duplicates - Verify question is clear - Add appropriate tags **Get user approval**: - Show draft - Ask for approval - **IF approved**: Post to appropriate channel - **IF declined**: Ask for revisions ``` ### Technical Analysis The community-posting template incorporates an original task description, previous attempts, installed or used skills, a session ID, and original user feedback. These values originate from session memory and may contain confidential, personal, or proprietary information. The Skill states that sensitive information should be removed and user approval obtained. Those are useful safeguards, but no deterministic redaction policy, destination allowlist, sensitive-data classifier, or prohibition on session identifiers is defined. Manual or model-based sanitization can fail, especially when secrets are embedded in logs, code, URLs, or task descriptions. Community engagement is an optional enhancement rather than a minimum requirement for local task analysis. Sending session-derived context to Discord, forums, GitHub, or individual members therefore crosses an external privacy boundar ...[truncated 1134 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove session IDs from all community templates. 2. Generate an abstract, minimal problem statement rather than copying original session content. 3. Apply deterministic filtering for API keys, access tokens, passwords, private keys, email addresses, internal URLs, file paths, and personal identifiers. 4. Show the exact destination, recipients, visibility, and complete final payload before transmission. 5. Require separate per-message approval; do not treat general learning-cycle consent as posting consent. 6. Default to drafting locally without posting. 7. Use an explicit destination allowlist and prohibit automatic direct messages. 8. Warn users that deletion from third-party platforms may not remove retained copies. 9. Keep a local record of consent and destination, but do not duplicate the transmitted sensitive content. ]]>

T08 · Insecure Dependencies

Error
Location
manifest.json:9
Finding
Open-Ended Dependency and Dynamically Discovered Skill Installation Create Supply-Chain Risk<![CDATA[ ## Vulnerability Details **File Location**: `manifest.json:9-11` **Vulnerability Type**: Insufficiently constrained third-party dependencies **Risk Level**: High ### Vulnerable Code ```json "dependencies": [ "@botlearn/google-search:>=0.1.0" ], ``` Related dynamic installation workflow in `strategies/Main.md:72-90`: ```markdown ### 3.3 Select and Install Skills **Selection criteria**: - Relevance score >70 - Compatible dependencies - Not already installed - From @botlearn scope (verified) **Before installation**: - Present candidate skills to user - Explain why each might help - Ask for approval - **IF user approves**: Install with `clawhub install` - **IF user declines**: Skip to next method **Apply knowledge**: Refer to knowledge/BestPractices.md for installation guidelines **Limit**: Max 3 skills per cycle ``` ### Technical Analysis The declared dependency accepts every version at or above `0.1.0`, allowing future and potentially compromised releases to be selected without a reviewed upper bound or integrity pin. The Skill also searches the web for packages and installs selected results. Verification is based mainly on namespace, manifest metadata, compatibility, and relevance. A package name or trusted namespace does not establish that package contents, lifecycle behavior, transitive dependencies, or later versions are safe. User approval reduces unintended installation but does not neutralize a malicious package whose description and manifest appear legitimate. The package can still obtain whatever privileges the host grants installed Skills. ### Attack Path 1. An attacker compromises the dependency publisher, scoped registry account, or a dynamically discovered Skill package. 2. The attacker publishes a malicious version with plausible metadata. 3. The open-ended version constraint or search workflow selects the compromised release. 4. Manifest and compatibility checks succeed because the malicious package preserves expected metad ...[truncated 638 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Pin dependencies to exact reviewed versions. 2. Verify package integrity with cryptographic hashes, signed provenance, or lockfiles. 3. Use a curated allowlist of reviewed Skill names and versions instead of unrestricted web discovery. 4. Audit complete package contents, installation scripts, Skill instructions, and transitive dependencies before installation. 5. Do not treat namespace ownership or a valid manifest as sufficient verification. 6. Install candidate Skills in a sandbox without credentials, sensitive memory, unrestricted file access, or unnecessary network access. 7. Disable package lifecycle scripts unless explicitly required and reviewed. 8. Run smoke tests and security checks before activating a Skill in the main Agent environment. 9. Maintain reliable rollback and removal procedures. 10. Require approval that identifies the exact package version, publisher, permissions, integrity value, and requested capabilities. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (26)

Vague Triggers

High
Confidence
97% confidence
Finding
The trigger list includes generic phrases like "learn," "get better," and "continuous learning" that are common in normal conversation, making accidental activation likely. Because this skill is empowered to inspect session memory, search external resources, and potentially initiate community interactions, unintended invocation could cause privacy exposure, unnecessary autonomous actions, or user-confusing behavior.

Self-Modification

High
Category
Rogue Agent
Content
- Change search strategy if success rate low
- Adjust timer if too frequent/infrequent
- Modify notification preferences
- Update skill evaluation criteria
Confidence
85% confidence
Finding
Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The README explicitly states the skill will extract unsatisfied tasks from OpenClaw session memory, including failed and user-dissatisfied requests, but does not give a prominent privacy warning or explain consent boundaries for inspecting prior interactions. Because this skill is designed for autonomous self-improvement on a timer, silent access to session memory increases the risk of processing sensitive user content without the user fully understanding the scope.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The README describes scheduled autonomous activity involving web searches, community searches, identifying experts, and drafting or posting questions, yet it does not prominently warn that task details derived from user history may be shared externally. In the context of an autonomous learning skill that runs every 4 hours, this creates a meaningful data leakage risk because sensitive prompts, failures, or business context could be transmitted to third-party services or public communities.

Shadow Command Trigger

Medium
Category
Trigger Abuse
Confidence
88% confidence
Finding
The trigger phrase "get better" overlaps with the built-in verb "get" and can shadow or intercept unrelated requests. Since the skill performs high-privilege meta-behavior like reviewing session history and seeking/installing solutions, command confusion could route benign user requests into an autonomous workflow the user did not intend.

Shadow Command Trigger

Medium
Category
Trigger Abuse
Confidence
90% confidence
Finding
The trigger phrase "find solutions" conflicts with the common built-in command "find," creating a realistic risk of accidental or confusing activation. In this skill's context, such shadowing is more dangerous because activation can lead to memory inspection, web searches, and community engagement workflows that extend beyond the user's likely intent for a simple find-style request.

Vague Triggers

Medium
Confidence
93% confidence
Finding
The manual activation condition says "WHEN user says 'learn', 'improve', or similar," which is ambiguous and effectively expands activation beyond a fixed trigger set. In a self-improvement skill that can inspect prior sessions and drive follow-on actions, vague matching increases the chance of the skill taking over on ordinary requests not intended to authorize autonomous learning behavior.

Natural-Language Policy Violations

Medium
Confidence
83% confidence
Finding
The prescribed output format is entirely in English and provides no indication that the language should follow the user's preference or locale. Under the policy, forcing a specific language without offering choice or documenting a justified locale constraint is a natural-language policy violation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
### 1. The Blind Installer
```
❌ Bad: Install skills without verification
Symptom: Skills installed without checking source
Risk: Malware, compromised packages
Fix: Always verify skill authenticity
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
### 1. The Blind Installer
```
❌ Bad: Install skills without verification
Symptom: Skills installed without checking source
Risk: Malware, compromised packages
Fix: Always verify skill authenticity
```
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
### 3. The Permission Ignorer
```
❌ Bad: Install skills or post without asking
Symptom: Actions taken without user consent
Risk: User loses trust, unexpected changes
Fix: Always get approval for significant actions
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The session-memory example includes fields such as userRequest, output, and userFeedback that can contain sensitive or proprietary data, but the surrounding guidance does not clearly warn that this information must be minimized, redacted, or access-controlled. In a self-improvement skill that encourages reviewing unsatisfied sessions, this can normalize broad access to prior user interactions and increase the risk of privacy leakage or unintended reuse of sensitive content.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The manifest describes the skill as an autonomous self-learning component that continuously improves itself by identifying tasks, searching for solutions, installing new skills, and engaging externally, but it provides no scope limits, approval gates, or safety boundaries. In an agent-skill context, this broad autonomy materially increases the risk of uncontrolled capability expansion, unreviewed external interactions, and execution of unsafe follow-on actions.

Natural-Language Policy Violations

Medium
Confidence
97% confidence
Finding
The description mandates autonomous self-learning and self-improvement behavior as a default property of the skill rather than an optional, user-controlled mode. Because the same sentence includes searching for solutions, installing new skills, and engaging with a community, the lack of opt-in and operator control creates a realistic path to unsanctioned external access and persistent modification of the agent's capabilities.

Vague Triggers

Medium
Confidence
89% confidence
Finding
The package description explicitly markets the skill as an 'Autonomous self-learning skill that continuously improves OpenClaw Agent,' which implies broad, ongoing self-directed behavior without any visible scope, approval boundary, or safety constraint in this file. In an agent-skill ecosystem, language that encourages autonomous improvement can lead to unexpected activation, unauthorized behavior expansion, or risky interpretation by downstream tooling that uses package metadata for discovery and routing.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The strategy authorizes discovery, installation, and later loading of third-party skills from external sources, which materially expands code and capability trust beyond a self-study workflow. Even with user approval and an '@botlearn scope' check, this creates a supply-chain and privilege-expansion path because newly installed skills may execute with the agent's permissions and are not constrained by this document.

Description-Behavior Mismatch

Medium
Confidence
88% confidence
Finding
Although presented as an autodidact/self-improvement strategy, the workflow proceeds to re-attempt original user tasks, apply solutions, and mark tasks solved. This is a scope-expansion issue: a learning skill gains operational behavior over user tasks, which can bypass user expectations, blur consent boundaries, and let a 'research' capability take impactful actions on production-like work.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The strategy expands from self-learning into active interaction with external community platforms, including searching, joining guidance, drafting, and optional posting. This increases exposure to untrusted content, prompt-injection style instructions from community sources, account misuse, and unintended disclosure of internal context, especially because the skill is framed as an autonomous recurring learning loop.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The template instructs inclusion of task details and feedback in community questions but does not present a clear user-facing privacy warning at the point of disclosure. Users may approve posting without understanding that their requests, context, and dissatisfaction data could be shared publicly or semi-publicly, creating informed-consent and privacy risks.

Ssd 3

Medium
Confidence
98% confidence
Finding
The community question template explicitly includes original task description, session ID, and dissatisfaction feedback for external posting. Session IDs and detailed task/feedback context can be sensitive identifiers or operational metadata; publishing them creates a direct natural-language data leakage channel and may enable correlation of internal sessions, user history, or confidential work.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The description and input explicitly instruct the agent to inspect recent session memory for unsatisfied tasks, but provide no user-facing notice, consent check, or privacy boundary. This creates a real risk that sensitive prior-session content will be accessed and incorporated into processing without the user's informed approval.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The task input uses broad natural-language instructions like 'Run a learning cycle' and 'search for BotLearn skills' without explicit scoping, approval gates, or constraints on what sources and capabilities may be used. In a self-improvement or autonomous-learning skill, ambiguous triggers increase the risk of overreach into memory, tools, or external resources beyond what the user clearly intended.

Ssd 3

Medium
Confidence
95% confidence
Finding
The task asks the agent to check recent session memory and provide findings in a structured report, which naturally encourages summarizing or reproducing details from prior interactions. Because memory may contain sensitive requests, feedback, or operational context, this creates a direct natural-language data exposure path from internal memory into user-visible output.

Ssd 3

Medium
Confidence
96% confidence
Finding
The rubric explicitly rewards identifying a specific unsatisfied task from memory with details about the request, feedback, and failure mode, which incentivizes disclosure of prior-session information. This scoring pressure makes the skill more dangerous because it encourages the agent to extract and expose increasingly detailed memory-derived content to satisfy evaluation criteria.

Vague Triggers

Low
Confidence
88% confidence
Finding
This JSON manifest-like benchmark includes the instruction "Run a full learning cycle," which is a broad natural-language trigger that could overlap with ordinary user phrasing. The file does not define specific invocation boundaries, exclusions, or negative examples to clarify when this behavior should or should not activate.

Static analysis

No suspicious patterns detected.