T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:83- Finding
Unverified Remote Installation Script Executed Directly by a Shell
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a real local memory skill, but it needs Review because it scans and persists chat history while adding under-disclosed network, credential, installer, and unsafe serialization risks.
Install only if you are comfortable with this skill scanning OpenClaw session history and keeping derived memory files. Keep Ollama bound to localhost, do not set OLLAMA_BASE_URL to a remote server unless you intend to send conversation text there, avoid the curl pipe-to-shell and --break-system-packages install steps, use an isolated virtual environment, and leave Feishu notifications disabled unless you understand the credential and recipient behavior.
SKILL.md:83Unverified Remote Installation Script Executed Directly by a Shell
src/l3/l3_cron.py:238Undocumented Access to Global OpenClaw Credentials for External Notifications
src/l2/l2_daily.py:208Private Session Content Can Be Transmitted to an Unrestricted Configurable Embedding Endpoint
src/recall/infinitydb_lite.py:145Unsafe Pickle Deserialization of Persistent HNSW Indexes
requirements.txt:1Automatic Installation of Unpinned Runtime and Development Dependencies
Piping a remote script directly into the shell executes unverified code from the network with the user's privileges, creating a straightforward remote code execution and supply-chain risk. In an installation guide, this is especially dangerous because users are encouraged to copy-paste it without inspecting the script.
# macOS/Linux
curl -fsSL https://ollama.com/install.sh | sh
# Windows: https://ollama.com/download
The command chains a network fetch directly into shell execution using a pipe, removing any inspection boundary between downloaded content and command execution. This pattern amplifies the risk of compromise from a malicious or tampered installer and is a well-known unsafe installation practice.
# macOS/Linux
curl -fsSL https://ollama.com/install.sh | sh
# Windows: https://ollama.com/download
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).
ollama serve
curl http://localhost:11434/api/tags # 验证
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).
ollama serve
curl http://localhost:11434/api/tags # 验证
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).
ollama serve
curl http://localhost:11434/api/tags # 验证
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).
ollama serve
curl http://localhost:11434/api/tags # 验证
This mismatch includes an undeclared external HTTP call to the Ollama embeddings service while claiming a broader memory-management role. Undeclared network communication changes the threat model because user content intended for local memory operations may be sent to a service endpoint without clear disclosure or permission boundaries.
This mismatch includes an undeclared external HTTP call to the Ollama embeddings service while claiming a broader memory-management role. Undeclared network communication changes the threat model because user content intended for local memory operations may be sent to a service endpoint without clear disclosure or permission boundaries.
This mismatch includes an undeclared external HTTP call to the Ollama embeddings service while claiming a broader memory-management role. Undeclared network communication changes the threat model because user content intended for local memory operations may be sent to a service endpoint without clear disclosure or permission boundaries.
This mismatch includes an undeclared external HTTP call to the Ollama embeddings service while claiming a broader memory-management role. Undeclared network communication changes the threat model because user content intended for local memory operations may be sent to a service endpoint without clear disclosure or permission boundaries.
This mismatch includes an undeclared external HTTP call to the Ollama embeddings service while claiming a broader memory-management role. Undeclared network communication changes the threat model because user content intended for local memory operations may be sent to a service endpoint without clear disclosure or permission boundaries.
This mismatch includes an undeclared external HTTP call to the Ollama embeddings service while claiming a broader memory-management role. Undeclared network communication changes the threat model because user content intended for local memory operations may be sent to a service endpoint without clear disclosure or permission boundaries.
The skill advertises persistent memory storage, proactive scanning, incremental updates, and cross-session correlation without clearly warning users about retention and privacy consequences. In a memory system, lack of transparent notice and consent is especially dangerous because highly sensitive conversational data may be stored and later resurfaced across sessions.
The documentation instructs users to execute a remote script via 'curl ... | sh', which is a classic supply-chain and remote-code-execution risk. If the remote host, transport path, or published installer is compromised, arbitrary code will run immediately on the user's machine with the shell's privileges.
# macOS/Linux
curl -fsSL https://ollama.com/install.sh | sh
# Windows: https://ollama.com/download
Piping network-fetched content directly into 'sh' is a dangerous command chain because it removes any opportunity for inspection or integrity validation before execution. In a skill context, including this pattern normalizes unsafe operational practices and could lead to immediate compromise if followed by users or automated tooling.
# macOS/Linux
curl -fsSL https://ollama.com/install.sh | sh
# Windows: https://ollama.com/download
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
def get_feishu_tenant_token(app_id: str, app_secret: str) -> str:
"""获取飞书 tenant access token"""
import urllib.request
data = json.dumps({"app_id": app_id, "app_secret": app_secret}).encode()
req = urllib.request.Request(
Referencing and opening a local secrets file is direct credential access. In the context of a semantic-memory skill, this is especially risky because the capability is unnecessary to the stated purpose and gives the code access to reusable secrets that could be abused for unauthorized messaging or further account actions.
# 读取飞书 credentials(不走 env,cron 执行时 env 不会透传给子进程)
app_id = "cli_a9637ebd21785ccd"
secrets_file = Path.home() / ".openclaw/credentials/lark.secrets.json"
app_secret = None
if secrets_file.exists():
with open(secrets_file) as f:
Loading executable serialization data from disk without warning or trust validation is dangerous because pickle payloads can run arbitrary code at deserialization time. In the context of a memory-management skill that routinely reads persistent state from a shared workspace, this becomes more dangerous: poisoned state can survive across sessions and be triggered later, expanding the blast radius beyond a single run.
The script automatically loads all entries from a local .env file into the process environment using shell parsing that is unsafe and overly broad. This can expose secrets to child processes and can misparse crafted .env content, causing unintended variable assignment or command/argument injection behavior during startup.
echo "=========================================="
# 加载环境变量
if [ -f .env ]; then
echo "[启动] 加载 .env 配置"
export $(cat .env | grep -v '^#' | xargs)
fi
The presence and automatic use of a .env file for startup configuration means credentials stored there are implicitly trusted and injected into the runtime environment. In the context of a memory/knowledge skill, this increases sensitivity because API keys, database tokens, or vector-store credentials may be loaded and then inherited by Python and pip processes.
# 加载环境变量
if [ -f .env ]; then
echo "[启动] 加载 .env 配置"
export $(cat .env | grep -v '^#' | xargs)
fi
export $(cat .env | grep -v '^#' | xargs) is an unsafe pattern for reading .env files because word splitting and shell interpretation can corrupt values or turn maliciously crafted content into unexpected exports. If an attacker can modify .env, they may influence subprocess behavior via environment variables such as Python/pip-related settings, potentially redirecting package sources, altering module loading, or exposing secrets to invoked tools.
# 加载环境变量
if [ -f .env ]; then
echo "[启动] 加载 .env 配置"
export $(cat .env | grep -v '^#' | xargs)
fi
# 检查依赖
The README describes persistent storage in InfinityDB and deletion of intermediate memory layers, but it does not clearly warn users that data will be retained and transformed across layers. This is dangerous because users may unknowingly allow long-term retention and lifecycle changes of potentially sensitive session content.
The installation and quick-start sections tell users how to run the system but omit a clear warning that local session JSONL data will be scanned, classified, embedded, and stored into persistent memory layers. In this context, the omission materially increases privacy risk because users may execute commands before understanding the scope of data processing.
The trigger phrases for activating consolidation and memory operations are broad enough to match ordinary user conversation, which can cause unintended storage, restructuring, or retrieval of user data. In a memory-management skill, accidental invocation is especially risky because it can persist sensitive content or modify stored knowledge without clear user intent.
The skill documents capabilities that involve filesystem access, network access, and persistent state, but it does not declare any explicit tool scope or allowed-tools boundary. This is dangerous because a memory-oriented skill can end up with broader execution privileges than users expect, increasing the blast radius of prompt-triggered actions and making abuse or accidental misuse harder to contain.