T03 · Remote Payload Retrieval and Execution
- Location
scripts/anchor.js:126- Finding
Unpinned Remote Installer Piped Directly into Bash
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill has a coherent memory-backup purpose, but it handles very sensitive agent memory and wallet data with broad publication, persistence, and unsafe command execution patterns that need human review.
Install only after reviewing and redacting the exact memory files it will ingest. Do not use it in workspaces containing secrets, private user data, proprietary logs, or sensitive issues. Avoid storing RMN_SPONSOR_KEY in generated config, do not run suggested curl-to-bash installers, and treat restored memory and visualization output as untrusted until verified in an isolated workspace.
scripts/anchor.js:126Unpinned Remote Installer Piped Directly into Bash
scripts/anchor.js:42Full Agent Memory and Identity Data Published to IPFS
scripts/anchor.js:147Shell Command Injection in Blockchain Anchoring Operations
scripts/resurrect.js:84Command Injection Through Resurrection Arguments and On-Chain Metadata
scripts/setup.js:198Wallet Private Key Persisted in Plaintext Configuration
scripts/resurrect.js:106Unverified Remote Memory Replaces Active Persistent State
scripts/visualize.js:184Unauthenticated Visualization API Exposes Memory over the Network
scripts/visualize.js:162Stored Cross-Site Scripting in Memory Visualization Tooltip
SKILL.md:28Persistent Heartbeat Hook Performs Automatic Destructive Memory Mutation
The skill's core behavior is to archive memory and logs to IPFS and make them recoverable later, which normalizes persistent external storage of potentially sensitive agent and user data. In the context of agent memory, logs often contain API outputs, internal reasoning artifacts, user content, and operational metadata, so automatic retention/export materially increases disclosure risk.
The README explicitly advertises automatic upload of agent memory data to IPFS but does not clearly warn that IPFS content may be publicly retrievable, effectively persistent, and inappropriate for secrets, personal data, logs, or proprietary context. Because the skill processes MEMORY.md and log-like sources, users could unknowingly publish sensitive data to decentralized storage with limited practical ability to revoke it.
The architecture section describes transforming raw inputs, memory files, issues, and layered cognition data into a complete memory artifact stored on IPFS and linked on-chain. This context makes the issue more dangerous because it is not a narrow backup of a harmless artifact; it appears to aggregate broad, high-sensitivity inputs into long-lived externally retrievable storage.
The skill prominently advertises IPFS upload and on-chain anchoring of agent memory, but it does not provide a clear, explicit user-facing warning that memory content may be disclosed to third-party infrastructure and potentially become effectively permanent. In this context, users may reasonably not understand that operational memory, issue files, and other workspace-derived content could leave the local environment and be recoverable indefinitely.
These instructions direct broad scanning of MEMORY.md, memory/.md, and .issues/ and convert them into a memory structure that is later uploaded to IPFS and anchored on-chain. Because these sources can contain user-provided prompts, internal notes, issue contents, secrets, or sensitive operational data, this creates a clear disclosure path for information far beyond what is necessary for normal skill operation.
The configuration and command flow explicitly enable uploading full memory data to IPFS and periodically re-anchoring it, establishing an ongoing disclosure mechanism for accumulated agent memory. Repeated publication increases exposure over time and can preserve historical sensitive states, making accidental disclosure harder to contain or revoke.
The instruction to upload memory to IPFS is a direct context-leakage vector because it transmits agent memory derived from local workspace content to external decentralized storage. In this skill's context, the danger is elevated because the surrounding workflow also ties that upload to blockchain metadata and recurring updates, increasing permanence, discoverability, and blast radius.
- Check sponsor wallet balance
- Mint ERC-8004 Agent Identity NFT on Base
- Set memoryRoot, soulHash, memoryManifest metadata
- Upload memory to IPFS
- Save identity to `<workspace>/rmn-soul-data/identity.json`
### Step 3: Add Heartbeat Hook
Referenced artifact was not completely inspected
| `node scripts/setup.js` | Initialize/re-migrate memory network |
Referenced artifact was not completely inspected
| `node scripts/anchor.js` | Update memory on-chain (re-compute + upload + write) |
Referenced artifact was not completely inspected
| `node scripts/resurrect.js --agent-id <id>` | Restore agent from chain + IPFS |
The script uploads memory.json and a derived manifest containing topology data to IPFS automatically, without any user confirmation, redaction step, or sensitivity check. Because IPFS content is effectively public and durable once shared, this can irreversibly expose sensitive agent memory, internal graph structure, or confidential data embedded in the memory store.
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
const cast = hasCast();
if (!cast) {
console.log('\n⚠️ Foundry cast not found. Install: curl -L https://foundry.paradigm.xyz | bash && foundryup');
return;
}
The README promotes automatic chain registration and recurring anchoring without an explicit warning that blockchain writes are irreversible, externally visible, and may incur recurring gas costs. Users may enable periodic anchoring without understanding they are authorizing durable external actions tied to a wallet and identity artifact.
The resurrection workflow legitimizes moving complete retained memory from chain-linked storage into a fresh agent environment, which can spread sensitive data across systems and operators if access controls are weak or wallets are compromised. While the feature is framed as recovery, it still increases the blast radius of any archived sensitive content by encouraging replay and redeployment across environments.
The skill instructs the agent to execute setup automatically on first load, including scanning local memory files and creating new workspace artifacts, without an explicit warning or consent gate. Automatic initialization increases the risk of collecting and transforming sensitive local context before the user understands the data flow or storage consequences.
The setup is split into seemingly administrative steps—initialize, register identity, add heartbeat—while the cumulative effect is broad memory collection followed by permanent external publication and recurring updates. That staged presentation can obscure the true privacy impact, making it more likely that an agent or user will proceed without recognizing the disclosure risk until after data has been exported.
The script sends on-chain transactions immediately when a private key is available from CLI args, config, or environment, with no interactive confirmation or transaction preview. This increases the chance of unintended blockchain writes, misuse of the configured key, and accidental spending if the script is run in the wrong environment or with maliciously modified config values.
The script unconditionally creates the workspace data directory and writes recovered memory to a fixed path (rmn-soul-data/memory.json) without checking whether a file already exists or prompting the user. In this context, the data being written is fetched from chain/IPFS and may overwrite valuable local state or backups, causing data loss or replacing trusted local data with remotely sourced content.
The restoration phase writes identity.json and config.json to fixed locations under the workspace with no overwrite protection, backup, or consent flow. Because these files affect the restored agent's local identity and configuration, silent replacement can corrupt an existing setup, destroy prior configuration, or cause the local environment to trust attacker-controlled remote metadata after a resurrection operation.
The engine persistently writes all memory nodes to disk automatically, which can store sensitive user content without any notice, consent, retention policy, or access control evident in this file. In a memory-oriented skill, this increases privacy risk because personal or confidential data may be retained longer than expected and later exposed through local compromise, backups, logs, or multi-user environments.
The top-level documentation says this script will auto-migrate agent memory files into a recursive neural network. In addition to that migration behavior, the code later writes a new config.json with chain, registry, IPFS, and sponsor-key fields, which is a distinct initialization/configuration action not described by the docstring.
The setup script recursively reads multiple memory-related files from the workspace and persists their contents into a new datastore without explicit consent, confirmation, or meaningful warning. In this skill context, those files may contain highly sensitive personal, identity, or operational data, so silent aggregation and duplication increases exposure and makes accidental collection more dangerous.
The script reads RMN_SPONSOR_KEY from the environment and writes it directly into config.json on disk, converting a transient secret into a persisted plaintext credential. If the workspace is shared, committed, backed up, or later exposed, the sponsor key could be stolen and abused for unauthorized blockchain-related actions or account misuse.
The embedded HTML explicitly sets the document language to zh-CN, which indicates a fixed locale. The file also includes Chinese-only UI labels later in the page, and there is no visible mechanism for user opt-in or locale selection.
The sidebar heading uses Chinese text, reinforcing that the skill presents a fixed-language interface. No surrounding comments, prompts, or configuration indicate that users can choose another language or that the tool is intentionally limited to a Chinese-speaking audience.
Detected: suspicious.dangerous_exec, suspicious.env_credential_access