Back to skill

Security audit

Personal Insight Engine

Security checks for vulnerabilities and agentic risk

Overview

The skill is broadly coherent, but it sends local session logs to external LLM providers while overstating privacy protections and using weak file-scope controls.

Install only if you are comfortable sending recent OpenClaw memory logs to Gemini or Zhipu after best-effort redaction. Avoid using it on workspaces containing secrets, customer data, private notes, or regulated information unless the file-scope and redaction issues are fixed, and prefer pinned dependencies plus a payload preview or local-only mode.

Vulnerability Patterns
  • 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
  • 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
Findings (4)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
scripts/scanner.py:10
Finding

Workspace Scope Bypass Through Symbolic-Link Following

Content
View full analysis
cutoff: recent_files.append(file_path) return sorted(recent_files, key=lambda x: x.stat().st_mtime, reverse=True) ``` The selected paths are subsequently opened without further validation: ```python full_text = "" for f in files: with open(f, 'r', encoding='utf-8') as file: content = file.read() clean = analyzer.clean_content(content) full_text += f"\n--- File: {f.name} ---\n{clean}\n" ``` ### Technical Analysis The scanner selects entries whose names match `*.md`, but it does not reject symbolic links or resolve each candidate and verify that the resolved path remains under the intended `memory` directory. Both `Path.stat()` and `open()` follow symbolic links by default. Consequently, an attacker who can create an entry in the scanned memory directory can point a Markdown filename to any file readable by the process. The destination does not need to reside in the OpenClaw workspace. Its contents will be read, processed by incomplete regex-based redaction, and submitted to the configured external LLM provider. The fallback to `./memory` also makes the effective scan location dependent on the current working directory when the configured directory does not exist. ### Attack Path 1. The attacker obtains write access to the configured ...[truncated 1013 chars]
Remediation
View remediation
cutoff: recent_files.append(resolved) ``` For stronger protection, open the validated file using operating-system flags equivalent to `O_NOFOLLOW`, then validate the opened file descriptor before reading. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
scripts/analyzer.py:43
Finding

Incomplete Redaction Can Leak Sensitive Session Data to External LLM Providers

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/analyzer.py:70
Finding

Untrusted Memory Logs Are Vulnerable to Indirect Prompt Injection

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Unpinned Runtime Dependencies Create Supply-Chain and Reproducibility Risk

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (16)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill description emphasizes local log analysis and strategic insight generation, but the metadata and behavior imply transmission of local session content to third-party LLM APIs using environment-provided credentials. That mismatch is dangerous because users may reasonably expect local-only processing, while sensitive memory logs could be exfiltrated externally despite the privacy language in the document.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The skill description emphasizes local log analysis and strategic insight generation, but the metadata and behavior imply transmission of local session content to third-party LLM APIs using environment-provided credentials. That mismatch is dangerous because users may reasonably expect local-only processing, while sensitive memory logs could be exfiltrated externally despite the privacy language in the document.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill’s stated purpose is scanning local session logs, but this function packages up to 60,000 characters of log content into a prompt and sends it to external LLM providers over the network. Session logs commonly contain sensitive operational, personal, or credential-adjacent data, and the built-in redaction is heuristic and incomplete, so this creates a real confidentiality and data-governance risk.

Content

No source excerpt is available for this finding.

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 · scripts/pie.py (reported line 7)May include surrounding context.

python
from analyzer import InsightAnalyzer
from dotenv import load_dotenv

# Load environment variables from .env
load_dotenv()

def run_pie(days=7, provider=None):

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill declares capabilities requiring environment access, local file reads, and outbound network use, but does not declare any explicit tool scope or permissions boundary. In a skill that processes local memory logs and uses API keys to contact external LLM providers, missing scope declarations increases the risk of over-broad execution and makes sensitive data handling less auditable.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description materially misrepresents the skill’s behavior by emphasizing 'hardened redaction' and 'standardized workspace handling' rather than its actual purpose of scanning local session logs and extracting strategic insights. In a security-sensitive ecosystem, inaccurate metadata can mislead reviewers and users about data handling guarantees, causing them to overtrust the skill with potentially sensitive local memory content.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The stated purpose is a personal insight engine that scans local session logs and extracts insights. Accessing GEMINI_API_KEY and ZHIPU_API_KEY from the environment introduces credential-handling and external-service dependency that is not disclosed by the manifest's local-analysis description.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The code sends session-log-derived prompts to Gemini or Zhipu without any user-facing notice, consent gate, or in-band disclosure at the point of transmission. In a skill centered on local memory/session analysis, that mismatch makes inadvertent exfiltration more likely and can violate user expectations, privacy policies, or compliance requirements.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

Loading environment variables and depending on provider API credentials expands the skill's capability beyond simple local log scanning. Even though the code does not directly expose secrets here, the hidden dependency on external credentials indicates undisclosed network-backed processing of potentially sensitive local data.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill is presented as scanning local session logs, but it actually requires an external LLM provider and transmits aggregated log content for analysis. This creates a data-exfiltration and transparency risk because users may reasonably expect purely local processing while sensitive memory content is sent to a third party.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The code aggregates contents from local memory files and passes them to analyzer.get_insights(full_text), which implies sending raw session-log data to an external LLM provider. Without an explicit warning or consent flow, sensitive personal or operational information may be disclosed to a third party unexpectedly.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The dependency httpx is declared without a version constraint, which makes builds non-reproducible and can silently pull in vulnerable or breaking releases over time. In a skill that scans local session logs and likely performs networked LLM/API calls, an unexpected dependency version could introduce supply-chain risk or expose the system to known package flaws.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
httpx
python-dotenv

Unverifiable Dependency: httpx has 2 known advisory(ies) (CVE-2021-41945 (Improper Input Validation in httpx); CVE-2021-41945 (Encode OSS httpx <=1.0.0.beta0 is affected by improper input validation in `http)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
84% confidence
Finding

httpx has known advisories, and because no version is pinned, there is no way to verify whether the installed version is safe or affected. In this skill's context, httpx is plausibly used for external API communication, so a vulnerable installation could affect requests made while processing sensitive local insight data.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency python-dotenv is also unpinned, so installation may resolve to different versions across environments, including versions with undisclosed or known security issues. Because this skill may load local configuration from .env files while handling sensitive local memory data, inconsistent dependency resolution increases operational and security risk.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
httpx
python-dotenv

Unverifiable Dependency: python-dotenv has 2 known advisory(ies) (CVE-2026-28684 (python-dotenv: Symlink following in set_key allows arbitrary file overwrite via ); CVE-2026-28684 (python-dotenv reads key-value pairs from a .env file and can set them as environ)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
82% confidence
Finding

python-dotenv has known advisories and the manifest does not specify a version, so the environment could install a vulnerable release. Given this skill's local-file-oriented behavior, a vulnerable dotenv implementation is more concerning because it may interact with local filesystem state and configuration, increasing the relevance of file-handling flaws such as symlink-based overwrite issues.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The instruction 'default to Chinese if logs are mixed' imposes a language choice based on content rather than explicit user preference. This is a natural-language locale policy issue because the skill does not offer the user a language choice or opt-in before forcing that default.

Content

No source excerpt is available for this finding.