Back to skill

Security audit

E.x.O. Installer

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent installer skill, but it deserves review because it runs mutable remote npm, npx, and GitHub code and can persistently change OpenClaw-related tooling.

Install only if you trust the E.x.O. publisher and the referenced npm packages and GitHub repositories. Prefer pinned package versions or an isolated environment, avoid running the installer with elevated privileges, review the exact packages before using --all or update, and inspect any OpenClaw extension or cron changes before enabling them.

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

Error
Location
cli.js:201
Finding

Unpinned Remote Packages and Dependencies Are Retrieved and Executed

Content
View full analysis

Vulnerability Details

File Location: cli.js:201-212, cli.js:371, cli.js:436-450, packages.json:8-9, SKILL.md:18, README.md:9
Vulnerability Type: Untrusted dependency retrieval and execution without version or integrity pinning
Risk Level: High

Vulnerable Code

cli.js:201-212:

javascript
// Install via npm
runCmd(`npm install -g ${pkg.npm}`, { stdio: 'pipe' });

// Run setup if available
if (pkg.npm === 'jasper-recall') {
  console.log('  Running setup...');
  runCmd('npx jasper-recall setup', { stdio: 'inherit' });
} else if (pkg.npm === 'hopeid') {
  console.log('  Running setup...');
  runCmd('npx hopeid setup', { stdio: 'inherit' });
} else if (pkg.npm === 'jasper-context-compactor') {
  console.log('  Running setup...');
  runCmd('npx jasper-context-compactor setup', { stdio: 'inherit' });
}

cli.js:371:

javascript
runCmd(`npm install -g ${pkg.npm}@latest`, { stdio: 'pipe' });

cli.js:436-450:

javascript
runCmd(`git clone https://github.com/E-x-O-Entertainment-Studios-Inc/${repo}.git ${targetDir}`, { stdio: 'inherit' });
success(`Cloned ${name}`);

// Install dependencies if package.json exists
const pkgJson = path.join(targetDir, 'package.json');
if (fs.existsSync(pkgJson)) {
  console.log(`  Installing ${name} dependencies...`);
  try {
    runCmd(`cd ${targetDir} && npm install`, { stdio: 'pipe' });
    success(`${name} dependencies installed`);
  } catch (e) {
    warn(`${name} npm install had issues`);
  }
}

packages.json:8-9:

json
"doctorCmd": "npx jasper-recall doctor --json",
"versionCmd": "npx jasper-recall --version"

The documented installation paths are likewise unpinned:

bash
npx exo-installer install --all
npm install -g exo-installer

Technical Analysis

The installer retrieves npm packages by mutable package name or the explicit mutable latest tag. It does not pin audited versions, validate expected integrity hashes, enforce provenance, or restrict ...[truncated 2831 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin every package to a reviewed, exact version rather than using bare package names or @latest.
  2. Maintain lockfiles for cloned applications and use npm ci instead of npm install so dependency resolution cannot silently drift.
  3. Pin internal repositories to reviewed commit hashes or signed release tags and verify the checked-out commit before installing dependencies.
  4. Verify npm package integrity and provenance against expected values before execution. Where supported, require signed provenance from trusted publishers.
  5. Disable lifecycle scripts by default with --ignore-scripts, then explicitly invoke only reviewed setup steps when they are genuinely required.
  6. Replace npx health and version checks with direct invocation of already-installed binaries resolved from trusted paths. Checks must fail closed if the executable is absent rather than downloading it.
  7. Avoid global installation where possible. Install into a dedicated, least-privileged directory or isolated environment.
  8. Separate update discovery from update execution and require explicit confirmation showing the exact version and verified source.
  9. Run package setup and dependency installation in a sandbox with restricted filesystem, network, credential, and environment-variable access.
  10. Continuously audit both direct and transitive dependencies and review package ownership changes before accepting updates.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (10)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The README explicitly promotes Telegram alerting and cron job creation, which involve outbound communications and persistent system modification, but it does not warn users about those side effects or require explicit consent. In an installer/ops context, undocumented notification channels and scheduled tasks can surprise users, weaken informed consent, and create privacy and operational risks if enabled automatically or copied blindly from the docs.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The invocation guidance is broad enough to activate on general questions about the E.x.O. ecosystem, not just explicit install or maintenance requests. In context, this is risky because the skill contains installation and cloning commands, so an over-eager agent could recommend or initiate sensitive package-management actions when the user only asked informational questions.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The skill instructs users to run npx exo-installer without a pinned version, which fetches and executes whatever package version is currently published under that name. This creates a supply-chain execution risk: a compromised maintainer account, malicious update, or package takeover could result in arbitrary code execution on the user's machine at install time.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill states later that installed tools auto-register with OpenClaw, but the earlier install guidance does not clearly warn users that installation changes the host agent configuration by enabling extensions. This lack of up-front disclosure can lead to unintended expansion of agent capabilities and trust boundaries, especially if users believe they are only installing passive utilities.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

The CLI executes npx jasper-recall setup after installation without pinning an exact version, so execution can drift to whatever version npx resolves at runtime. If the package is compromised, republished, or dependency resolution differs from the installed global version, this can lead to unintended remote code execution during setup.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

The command npx hopeid setup runs package code without pinning a specific version, creating a supply-chain execution point. An attacker who controls or influences package resolution could cause arbitrary code to run on the user's machine during installation/setup.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
91% confidence
Finding

Using npx jasper-context-compactor setup without an exact version means setup execution depends on live package resolution rather than a fixed trusted artifact. In a tool that installs and manages other packages, this increases supply-chain risk because setup commands are executed with user privileges.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The generated cron configuration fixes the timezone to 'America/Regina', which imposes a locale-specific schedule regardless of the user's actual region. This is a natural-language policy concern because the skill does not offer any user choice or explain why this locale is required.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The command uses npx jasper-recall doctor --json without pinning an explicit package version, so execution may fetch and run whatever version is current at install time. This creates a supply-chain risk: a compromised upstream package, typosquat, or breaking release could cause unreviewed code execution in the agent environment.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The version command npx jasper-recall --version is also unpinned, which still requires resolving and potentially downloading executable package content at runtime. Even though it appears low-risk functionally, it can still trigger arbitrary package lifecycle or CLI code from an unexpected or malicious release.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dangerous_exec

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
cli.js:45