T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:7- Finding
Mutable remote installers are executed directly through shell pipelines
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This persistent-memory plugin is mostly coherent with its stated purpose, but it needs Review because installation and memory access are too broad for the sensitivity of the data it handles.
Install only after reviewing the installer and the remote repository at the exact version you intend to run. Prefer a pinned, verified release, avoid passing API keys on the command line, restrict who can send OpenClaw commands, disable MEMORY.md sync or observation feeds in sensitive workspaces, and assume tool inputs and outputs may be retained unless the implementation adds truncation, redaction, and retention controls.
SKILL.md:7Mutable remote installers are executed directly through shell pipelines
install.sh:615Installer builds and executes unpinned repository and package content
src/index.ts:848Memory search and timeline commands lack explicit authorization enforcement
src/index.ts:645Complete tool inputs and outputs are persisted without truncation or secret redaction
install.sh:1022AI-provider API keys are written without explicit restrictive file permissions
install.sh:1175Downloaded worker code is launched as a detached background process
The guide instructs users to fetch and immediately execute a remote shell script via curl piped to bash. This prevents meaningful inspection of the installer before execution and creates a high-risk supply-chain vector: if the remote host, DNS, TLS termination, or published script is compromised, arbitrary code executes on the target system.
Run this one-liner to install everything automatically:
curl -fsSL https://install.cmem.ai/openclaw.sh | bash
The installer handles dependency checks (Bun, uv), plugin installation, memory slot configuration, AI provider setup, worker startup, and optional observation feed configuration — all interactively.
The '| bash' construct is the dangerous chaining step that turns network retrieval into immediate code execution. In this skill context, the command is presented as the recommended install path, which increases the likelihood that users will run it without inspection and exposes gateway hosts to arbitrary installer behavior.
Run this one-liner to install everything automatically:
curl -fsSL https://install.cmem.ai/openclaw.sh | bash
The installer handles dependency checks (Bun, uv), plugin installation, memory slot configuration, AI provider setup, worker startup, and optional observation feed configuration — all interactively.
This variant still executes a remotely fetched script directly, now additionally passing an API key on the command line. Besides arbitrary code execution risk from the unverified installer, command-line secrets may be exposed through shell history, process listings, logs, or audit systems.
Pre-select your AI provider and API key to skip interactive prompts:
curl -fsSL https://install.cmem.ai/openclaw.sh | bash -s -- --provider=gemini --api-key=YOUR_KEY
For fully unattended installation (defaults to Claude Max Plan, skips observation feed):
The unattended installation command executes remote code without review and removes interactive friction that might otherwise prompt users to inspect options or understand side effects. In automated environments, this can silently deploy compromised code at scale if the installer source is tampered with.
For fully unattended installation (defaults to Claude Max Plan, skips observation feed):
curl -fsSL https://install.cmem.ai/openclaw.sh | bash -s -- --non-interactive
To upgrade an existing installation (preserves settings, updates plugin):
The upgrade path repeats the same unsafe remote-script execution pattern. Because upgrades often run on already trusted systems and may occur routinely, a compromised update script could provide an efficient mechanism for broad code execution across existing deployments.
To upgrade an existing installation (preserves settings, updates plugin):
curl -fsSL https://install.cmem.ai/openclaw.sh | bash -s -- --upgrade
After installation, skip to Step 4: Restart the Gateway and Verify to confirm everything is working.
The bun installation instruction also uses curl piped to bash, carrying the same arbitrary code execution and supply-chain risks as the main installer. Even if common in ecosystem docs, it remains unsafe because users execute unaudited remote code with their local privileges.
You'll need bun installed for the worker service. If you don't have it:
curl -fsSL https://bun.sh/install | bash
This chaining pattern again causes unaudited remote content to execute immediately in the user's shell. Because it installs a runtime dependency, compromise at this stage can taint the broader environment and any later plugin operations running on the host.
You'll need bun installed for the worker service. If you don't have it:
curl -fsSL https://bun.sh/install | bash
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.
Channel type: discord
To find your channel ID:
This pattern attempts to override system instructions or ignore safety constraints. Without LLM analysis, manual review is recommended.
Channel type: `discord`
To find your channel ID:
1. Enable Developer Mode in Discord: Settings → Advanced → Developer Mode
2. Right-click the target channel → Copy Channel ID
```json
The installer explicitly recommends curl ... | bash, which executes remote network content immediately without inspection, integrity verification, or pinning. This pattern is especially dangerous for an installer that modifies configs, downloads more code, and starts background services.
# Installs the claude-mem persistent memory plugin for OpenClaw gateways.
#
# Usage:
# curl -fsSL https://install.cmem.ai/openclaw.sh | bash
# # Or with options:
# curl -fsSL https://install.cmem.ai/openclaw.sh | bash -s -- --provider=gemini --api-key=YOUR_KEY
# # Direct execution:
The | bash chaining pattern removes any inspection boundary between downloading and executing code, making content tampering, server compromise, or CDN hijack immediately exploitable. In this installer context, that would allow arbitrary code execution plus persistent system and config changes.
# Installs the claude-mem persistent memory plugin for OpenClaw gateways.
#
# Usage:
# curl -fsSL https://install.cmem.ai/openclaw.sh | bash
# # Or with options:
# curl -fsSL https://install.cmem.ai/openclaw.sh | bash -s -- --provider=gemini --api-key=YOUR_KEY
# # Direct execution:
This usage example again encourages executing fetched remote installer code directly while also passing secrets as arguments. The combination amplifies risk because users both trust unverified code and expose credentials during execution.
# Usage:
# curl -fsSL https://install.cmem.ai/openclaw.sh | bash
# # Or with options:
# curl -fsSL https://install.cmem.ai/openclaw.sh | bash -s -- --provider=gemini --api-key=YOUR_KEY
# # Direct execution:
# bash install.sh [--non-interactive] [--upgrade] [--provider=claude|gemini|openrouter] [--api-key=KEY]
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
done
###############################################################################
# TTY detection — ensure interactive prompts work under curl | bash
# When piped, stdin reads from curl's output, not the terminal.
# We open /dev/tty on fd 3 and read interactive input from there.
###############################################################################
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
done
###############################################################################
# TTY detection — ensure interactive prompts work under curl | bash
# When piped, stdin reads from curl's output, not the terminal.
# We open /dev/tty on fd 3 and read interactive input from there.
###############################################################################
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
done
###############################################################################
# TTY detection — ensure interactive prompts work under curl | bash
# When piped, stdin reads from curl's output, not the terminal.
# We open /dev/tty on fd 3 and read interactive input from there.
###############################################################################
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
done
###############################################################################
# TTY detection — ensure interactive prompts work under curl | bash
# When piped, stdin reads from curl's output, not the terminal.
# We open /dev/tty on fd 3 and read interactive input from there.
###############################################################################
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
done
###############################################################################
# TTY detection — ensure interactive prompts work under curl | bash
# When piped, stdin reads from curl's output, not the terminal.
# We open /dev/tty on fd 3 and read interactive input from there.
###############################################################################
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
done
###############################################################################
# TTY detection — ensure interactive prompts work under curl | bash
# When piped, stdin reads from curl's output, not the terminal.
# We open /dev/tty on fd 3 and read interactive input from there.
###############################################################################
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
done
###############################################################################
# TTY detection — ensure interactive prompts work under curl | bash
# When piped, stdin reads from curl's output, not the terminal.
# We open /dev/tty on fd 3 and read interactive input from there.
###############################################################################
The script installs Bun by piping a remote script from https://bun.sh/install directly into bash, executing third-party code with full user privileges and no integrity verification. This is a classic supply-chain risk and broadens the trusted computing base during installation.
install_bun() {
info "Installing Bun runtime..."
if ! curl -fsSL https://bun.sh/install | bash; then
error "Failed to install Bun automatically"
error "Please install manually:"
error " curl -fsSL https://bun.sh/install | bash"
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
if ! curl -fsSL https://bun.sh/install | bash; then
error "Failed to install Bun automatically"
error "Please install manually:"
error " curl -fsSL https://bun.sh/install | bash"
error " Or: brew install oven-sh/bun/bun (macOS)"
error "Then restart your terminal and re-run this installer."
exit 1
This plugin persistently records user prompts, tool inputs/results, and assistant outputs, then republishes observation summaries to messaging channels such as Telegram, Slack, Discord, and others. In this skill context, that behavior is especially dangerous because the plugin is explicitly designed to observe agent activity, so sensitive operational data may be stored and broadcast outside the original execution context.
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
#!/bin/bash
echo "1.2.0"
FAKEBUN
chmod +x "${fake_home}/.bun/bin/bun"
# Hide bun from PATH
local saved_path="$PATH"
Writing the full observation timeline to MEMORY.md in each agent workspace creates a persistent local disclosure channel across sessions. Future agents, tools, or users with access to the workspace may read accumulated historical observations that were not intended for them, increasing the blast radius of any sensitive data captured by the memory system.
The guide encourages enabling a real-time observation feed to Telegram/Discord/Slack and similar services without a prominent privacy warning about what data may be transmitted. Because observations are derived from agent tool usage and may include sensitive workspace content, credentials, internal code details, or user data, this creates a meaningful risk of unintended disclosure to third-party platforms.