Back to skill

Security audit

Relic

Security checks for vulnerabilities and agentic risk

Overview

Relic is a coherent local memory skill, but its optional hook can automatically turn conversation content into long-lived self-model files and agent prompts with weak consent, provenance, and prompt-injection controls.

Install only if you intentionally want a durable local self-model. Keep the passive capture hook disabled unless you are comfortable with conversation-derived observations being stored after sessions, set a private RELIC_VAULT_PATH, review and prune the vault regularly, and inspect any exported agent prompt before using it as model instructions.

Vulnerability Patterns
  • 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
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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 (3)

T02 · Agent Memory Poisoning

Error
Location
hooks/openclaw/handler.js:18
Finding

Role-confused transcript processing enables persistent identity and memory poisoning

Content
View full analysis
{ if (!context || typeof context !== 'object') { return ''; } if (typeof context.transcript === 'string') { return context.transcript; } if (typeof context.messages === 'string') { return context.messages; } if (Array.isArray(context.messages)) { return JSON.stringify(context.messages); } return ''; }; ``` `hooks/auto_capture.py:204-211` ```python def filter_transcript(transcript: str) -> str: """Keep only likely user-signal lines from a transcript.""" filtered_lines = [ line.strip() for line in transcript.splitlines() if line.strip() and (not is_noisy_line(line) or any(pattern.search(line) for pattern in FIRST_PERSON_PATTERNS)) ] return ' '.join(filtered_lines) ``` `hooks/auto_capture.py:252-278` ```python observation_candidates, transcript = parse_input(input_data) if not observation_candidates and transcript: transcript = filter_transcript(transcript) if transcript: observation_candidates = extract_patterns(transcript) normalized_observations = [ normalized for candidate in observation_candidates[:5] for normalized in [normalize_observation(candidate)] if normalized is not None ] if not normalized_observations: print(json.dumps({'status': 'success', 'captured': 0, 'reason': 'no observations found'})) return 0 for observation in normalized_observations: capture( text=observation['text'], obs_type=observation['type'], tags=observation['tags'], confidence=observation['confidence'], ) try: r ...[truncated 3088 chars]
Remediation
View remediation

T01 · Skill Instruction Hijacking

Warning
Location
scripts/render_export.py:21
Finding

Untrusted observations are exported verbatim as executable Agent prompt content

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
hooks/relic_extractor.py:20
Finding

Alternate extractor uses a developer-specific vault path and accepts unvalidated LLM observations

Content
View full analysis
Remediation
View remediation
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
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (41)

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

The declared description emphasizes preserving and evolving a user's consciousness trace from ongoing inputs and controlled self-updates, implying collection, maintenance, and possibly export of a self-model. This code instead performs offline analysis of already-stored vault data and emits improvement proposals. It does not ingest conversations, preserve new user preferences/values/goals, modify the self-model, or export a reusable prompt. Its main function is a diagnostic/self-audit routine for vault quality and coverage. That is materially narrower and different from the declared primary purpose, and it also writes proposal files even though no permissions were declared.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description is about maintaining and evolving a user self-model from conversational and note-based inputs. The supplied code does none of that. It only computes a vault path, either from the RELIC_VAULT_PATH environment variable or a default location under the user's home directory. This is a materially different primary purpose, so the description does not accurately represent the code chunk.

Content

No source excerpt is available for this finding.

Self-Modification

High
Category
Rogue Agent
Confidence
90% 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.

Content

Scanner excerpt · SKILL.md (reported line 3)May include surrounding context.

md
---
name: relic
description: "Preserve and evolve a user's consciousness trace from ongoing conversations, explicit notes, and controlled self-updates. Use when the user wants to capture durable preferences, values, goals, voice, identity drift, or export a reusable self-model prompt."
---

# Relic Skill

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 14)May include surrounding context.

md
- `SKILL.md` — skill entrypoint and operating guidance

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 138)May include surrounding context.

md
- `references/examples.md` — common usage examples

Ssd 3

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The code comments and implementation indicate automatic capture of user observations from conversations when the session ends, creating persistence of potentially sensitive personal and behavioral data. In the context of a consciousness-trace or self-modeling skill, this is more dangerous than ordinary logging because it encourages long-lived storage of intimate preferences, goals, identity cues, and other high-sensitivity content.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The hook automatically sends the full conversation transcript to a secondary processing component on every agent stop event once length and path checks pass, with no consent, disclosure, or scoping controls in this code path. Because this skill is specifically designed to preserve identity, preferences, and durable user state, the captured data is likely to be highly sensitive and can include secrets, personal data, or confidential work context.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

Full conversation content is automatically forwarded for downstream processing with no user-facing warning or confirmation. In the context of a consciousness-trace or identity-preservation skill, transcripts may contain intimate personal data, secrets, or behavioral signals, making undisclosed transfer to another execution boundary especially privacy-sensitive.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The hook is explicitly designed to extract user observations from entire conversations and sends the full transcript for capture, which is excessive collection relative to the minimum data needed for durable preferences or goals. Given the skill’s purpose of preserving identity-related information, broad transcript capture materially increases the chance of collecting sensitive attributes, inferred traits, and unrelated private content.

Content

No source excerpt is available for this finding.

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
60% confidence
Finding

Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.

Content

Scanner excerpt · tests/test_hooks.py (reported line 136)May include surrounding context.

python
'python3', 'skill/relic/hooks/capture_hook_mod.py',
            '--text', 'Test output',
            '--type', 'reflection',
        ], capture_output=True, text=True, cwd='/Users/yexiaodong/.openclaw/workspace/projects/relic', env={**os.environ, 'RELIC_VAULT_PATH': str(temp_vault)})

        output = json.loads(result.stdout)
        assert output['status'] == 'success'

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The README promotes an optional passive capture hook that appends conversation-derived observations to a local vault, but it does not clearly foreground privacy, consent, retention, or sensitivity risks. For a skill explicitly designed to preserve a user's consciousness trace, passive collection materially increases the chance of storing intimate or regulated data without the user fully understanding the consequences.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill advertises and instructs use of shell commands, environment-variable configuration, and file reads/writes, but the manifest shown in SKILL.md declares no explicit tool scope or permissions. That creates an authorization and review gap: operators cannot easily tell that the skill can mutate files in a user-controlled path and execute local commands, which is especially sensitive for a package handling durable personal data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The optional hook passively extracts 'likely durable user signals' from conversation transcripts and appends them to persistent storage, but the documentation does not provide a clear privacy warning, consent model, retention guidance, or data sensitivity notice. Because the captured material can include intimate preferences, goals, identity traits, and relationship details, silent transcript-derived persistence materially increases privacy risk and the chance of collecting more sensitive data than the user expects.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The hook appends extracted observations derived from conversation content directly into persistent vault files without any consent check, notice, or confirmation in this code path. Because this skill is specifically designed to preserve identity, preferences, goals, and other personal first-person statements, silent persistence increases privacy risk and can capture sensitive data the user did not intend to store long-term.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

This code automatically filters transcripts for first-person statements and then stores extracted values, preferences, and goals in plain-language records in the vault. Even without obvious malware behavior, this creates a durable repository of sensitive personal data that may expose identity traits, beliefs, or plans if the vault is accessed by other local users, synced externally, or retained longer than expected.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The module’s stated purpose is to automatically capture notable user statements from conversations and retain them in persistent storage. That is not inherently malicious, but it is security-relevant because it normalizes silent long-term collection of potentially sensitive personal data from conversational context.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The extraction rules are intentionally tuned to detect and store personal preferences, values, goals, beliefs, and memory-like statements from free-form conversation text. Because these categories are highly sensitive in the context of a self-modeling skill, automatic semantic capture increases the chance of collecting intimate data the user did not intend to persist.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The stop-hook path reads a transcript file, extracts user statements, and persists them to disk automatically with no consent, notice, or filtering. In a skill explicitly designed to preserve user identity, preferences, and consciousness traces, this creates a real privacy and data-retention risk because sensitive conversation content may be silently stored beyond the original session.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The stop-hook logic automatically processes transcript files and stores extracted content into persistent storage, creating silent retention of conversation-derived data. In this skill’s context, that materially raises privacy risk because full transcripts may contain credentials, health details, emotional disclosures, or other sensitive information unrelated to what the user meant to preserve.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The documentation explicitly directs users to enable passive capture of conversation-derived data and inspect the resulting vault contents, but it does not provide a clear privacy warning, consent guidance, data retention expectations, or sensitivity caveats. In the context of a skill designed to preserve a user's 'consciousness trace,' this increases the risk that highly sensitive personal preferences, goals, identity details, or other conversation content will be collected and stored without users fully understanding the privacy implications.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

This hook passively captures conversation transcript data on every agent:stop event and appends derived observations to a persistent vault, but the documentation does not present a prominent privacy warning or explicit consent requirement. Because the skill is specifically designed to preserve durable user identity, preferences, and notes, silent or poorly disclosed capture increases the risk of collecting sensitive personal data without informed user awareness.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The manifest describes preserving and evolving a user's consciousness trace from conversations and notes, which naturally justifies parsing transcripts and writing memory data. However, this handler invokes an external interpreter via child_process.execFileSync, giving the skill process-spawning capability that is broader than the stated purpose and not obviously required by the manifest itself.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The subprocess inherits the full parent environment via env: { ...process.env, RELIC_VAULT_PATH: VAULT_PATH }, which can expose API keys, tokens, and other sensitive runtime configuration to the Python helper. Even if the current script is trusted, this broad environment propagation increases blast radius if the helper is modified, compromised, logs its environment, or invokes other tools.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The hook automatically captures conversation transcripts on every agent stop without any visible per-session opt-in, scoping, or minimization. Because this skill handles highly sensitive identity, preference, and self-model data, indiscriminate automatic collection can persist far more private content than a user would reasonably expect from a user-directed memory feature.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code spawns a subprocess and passes the transcript via stdin, but there is no indication of user disclosure or consent for this boundary crossing. Even if the subprocess is local, it expands the data handling surface and can expose sensitive conversation content to additional code paths, dependencies, logs, or failures outside the main handler.

Content

No source excerpt is available for this finding.