T03 · Remote Payload Retrieval and Execution
- Location
README.md:35- Finding
Documented Pipe-to-Shell Installation Executes Mutable Remote Code
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This memory-search skill is mostly purpose-aligned, but it contains unsafe command execution and file-reading flaws that could expose local files or run unintended commands.
Review before installing. The local semantic-memory goal is understandable, but install only from a trusted, pinned source; avoid the curl | bash path; and fix or wait for fixes to command execution and file path containment before using it on a workspace with secrets or sensitive files.
README.md:35Documented Pipe-to-Shell Installation Executes Mutable Remote Code
vector-memory/smart_memory.js:95Shell Command Injection Through Interpolated Tool Arguments
vector-memory/smart_memory.js:148Memory Retrieval Permits Workspace Escape and Arbitrary File Disclosure
install.sh:39Installer Retrieves Unpinned Source and Executes an Unlocked Dependency Installation
vector-memory/vector_memory_local.js:21Embedding Model Is Downloaded at Runtime Without Project-Level Integrity Pinning
The | bash construct creates an immediate execution chain from downloaded content to the shell, eliminating any opportunity for inspection and amplifying the impact of repository or transport compromise. Because this is an installation path for a developer-facing skill, it directly normalizes unsafe command execution and can lead to full local code execution.
curl -sL https://raw.githubusercontent.com/YOUR_USERNAME/vector-memory-openclaw/main/install.sh | bash
Claiming 'works immediately' and 'no setup required' while requiring explicit sync/indexing and possible model download/cache setup is a material behavior mismatch. In the context of an installable skill that can run shell commands, this can cause users to trigger unexpected setup, downloads, or state changes they did not knowingly approve.
Claiming 'works immediately' and 'no setup required' while requiring explicit sync/indexing and possible model download/cache setup is a material behavior mismatch. In the context of an installable skill that can run shell commands, this can cause users to trigger unexpected setup, downloads, or state changes they did not knowingly approve.
Claiming 'works immediately' and 'no setup required' while requiring explicit sync/indexing and possible model download/cache setup is a material behavior mismatch. In the context of an installable skill that can run shell commands, this can cause users to trigger unexpected setup, downloads, or state changes they did not knowingly approve.
Referenced artifact was not completely inspected
node vector-memory/smart_memory.js --sync
Referenced artifact was not completely inspected
node vector-memory/smart_memory.js --sync
Referenced artifact was not completely inspected
node vector-memory/smart_memory.js --sync
Referenced artifact was not completely inspected
node vector-memory/smart_memory.js --sync
Referenced artifact was not completely inspected
node vector-memory/smart_memory.js --sync
Referenced artifact was not completely inspected
| `memory.js` | OpenClaw wrapper |
The explicit '| bash' chaining removes any review boundary between untrusted network content and code execution, making compromise of the hosting source immediately exploitable. In the context of a skill installer that later clones a repo and runs npm install, this pattern is especially dangerous because it compounds trust in multiple remote execution stages.
#!/bin/bash
# One-line installer for Vector Memory
# Usage: curl -sL https://raw.githubusercontent.com/YOUR_USERNAME/vector-memory-openclaw/main/install.sh | bash
set -e
The | bash pipeline is a classic unsafe command-chaining pattern because it turns downloaded text directly into shell commands without any review or verification step. In a README for a developer tool, this materially increases danger since installation is a high-trust moment and users may execute the command verbatim, enabling immediate arbitrary command execution.
curl -sL https://raw.githubusercontent.com/YOUR_USERNAME/vector-memory-openclaw/main/install.sh | bash
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
The README instructs users to execute a remote installer directly with curl ... | bash and provides no warning or verification steps. This is dangerous because any compromise of the GitHub account, repository, branch, or network path can result in arbitrary shell command execution on the user's machine.
The skill advertises commands that invoke shell execution and rely on environment variables, but the manifest does not declare any tool scope such as permissions or allowed-tools. That weakens least-privilege controls and makes it easier for an installer or agent runtime to grant broader execution capability than users expect.
Using npx clawhub install vector-memory without a pinned version permits installation of whatever version is current at execution time. This creates a supply-chain risk where a compromised or malicious updated package could be fetched and executed unexpectedly.
The manifest describes a memory-search skill that works immediately and focuses on semantic/vector fallback behavior, but this installer also fetches code from GitHub and runs npm dependency installation. While expected for installation machinery, these operations materially exceed the behavior implied by the manifest description of the skill itself and 'no setup required'.
The script deletes the /tmp/vector-memory-temp directory via rm -rf, but the only surrounding user-facing messages describe downloading and installation rather than removal of files. Although temporary cleanup is common, this is still a destructive filesystem action with no explicit disclosure of the deletion step.
The README instructs users to run npx clawhub install vector-memory without pinning a specific package version. This can lead to non-reproducible installs and increases supply-chain risk if a later compromised or malicious version of the package is published and then implicitly trusted by users.
The README tells users to fetch a remote script and pipe it directly into bash, which executes unreviewed network content immediately on the local system. This is dangerous because any compromise of the GitHub account, repository, branch, or network path can turn installation into arbitrary code execution with the user's privileges.
This is a manifest file, so vague-trigger checks apply. The description and tool text emphasize broad phrases like 'Zero configuration - works immediately after install' and 'natural language, concepts, or keywords' but do not define when this skill should or should not be invoked, which can cause unintended activation overlap with general memory or search requests.
The manifest says the skill 'falls back to built-in search otherwise' and that 'memory_search works immediately,' but memorySearch only invokes the vector backend and, on failure, logs an error and returns an empty array. There is no built-in search fallback path in this file, so the described behavior is not implemented here.
memoryGet joins a user-controlled filePath with the workspace root but does not normalize and verify that the resolved path remains inside WORKSPACE. An attacker can supply traversal sequences such as ../ to read arbitrary files accessible to the process, which is especially dangerous in a memory/search skill because callers are expected to provide file paths and may expose configuration, secrets, or other sensitive host data.
The package description says "100% local vector memory using transformers.js embeddings" and the entrypoint name reinforces a local-only implementation. This conflicts with the skill manifest, which describes "automatic vector fallback" and immediate operation via built-in search when embeddings are unavailable, indicating broader behavior than the package documentation states.
Detected: suspicious.dangerous_exec, suspicious.exposed_secret_literal