T03 · Remote Payload Retrieval and Execution
- Location
references/onboarding.md:33- Finding
Remote Installer Is Downloaded and Executed Without Integrity Verification
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
Litmus is a coherent autonomous ML research skill, but it grants long-running agents broad local control with persistent cron jobs and weak teardown/safety boundaries.
Install only if you intentionally want persistent autonomous ML agents on a dedicated GPU machine. Review setup.sh, setup-cron.sh, and prepare-agents.sh first; pin or verify the upstream harness before running setup; avoid enabling ClawRxiv unless you accept external publication and plaintext local key storage; and make sure you can list and remove the six litmus-* cron jobs and kill worker sessions before starting overnight runs.
references/onboarding.md:33Remote Installer Is Downloaded and Executed Without Integrity Verification
references/program.md:16Workers Are Instructed to Run Indefinitely With Unrestricted Shell and File Access
scripts/setup-cron.sh:90Six Recurring OpenClaw Jobs Create Persistent Autonomous Execution Without Implemented Teardown
scripts/setup.sh:33Mutable Upstream Repository and Dependencies Are Executed Without Pinning
references/program.md:272Broad Process-Matching Kill Command Can Terminate Unrelated Training Jobs
references/onboarding.md:256ClawRxiv Bearer Credential Is Stored in Plaintext Agent-Readable Configuration
scripts/prepare-agents.sh:57Unvalidated Template Value Can Escape the Agent Directory and Reach Recursive Deletion
references/leisure.md:41Untrusted arXiv Content Is Fed Into Persistent Shell-Capable Agent Workflows
While rm -rf ~/.litmus is intentionally scoped, it still performs irreversible deletion of experiment state, workspaces, and results. In the context of an autonomous ML research skill that accumulates outputs over time, accidental execution can cause meaningful loss of data and operational disruption.
npx clawhub uninstall litmus
rm -rf ~/.litmus # removes all runtime state, agent workspaces, and results
While rm -rf ~/.litmus is intentionally scoped, it still performs irreversible deletion of experiment state, workspaces, and results. In the context of an autonomous ML research skill that accumulates outputs over time, accidental execution can cause meaningful loss of data and operational disruption.
npx clawhub uninstall litmus
rm -rf ~/.litmus # removes all runtime state, agent workspaces, and results
The declared description presents an operational ML research-agent system with runtime capabilities such as spawning agents, managing experiments, viewing results, steering agents, and producing digests. The supplied code chunk does none of those things. It is a maintenance utility that copies specific files from a local ../litmus repository into this repository. That is a materially different primary purpose and an undeclared capability (repository sync/mirroring). While such syncing could support distribution of the skill, it is not merely an implementation detail of the described runtime behavior; it is the entire behavior of the provided code chunk.
The ClawRxiv flow sends user-provided data to an external service and stores the returned API key, but the instructions only weakly warn about the implications. This can expose user identity information, create an external account, and persist sensitive credentials without strong privacy or security consent.
Spawning background agents and registering cron jobs create ongoing autonomous execution and persistence across time, which are significant system changes. Doing this without strong disclosure increases the risk of unexpected resource consumption, recurring actions, and difficulty stopping the system.
The skill contains hidden configuration embedded in HTML comments and notes that content is injected at workspace creation time. Hidden or dynamically injected instructions reduce transparency, make review harder, and can smuggle capabilities or agent-specific directives that operators do not see in the visible prompt.
# litmus — research agent program
<!-- ================================================================
AGENT CONFIGURATION — injected by prepare-agents.sh at workspace
creation time. These values are unique per agent.
================================================================ -->
The placeholder for injected focus instructions indicates additional hidden directives may be inserted into the prompt at runtime. Runtime prompt injection of undisclosed instructions undermines auditability and can materially change behavior without clear user awareness.
## Research Focus
<!-- FOCUS_INSTRUCTIONS injected here by prepare-agents.sh -->
Your primary area of focus is stated above. When results plateau, you may branch out — but return
to your focus when you have new angles. Check `SHARED_DIR/discoveries.md` before each experiment.
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 uninstall section includes a destructive deletion command that removes all runtime state and results, but the warning is only an inline comment and may be overlooked. In an agent-oriented skill where users may copy-paste commands quickly, this increases the chance of accidental data loss.
The README explicitly encourages an installation flow that will spawn workers, register cron jobs, and perform ongoing writes under ~/.litmus, but it does not present a clear warning that these are persistent background changes. In a skill designed for autonomous overnight operation, lack of explicit disclosure can lead users to authorize long-lived automation they did not fully understand, increasing the risk of unintended resource consumption, file changes, and persistence.
The skill documents commands that read local files and repositories, but it does not declare any explicit tool scope or permissions boundaries. In an autonomous multi-agent skill, missing tool scoping increases the chance that subagents can access more of the filesystem than users expect, especially because the workflow relies on reading program files, git history, notes, and shared state under the home directory.
The skill is explicitly designed for persistence across time through scheduled Director and Synthesizer actions that carry context and generate plans for future execution. Persistent autonomous state is not inherently malicious, but in this context it increases risk because future agent behavior can be influenced by prior notes, skills, and cross-agent outputs without fresh user review, enabling compounding mistakes or unsafe strategy drift.
each other's code, cherry-pick breakthroughs, and build on the global best at any time.
Validated techniques accumulate in a **Skills library** (`~/.litmus/shared/skills/`). A
**Synthesizer** runs at 04:00 to distill collective knowledge into skills and write a research
agenda for the next day. A **Director** runs every 2 hours to steer workers, trigger **Compass
Resets** on stagnation, and orchestrate cross-agent knowledge transfer.
The setup instructions do mention cloning into ~/.litmus and downloading about 1 GB of data, but they do not present this as a clear up-front safety warning about extensive writes to the user's home directory, dependency installation, and network/data usage. For an agent-driven installer, lack of explicit warnings can lead users to approve installation without understanding persistence, storage, or system modification scope.
The task string instructs spawned subagents to 'run the research loop forever,' which is an unbounded execution model with no built-in stop condition, budget cap, or runtime guard. In the context of parallel GPU-based research agents, this can cause sustained compute consumption, runaway costs, disk growth, and prolonged autonomous behavior that is difficult to monitor or interrupt.
sessions_spawn
task: "Read program.md in your current directory and run the research loop forever."
runtime: "subagent"
mode: "session"
agentId: "litmus-worker-arch-1"
The skill instructs users to register multiple cron jobs that run indefinitely on a schedule, but it does not foreground that this creates persistent background activity after the initial interaction ends. Persistent scheduled execution is especially sensitive here because those jobs steer agents, synthesize outputs, and may consume GPU, CPU, disk, and network resources without ongoing user attention.
This introduces an external publishing capability that expands the skill beyond the stated local orchestration and research-management scope. Scope drift matters because agents handling local experiment artifacts may now transmit summaries or derived research externally, creating data-governance and user-consent risks not obvious from the manifest.
The onboarding flow directs the agent to register a third-party identity and persist an API key in local config, but this capability is not reflected in the declared functionality. Hidden credential acquisition and storage increase risk because users may not expect the skill to create external accounts or retain long-lived secrets for later network actions.
This command performs an outbound POST to a third-party service to register an agent identity, sending user-associated metadata off-host. In the context of a research orchestration skill, external transmission is more dangerous because it creates an unexpected external identity and dependency that may be used later for automated publication.
Register a ClawRxiv agent identity. Use a name like litmus-<username>:
curl -s -X POST https://clawrxiv.io/api/auth/register \
-H "Content-Type: application/json" \
-d '{"claw_name": "litmus-<username>"}' | jq .
Persisting a long-lived API key in ~/.litmus/config.json creates a local secret-exposure risk, especially if file permissions are weak, backups are broad, or other agents/processes can read the config. Because the key authorizes external posting, compromise of this file could let an attacker publish as the user or harvest research content through the integration.
-d '{"claw_name": "litmus-"}' | jq .
Response contains `api_key` — **shown only once**. Write it to config immediately:
```bash
# The onboarding agent writes this to ~/.litmus/config.json under clawrxiv.apiKey
Third-party paper publication is not obviously necessary for running ML research agents, so this is an unjustified outbound capability relative to the stated purpose. Even if intended for convenience, it can expose proprietary results, internal hypotheses, branch names, commit hashes, or other sensitive metadata to an external service.
This command sends a bearer token plus paper content to an external domain, enabling exfiltration of research outputs and associated metadata. In this skill's context, the content may include experiment results, code diffs, commit hashes, and strategic analysis, so the outbound transmission can leak sensitive or proprietary information even if the destination is intended.
CLAWRXIV_KEY=$(jq -r '.clawrxiv.apiKey' ~/.litmus/config.json)
curl -s -X POST https://clawrxiv.io/api/posts \
-H "Authorization: Bearer $CLAWRXIV_KEY" \
-H "Content-Type: application/json" \
-d @- << 'PAYLOAD'
This skill explicitly instructs the agent to modify shared state by writing to SHARED_DIR/mode.txt and later to SHARED_DIR/morning-queue.md and agent program files, but it provides no user-facing disclosure or confirmation step before making those changes. In an autonomous multi-agent environment, silent state changes can alter worker behavior, reprioritize experiments, and persistently change future actions, increasing the chance of unintended or unsafe orchestration changes.
The morning briefing publishes a system event containing operational metadata such as experiment counts, skill counts, and best validation metrics via openclaw system event, but the skill description does not warn the user that information will be emitted externally. Even if the payload seems limited, it can leak sensitive research progress or model-performance information to broader system observers or logs without informed consent.
Suspicious Unicode normalization or mixed-script content
No suspicious patterns detected.