Back to skill

Security audit

Predicate Snapshot

Security checks for vulnerabilities and agentic risk

Overview

The skill largely matches its DOM-snapshot purpose, but it also gives agents broad click/type control over live browser pages and uses mutable install/dependency paths that deserve review before installation.

Review this before installing if you use OpenClaw on logged-in, payment, admin, or other sensitive pages. Prefer local snapshot mode for sensitive browsing, supervise any /predicate-act use, and pin or verify the installer/dependencies instead of relying on @latest.

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

T08 · Insecure Dependencies

Warning
Location
SKILL.md:37
Finding

Unpinned Installer Package Executed Through npx

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:37
Vulnerability Type: Unpinned third-party installer execution
Risk Level: Medium

Vulnerable Code

bash
npx clawdhub@latest install predicate-snapshot

Technical Analysis

The documented installation procedure instructs users to download and execute the package currently associated with the mutable npm latest tag. Neither an exact package version nor an independently verifiable integrity value is specified.

Consequently, the installer executed by a future user may differ from the installer reviewed when this Skill was audited. Compromise of the package publisher, npm account, release pipeline, or package namespace could turn the installation command into an arbitrary-code execution channel. The package name should also be explicitly verified against the intended official publisher because it differs from the “ClawHub” branding used elsewhere in the documentation.

This is a supply-chain weakness rather than evidence that the current package is malicious.

Attack Path

  1. An attacker compromises the referenced npm package, its publisher account, or its release pipeline.
  2. The attacker publishes a malicious package release and assigns it the latest distribution tag.
  3. A user follows the installation command in SKILL.md.
  4. npx retrieves and executes the attacker-controlled release without requiring review of the changed payload.
  5. The malicious installer executes with the installing user's permissions and can modify the Skill installation or other user-accessible resources.

Impact Assessment

Successful exploitation could provide arbitrary code execution with the privileges of the user running the installation command. The attacker could read or modify files available to that user, access environment variables and credentials exposed to the installation process, alter the OpenClaw Skill directory, or install modified Agent func ...[truncated 282 chars]

Remediation
View remediation

Remediation Suggestions

  1. Replace @latest with an exact, reviewed package version, for example:

    bash
    npx --yes clawdhub@X.Y.Z install predicate-snapshot
    
  2. Verify and document the package's official npm scope, exact name, publisher identity, and repository before recommending it.

  3. Publish the expected package integrity hash or signed-release verification instructions.

  4. Prefer downloading the installer without executing it, verifying its integrity and provenance, and only then running it.

  5. Use lockfiles and immutable versions for automated installation or deployment.

  6. Document the files and directories that the installer is expected to modify so users can detect behavior outside its required scope.

Vulnerability Patterns
  • 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
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (83)

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 · README.md (reported line 406)May include surrounding context.

  1. Copy the example env file:
bash
cp .env.example .env
  1. Edit .env and add your OpenAI API key:

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Launching a browser, navigating to external sites, loading runtime components, and invoking multiple tools is much broader than 'make browser prompts 95% smaller.' This gap can mislead users into authorizing a skill that can interact with live web sessions and external services under a benign-sounding description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Launching a browser, navigating to external sites, loading runtime components, and invoking multiple tools is much broader than 'make browser prompts 95% smaller.' This gap can mislead users into authorizing a skill that can interact with live web sessions and external services under a benign-sounding description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

Launching a browser, navigating to external sites, loading runtime components, and invoking multiple tools is much broader than 'make browser prompts 95% smaller.' This gap can mislead users into authorizing a skill that can interact with live web sessions and external services under a benign-sounding description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Launching a browser, navigating to external sites, loading runtime components, and invoking multiple tools is much broader than 'make browser prompts 95% smaller.' This gap can mislead users into authorizing a skill that can interact with live web sessions and external services under a benign-sounding description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Launching a browser, navigating to external sites, loading runtime components, and invoking multiple tools is much broader than 'make browser prompts 95% smaller.' This gap can mislead users into authorizing a skill that can interact with live web sessions and external services under a benign-sounding description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

Launching a browser, navigating to external sites, loading runtime components, and invoking multiple tools is much broader than 'make browser prompts 95% smaller.' This gap can mislead users into authorizing a skill that can interact with live web sessions and external services under a benign-sounding description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Launching a browser, navigating to external sites, loading runtime components, and invoking multiple tools is much broader than 'make browser prompts 95% smaller.' This gap can mislead users into authorizing a skill that can interact with live web sessions and external services under a benign-sounding description.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

Launching a browser, navigating to external sites, loading runtime components, and invoking multiple tools is much broader than 'make browser prompts 95% smaller.' This gap can mislead users into authorizing a skill that can interact with live web sessions and external services under a benign-sounding description.

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 · README.md (reported line 302)May include surrounding context.

md
*   --overlay   Show green overlay on captured elements (requires --headed)
 */

// Load environment variables from .env file
import * as dotenv from 'dotenv';
dotenv.config();

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 · README.md (reported line 303)May include surrounding context.

md
*   --overlay   Show green overlay on captured elements (requires --headed)
 */

// Load environment variables from .env file
import * as dotenv from 'dotenv';
dotenv.config();

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 · README.md (reported line 304)May include surrounding context.

md
*   --overlay   Show green overlay on captured elements (requires --headed)
 */

// Load environment variables from .env file
import * as dotenv from 'dotenv';
dotenv.config();

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 · README.md (reported line 305)May include surrounding context.

md
*   --overlay   Show green overlay on captured elements (requires --headed)
 */

// Load environment variables from .env file
import * as dotenv from 'dotenv';
dotenv.config();

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 · README.md (reported line 411)May include surrounding context.

md
*   --overlay   Show green overlay on captured elements (requires --headed)
 */

// Load environment variables from .env file
import * as dotenv from 'dotenv';
dotenv.config();

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 · demo/llm-action.ts (reported line 21)May include surrounding context.

ts
*   --overlay   Show green overlay on captured elements (requires --headed)
 */

// Load environment variables from .env file
import * as dotenv from 'dotenv';
dotenv.config();

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 · demo/llm-action.ts (reported line 268)May include surrounding context.

ts
console.log(`    Tokens: ${a11yTokens}, Latency: ${a11yLatency}ms`);

  // ----- Predicate Snapshot Approach -----
  // Reload page to reset state
  await browser.goto(task.url);
  await page.waitForTimeout(2000);

Known Vulnerable Dependency: brace-expansion==1.1.12 — 4 advisory(ies): CVE-2026-13149 (brace-expansion: DoS via exponential-time expansion of consecutive non-expanding); CVE-2026-33750 (brace-expansion: Zero-step sequence causes process hang and memory exhaustion); CVE-2026-14257 (brace-expansion: DoS via unbounded expansion length causing an out-of-memory pro) +1 more

High
Category
Supply Chain
Confidence
87% confidence
Finding

brace-expansion 1.1.12 is present and has multiple denial-of-service advisories related to pathological pattern expansion. Although this instance is pulled in through development tooling, malformed glob patterns from untrusted sources could still cause excessive CPU or memory consumption during installs, tests, or CI jobs.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: js-yaml==3.14.2 — 4 advisory(ies): CVE-2026-84375 (js-yaml: maxTotalMergeKeys does not limit CPU use for empty merge sources); CVE-2026-59869 (js-yaml: YAML merge-key chains can force quadratic CPU consumption); GHSA-5p4m-2wfm-xmqj (JS-YAML: Quadratic CPU consumption in !!omap resolution (3.x and 4.x) — CVE-2026) +1 more

High
Category
Supply Chain
Confidence
83% confidence
Finding

js-yaml 3.14.2 has published CPU-exhaustion issues when parsing malicious YAML with merge constructs. Here it is nested under test/config tooling, so it is less likely to affect production runtime, but it remains a real risk in CI or developer workflows that parse untrusted YAML.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: axios==1.13.5 — 16 advisory(ies): CVE-2026-44494 (axios Vulnerable to Full Man-in-the-Middle via Prototype Pollution Gadget in `co); CVE-2026-44495 (axios Vulnerable to Credential Theft and Response Hijacking via Prototype Pollut); CVE-2025-62718 (Axios has a NO_PROXY Hostname Normalization Bypass that Leads to SSRF) +13 more

High
Category
Supply Chain
Confidence
80% confidence
Finding

axios 1.13.5 is flagged for multiple issues including SSRF- and redirect/prototype-related weaknesses. In this lockfile it is only brought in through an optional SDK dependency, so it may not be active in all deployments, but if that provider path is enabled these flaws could affect outbound request handling and credential exposure.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: brace-expansion==2.0.2 — 4 advisory(ies): CVE-2026-13149 (brace-expansion: DoS via exponential-time expansion of consecutive non-expanding); CVE-2026-33750 (brace-expansion: Zero-step sequence causes process hang and memory exhaustion); CVE-2026-14257 (brace-expansion: DoS via unbounded expansion length causing an out-of-memory pro) +1 more

High
Category
Supply Chain
Confidence
87% confidence
Finding

brace-expansion 2.0.2 carries similar denial-of-service issues as 1.1.12, with crafted patterns potentially causing hangs or memory exhaustion. Since globbing libraries are common in developer tooling, this is a credible DoS vector in automation that processes attacker-supplied patterns or repository contents.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: browserslist==4.28.1 — 2 advisory(ies): CVE-2026-73088 (Browserslist: Uncaught crash / prototype write via untrusted browserslist-stats.); CVE-2026-73089 (Browserslist: Unbounded memory growth (no cache eviction) via distinct query res)

High
Category
Supply Chain
Confidence
80% confidence
Finding

browserslist 4.28.1 is reported vulnerable to crash/prototype-write and memory-growth issues when given untrusted stats or query inputs. In this project it is only part of the development toolchain, which reduces severity, but malicious repository content or CI inputs could still disrupt builds.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: flatted==3.3.3 — 2 advisory(ies): CVE-2026-32141 (flatted vulnerable to unbounded recursion DoS in parse() revive phase); CVE-2026-33228 (Prototype Pollution via parse() in NodeJS flatted)

High
Category
Supply Chain
Confidence
80% confidence
Finding

flatted 3.3.3 has advisories for unbounded recursion and prototype pollution during parse operations. It appears in development tooling here, so it is not an obvious production exploit path, but vulnerable parsing of attacker-controlled serialized input could still lead to process instability or unsafe object mutation.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: form-data==4.0.5 — 1 advisory(ies): CVE-2026-12143 (form-data: CRLF injection in form-data via unescaped multipart field names and f)

High
Category
Supply Chain
Confidence
80% confidence
Finding

form-data 4.0.5 has a CRLF injection issue involving multipart field names and filenames, which can enable request smuggling or malformed outbound requests if attacker-controlled values are used. In this project it is only pulled by optional network SDKs, so the vulnerability is contextual but real if those SDK paths construct multipart requests from untrusted input.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The file implements active browser-control primitives (click, type, scroll) even though the skill is described as a DOM-pruning/snapshot utility. In an agent setting, this materially expands capability from passive observation to side-effectful interaction, enabling unintended form submission, navigation, or data entry on arbitrary pages if the tool is exposed to untrusted prompts or misused by higher-level orchestration.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

click and especially type allow the skill to alter page state and inject user-controlled text into DOM elements selected solely by a numeric ID-derived selector. In the context of a supposedly snapshot-focused skill, these capabilities are unjustified and dangerous because they can be used to trigger sensitive UI actions, populate forms, or interact with authentication/payment flows under agent control.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.prompt_injection_instructions

Prompt-injection style instruction pattern detected.

Warn
Code
suspicious.prompt_injection_instructions
Location
README.md:166