T03 · Remote Payload Retrieval and Execution
- Location
docs/installation.md:68- Finding
Mutable Remote Scripts Are Downloaded and Executed Without Integrity Verification
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is a local memory tool, but it asks users to enable persistent automation and stores broad memory content in plaintext with under-scoped install and safety controls.
Review carefully before installing. Use a pinned release or commit, avoid the mutable curl install path, back up MEMORY.md, and do not enable heartbeat or cron until you are comfortable with daily local writes. Treat insight.db as sensitive because it may contain copied memory records, configuration details, and credential-related notes; restrict file permissions and avoid storing secrets in memory files.
docs/installation.md:68Mutable Remote Scripts Are Downloaded and Executed Without Integrity Verification
scripts/nightly_meta_extract.py:27Potentially Sensitive Memory Is Copied into a Plaintext Searchable Database
scripts/trust_scorer.py:89Undeclared Persistent Trust Scoring Can Bias External Tool Selection
scripts/nightly_meta_extract.py:243Extraction Log Update Can Delete Existing MEMORY.md Content
docs/api.md:153Documented Query Function Constructs LIMIT Clause Through String Interpolation
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
"summary": lines[0],
"details": lines
})
return rules
def apply_guardrails():
"""Run guardrail check and output active rules."""
The README instructs users to install the skill via npx skills add timothysong0w0/claw-memory-lite --agent openclaw without pinning a specific version or immutable commit. That creates a supply-chain risk: a later compromised or malicious update to the referenced package/repository could be fetched and executed by users at install time, especially because this is an installation command presented as the recommended path.
The installation command uses npx skills add ... without pinning a specific version of the package or referenced skill artifact. This can cause users to fetch and execute whatever version is current at install time, creating a supply-chain risk if the package, registry entry, or dependency chain is updated maliciously or compromised later.
This is a markdown file, so SQP-2 applies to omissions in user-facing documentation. The 'Delete Record' section shows a function that permanently removes records, but the surrounding documentation does not warn that the action is destructive or irreversible.
The documentation provides a function to export all memory records to an arbitrary JSON file path without any warning about sensitive data exposure or handling requirements. Because the dataset may contain long-term memory content, source files, and timestamps, normal use could lead to accidental exfiltration, insecure storage, or over-broad sharing of potentially sensitive information.
The installation guide instructs users to run npx skills add ... without pinning a specific version or commit of the installer or referenced package. This creates a supply-chain risk because future package changes, account compromise, or a malicious republish could cause different code to execute than what the user reviewed in the repository.
These instructions say the installer will automatically copy scripts, initialize a database, and update HEARTBEAT.md, but they do not clearly warn that workspace files will be modified. Silent file writes and configuration changes increase the chance of unintended persistence or unexpected environment modification, especially in an agent workspace.
The guide recommends adding a cron job that will execute the extraction script daily, creating ongoing persistence on the host. Even if intended for maintenance, recurring execution expands risk because later script modifications, repository compromise, or unsafe script behavior would be triggered automatically without fresh user review.
# Edit crontab
crontab -e
# Add daily extraction at 3 AM UTC
0 3 * * * cd /home/node/.openclaw/workspace && python3 scripts/extract_memory.py
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
# Edit crontab
crontab -e
# Daily extraction at 3 AM UTC
0 3 * * * cd /home/node/.openclaw/workspace && python3 scripts/extract_memory.py >> logs/memory_extraction.log 2>&1
The documentation recommends installing a skill via npx skills add app/skills@weather without pinning a specific version or immutable source. This can lead to non-reproducible installs and supply-chain risk if the upstream package changes or is compromised, though in this README example context it appears instructional rather than intentionally harmful.
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 text states that all Python execution must use /root/.local/bin/uv, which imposes a fixed tooling/locale-style operational policy on all users without presenting it as optional or context-specific. This is a natural-language policy constraint that is not justified as environment-specific in the file and does not offer user choice.
This script prints raw database record content directly to stdout, and the database is explicitly described as long-term memory storage, which may contain sensitive operational, project, communication, or security data. In CLI and agent contexts, stdout is often logged, captured, or surfaced to other components, so unrestricted output can cause accidental data exposure even without an external attacker.
The top-level documentation claims the script 'Combines' daily extraction, guardrail regression handling, friction detection, and dynamic trust scoring as core behavior. In practice, L54-L277 implement only markdown parsing, SQLite writes, and MEMORY.md updates; the other pipelines are merely attempted imports and optional function calls at L323-L347, with graceful skipping if absent. This is an active mismatch between documentation and actual implemented behavior.
The script persists extracted content from workspace memory files into a SQLite database automatically, and those files may contain sensitive notes, credentials, or operational context. In an agent skill context, silent long-term storage increases data retention risk and broadens the blast radius if the database is later accessed by other components or an attacker.
The script updates MEMORY.md automatically, modifying a user-visible workspace file without an explicit confirmation step. In this context, silent rewriting can tamper with audit/history records, surprise users, and make it harder to distinguish original notes from tool-generated content, especially when run on a schedule.
This markdown file instructs users to run scheduled and manual extraction commands and states that the extraction script automatically updates MEMORY.md. While the behavior is described, there is no clear caution that these operations will write to or alter local user data files on an ongoing basis, which is the kind of user-impacting behavior that should be explicitly warned about in markdown guidance.
Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.
- [API Reference](api.md) - Database schema and functions
- [Examples](../examples/) - Sample usage patterns
- [Contributing](../README.md#contributing) - Extend functionality
The README shows an execution command for extraction immediately after a preview mode, but does not clearly warn that the non-review invocation will modify persistent state. Users may run the command without understanding it writes to the database or changes stored memory data.
The docstring states the friction categorization is based on "generic English," which means reports in other languages may not be handled correctly. This creates a natural-language policy concern because the skill implicitly assumes one language without offering a choice or documenting a justified locale constraint.
No suspicious patterns detected.