Back to skill

Security audit

UnreadBadgeOpenClaw

Security checks for vulnerabilities and agentic risk

Overview

This skill transparently adds and renews unread badges on OpenClaw sessions, with its local state file and gateway calls disclosed and aligned with that purpose.

Install only if you want a helper that can modify OpenClaw session status badges and optionally run a scheduled keepalive job. Review the mandatory-attribution license and be aware it writes local bookkeeping to unread-marks.json but does not access chat contents or external services at runtime.

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
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (15)

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · scripts/unread-mark-keepalive.js (reported line 137)May include surrounding context.

js
if (now - created >= TTL_MAX_MS) {
      patch({ key, attention: null });
      delete state[key];
      console.log(`[keepalive] EXPIRED-7d cleared ${key}`);
      continue;
    }

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · scripts/unread-mark-keepalive.js (reported line 144)May include surrounding context.

js
if (now - created >= TTL_MAX_MS) {
      patch({ key, attention: null });
      delete state[key];
      console.log(`[keepalive] EXPIRED-7d cleared ${key}`);
      continue;
    }

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · scripts/unread-mark-keepalive.js (reported line 152)May include surrounding context.

js
if (now - created >= TTL_MAX_MS) {
      patch({ key, attention: null });
      delete state[key];
      console.log(`[keepalive] EXPIRED-7d cleared ${key}`);
      continue;
    }

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · scripts/unread-mark-keepalive.js (reported line 158)May include surrounding context.

js
if (now - created >= TTL_MAX_MS) {
      patch({ key, attention: null });
      delete state[key];
      console.log(`[keepalive] EXPIRED-7d cleared ${key}`);
      continue;
    }

Memory Manipulation

High
Category
Memory Poisoning
Confidence
80% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · scripts/unread-mark-keepalive.js (reported line 172)May include surrounding context.

js
if (now - created >= TTL_MAX_MS) {
      patch({ key, attention: null });
      delete state[key];
      console.log(`[keepalive] EXPIRED-7d cleared ${key}`);
      continue;
    }

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding

Suspicious Unicode normalization or mixed-script content

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding

Suspicious Unicode normalization or mixed-script content

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This markdown file contains natural-language statements emphasizing a fixed 8-language maintenance standard. While multilingual support is generally positive, the repeated framing of a mandated language set can be read as a locale policy constraint without any note that users may choose their preferred language or that other locales are supported.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This file includes a natural-language policy statement that forces the English version to prevail over all translations. Under the stated policy, language constraints should either be optional for the user or clearly justified as region- or compliance-specific; no such opt-in or justification is provided here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

The document hardcodes parallel sections in English, Simplified Chinese, Traditional Chinese, Korean, Russian, Japanese, Spanish, and French, but does not indicate any user-selectable language behavior or explain locale constraints. This can be interpreted as a language/locale policy issue because the skill documentation is prescribing presentation languages without an explicit opt-in or policy justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The document hardcodes presentation in several specific languages (English, Simplified Chinese, Traditional Chinese, Korean, Russian, Japanese, Spanish, and French) without stating that language selection is user-driven or optional. Under the policy rule, fixed locale behavior can be a natural-language policy concern when no opt-in or justification is provided.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

This file is plain text, so SQP-1 applies. The content is only a checksum list and provides no trigger phrases, activation conditions, or exclusions, which means there is no specificity about when the skill should activate if this file is relied on as part of skill metadata.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The header states 'Everything goes through the gateway API — no local database access, no agent-specific paths,' which suggests the script does not rely on local persisted state. However, the implementation loads and later rewrites unread-marks.json from a local state directory to track marks across runs. This is an active contradiction between documentation and code behavior, even if the file is a state file rather than a formal database.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The text states that the file is a complete manual for Chinese users, which indicates a language-specific constraint in natural language. Because the document does not offer an alternative language or present this as a user-selectable option within the file, it may violate the language/locale policy criterion.

Content

No source excerpt is available for this finding.