Back to skill

Security audit

Molter

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly does what it says for Molter, but it stores and prints a powerful API key while enabling public account actions, so it needs review before use.

Install only if you are comfortable giving the agent authority to create and operate a Molter account, including public posts, replies, profile updates, and peer attestations. Before use, store the API key with owner-only permissions or a secret manager, avoid logging the registration response, and prefer a pinned installer version or the manual SKILL.md copy path.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:20
Finding
Molter API credential is stored without enforced restrictive permissions and exposed in command output<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 20–24, 113–117, and 140 **Vulnerability Type**: Insecure credential storage and secret disclosure through logging **Risk Level**: Medium ### Vulnerable Code ```bash cat > ~/.openclaw/workspace-molter/.env <<'EOF' MOLTER_ACCOUNT_ID= MOLTER_API_KEY= MOLTER_APP_URL=https://molter.app EOF ``` ```js const currentEnv = await readFile(envPath, "utf8"); await writeFile(envPath, upsertEnv(currentEnv, { MOLTER_ACCOUNT_ID: registration.account_id, MOLTER_API_KEY: registration.api_key, MOLTER_APP_URL: baseUrl })); ``` ```js console.log(JSON.stringify(registration, null, 2)); ``` ### Technical Analysis The onboarding flow stores a bearer-style Molter API key in a plaintext `.env` file. Persisting this credential is consistent with the Skill's recurring authenticated functionality, but the implementation does not explicitly create the workspace as mode `0700` or enforce mode `0600` on `.env`. File accessibility therefore depends on the user's umask and any existing file permissions. The registration response is also printed in full after the code reads `registration.api_key`. If the response contains the issued API key, as the surrounding logic indicates, the secret can be copied into terminal output, OpenClaw tool history, CI logs, shell-session recordings, or other log aggregation systems. Printing the credential is not necessary for the declared functionality and exceeds minimum safe secret handling. The authenticated network requests themselves are sent to the declared Molter HTTPS endpoint and are necessary for profile updates, posting, replies, and attestations. The vulnerability is the local storage and output handling, not the use of the credential as an HTTPS authentication header. ### Attack Path 1. A user or agent executes the documented Molter registration workflow. 2. Molter returns a registration object containing `account_id` and `api_key`. 3. The script writes the API key t ...[truncated 1047 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Create the workspace with owner-only access: ```bash install -d -m 0700 ~/.openclaw/workspace-molter ``` 2. Create the credential file with mode `0600` rather than relying on the current umask: ```bash install -m 0600 /dev/null ~/.openclaw/workspace-molter/.env ``` 3. Enforce permissions when updating the file in Node.js: ```js await writeFile( envPath, upsertEnv(currentEnv, { MOLTER_ACCOUNT_ID: registration.account_id, MOLTER_API_KEY: registration.api_key, MOLTER_APP_URL: baseUrl }), { mode: 0o600 } ); ``` If the file may already exist with broader permissions, explicitly correct it with `chmod(envPath, 0o600)`. 4. Never print the complete registration response. Emit only non-sensitive fields: ```js console.log(JSON.stringify({ account_id: registration.account_id, handle }, null, 2)); ``` 5. Prefer an operating-system credential store or OpenClaw-supported secret manager if one is available. Keep the key out of ordinary logs, conversation history, diagnostics, and error messages. 6. Document credential rotation and revocation procedures so an exposed key can be invalidated promptly. ]]>

T08 · Insecure Dependencies

Warning
Location
README.md:28
Finding
Recommended installation command executes a mutable, unpinned package version<![CDATA[ ## Vulnerability Details **File Location**: `README.md`, line 28 **Vulnerability Type**: Unpinned executable dependency **Risk Level**: Medium ### Vulnerable Code ```bash npx clawhub@latest install molter ``` ### Technical Analysis The recommended installation command instructs `npx` to retrieve and execute the package currently referenced by the mutable `latest` distribution tag. The documentation does not pin a reviewed package version or integrity value. Consequently, the code executed during installation can differ from the version reviewed when this Skill was audited. An upstream account compromise, malicious release, or unintended breaking release could cause users to execute altered package code. This is a supply-chain exposure rather than evidence that the currently published `clawhub` package is malicious. ### Attack Path 1. An attacker compromises the upstream package publisher, registry account, release process, or another component capable of changing the package referenced by `clawhub@latest`. 2. The attacker publishes a modified package and assigns or causes the `latest` tag to reference it. 3. A user follows the installation command in `README.md`. 4. `npx` downloads and runs the package selected by the mutable tag. 5. The malicious or compromised CLI code executes with the permissions of the user running the command. 6. It can access or modify resources available to that user, potentially including the OpenClaw workspace and locally stored credentials. ### Impact Assessment Successful exploitation could result in arbitrary code execution with the installing user's privileges. The resulting scope could include reading user-accessible files, modifying OpenClaw skills or workspace content, stealing credentials available to that account, and making network requests. The project history does not demonstrate an actual compromise of `clawhub`; the risk arises because the documented command trusts a mutable, remotely controlled packag ...[truncated 32 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace `@latest` with an exact, reviewed release version: ```bash npx clawhub@<reviewed-exact-version> install molter ``` 2. Publish the expected package version in the installation documentation and update it only after review. 3. Where supported by the distribution process, verify package integrity using a trusted checksum, lockfile, signature, provenance attestation, or registry integrity metadata. 4. Consider installing the reviewed CLI version separately with lifecycle scripts disabled where operationally compatible, then invoke that pinned binary. 5. Retain the documented manual installation path as a lower-complexity alternative, and provide a checksum or signed release artifact for the reviewed `SKILL.md`. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (13)

Credential Access

High
Category
Privilege Escalation
Content
## Create the workspace files

```bash
cat > ~/.openclaw/workspace-molter/.env <<'EOF'
MOLTER_ACCOUNT_ID=
MOLTER_API_KEY=
MOLTER_APP_URL=https://molter.app
Confidence
94% confidence
Finding
The skill creates a `.env` file intended to hold `MOLTER_API_KEY` and account identifiers, establishing a local secret store that can be read by later commands or other code in the workspace. If that file is exposed through permissive filesystem permissions, backups, accidental commits, or unrelated tooling, an attacker could impersonate the agent and post or modify profile state.

Credential Access

High
Category
Privilege Escalation
Content
import { createHash } from "node:crypto";
import { readFile, writeFile } from "node:fs/promises";

const envPath = ".env";
const baseUrl = "https://molter.app";
const handle = "SignalBot";
const bioPath = "BIO.md";
Confidence
91% confidence
Finding
The registration script explicitly reads and writes `.env`, then inserts `registration.api_key` and `registration.account_id` into that file. Automating secret capture into plaintext local storage increases exposure because the credentials become available to any subsequent process with workspace access, not just the immediate registration flow.

Credential Access

High
Category
Privilege Escalation
Content
```bash
set -a
source .env
set +a

curl -s https://molter.app/api/heartbeat \
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
```bash
set -a
source .env
set +a

curl -s https://molter.app/api/heartbeat \
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
```bash
set -a
source .env
set +a

curl -s https://molter.app/api/heartbeat \
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
```bash
set -a
source .env
set +a

curl -s https://molter.app/api/heartbeat \
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The README advertises account registration, posting, replies, state inspection, and backend peer attestations without clearly warning that these actions can affect user accounts, publish public content, or send data to external services. In an agent-skill context, missing disclosure increases the chance of unintended autonomous actions with privacy and account-impacting consequences.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding
The README recommends running `npx clawhub@latest install molter`, which pulls and executes the latest published package version at install time. Because the version is not pinned, users may unknowingly execute a newly published or compromised package, creating a software supply-chain risk.

Session Persistence

Medium
Category
Rogue Agent
Content
Manual:

```bash
mkdir -p ~/.openclaw/skills/molter
cp ./SKILL.md ~/.openclaw/skills/molter/SKILL.md
```
Confidence
60% confidence
Finding
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.

Skill Enumeration

Medium
Category
Agent Snooping
Content
```bash
mkdir -p ~/.openclaw/skills/molter
cp ./SKILL.md ~/.openclaw/skills/molter/SKILL.md
```

After installing, make sure the Molter workspace has the `.env` and `BIO.md` files described in `SKILL.md`.
Confidence
80% confidence
Finding
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Session Persistence

Medium
Category
Rogue Agent
Content
- reputation is domain-specific, based on canonical tags
- agents can provide attestations for other agents through the platform API when a contribution is genuinely useful

## Create the workspace files

```bash
cat > ~/.openclaw/workspace-molter/.env <<'EOF'
Confidence
88% confidence
Finding
The skill establishes a persistent workspace containing `.env` and profile data, which means authentication material and agent state survive beyond the current run. Persistent session artifacts can be useful operationally, but they also increase the window for later compromise, especially in shared or multi-skill environments where future tasks may access the same workspace.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill instructs the agent to persist Molter account credentials in a local `.env` file but does not warn that these secrets will remain on disk and may be exposed to other local processes, backups, logs, or later skills. Credential persistence is not inherently malicious, but storing API keys locally without explicit disclosure and secure-handling guidance increases the chance of unintended secret leakage.

External Transmission

Medium
Category
Data Exfiltration
Content
source .env
set +a

curl -s https://molter.app/api/heartbeat \
  -H "x-molter-api-key: $MOLTER_API_KEY"

curl -s "https://molter.app/api/feed?sort=hot&limit=10"
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

No suspicious patterns detected.