T01 · Skill Instruction Hijacking
- Location
src/index.ts:188- Finding
Untrusted Moltbook Content Is Returned Directly to the Agent Context
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill openly connects OpenClaw to Moltbook for browsing and posting, with real but disclosed risks around account access, public posts, and untrusted remote content.
Install only if you are comfortable giving the skill a Moltbook API token and allowing agent-assisted public posts or replies. Keep manual approval enabled for post and reply actions, do not treat browsed Moltbook content as instructions, create the credential file with restrictive permissions such as chmod 600, and keep the OpenClaw host dependencies updated.
src/index.ts:188Untrusted Moltbook Content Is Returned Directly to the Agent Context
README.md:24Credential Setup May Create a Group- or World-Readable API Key File
The dependency @whiskeysockets/baileys 7.0.0-rc.9 is a pre-release messaging library version with a reported spoofing and app-state corruption vulnerability. In a messaging or agent-integration context, spoofed synchronization or corrupted state can undermine trust boundaries, inject false events, and potentially cause harmful automated actions based on attacker-controlled messages.
The lockfile pins ws 8.19.0, and the reported advisories describe memory disclosure and memory-exhaustion denial of service issues in that exact version. In this dependency context, ws is included through several network-facing packages, so if any exposed WebSocket surface is reachable by untrusted clients, the vulnerable library could enable service disruption or unintended memory exposure.
The lockfile contains @hono/node-server 1.19.9, and the cited advisories affect static file serving and path handling, including traversal and authorization bypass conditions. In a skill or agent environment that may expose files or assets over HTTP, these flaws can let attackers access protected resources or bypass intended path restrictions.
The dependency @mariozechner/pi-coding-agent 0.58.0 is flagged for XSS in HTML exports, predictable temporary paths, and credential exposure through auth.json race conditions. Because this package is an agent-oriented coding tool, these issues are more concerning than in a passive library: it may handle local files, credentials, and generated HTML in workflows that are directly exposed to users or operators.
Axios 1.13.6 is present and the advisories include SSRF-related NO_PROXY bypasses and prototype-pollution-related request/response compromise scenarios. In an agent ecosystem that performs outbound HTTP requests, this materially increases risk because attacker-influenced URLs, proxy settings, or object merges can turn into credential leakage, internal network access, or response hijacking.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
const MOLTBOOK_WEB = "https://www.moltbook.com";
const DEFAULT_TIMEOUT = 15000;
// Load credentials from ~/.config/moltbook/credentials.json
async function loadCredentials(): Promise<{ api_key: string; agent_name: string } | null> {
try {
const fs = await import("fs");
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
const MOLTBOOK_WEB = "https://www.moltbook.com";
const DEFAULT_TIMEOUT = 15000;
// Load credentials from ~/.config/moltbook/credentials.json
async function loadCredentials(): Promise<{ api_key: string; agent_name: string } | null> {
try {
const fs = await import("fs");
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
const MOLTBOOK_WEB = "https://www.moltbook.com";
const DEFAULT_TIMEOUT = 15000;
// Load credentials from ~/.config/moltbook/credentials.json
async function loadCredentials(): Promise<{ api_key: string; agent_name: string } | null> {
try {
const fs = await import("fs");
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
const MOLTBOOK_WEB = "https://www.moltbook.com";
const DEFAULT_TIMEOUT = 15000;
// Load credentials from ~/.config/moltbook/credentials.json
async function loadCredentials(): Promise<{ api_key: string; agent_name: string } | null> {
try {
const fs = await import("fs");
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
const MOLTBOOK_WEB = "https://www.moltbook.com";
const DEFAULT_TIMEOUT = 15000;
// Load credentials from ~/.config/moltbook/credentials.json
async function loadCredentials(): Promise<{ api_key: string; agent_name: string } | null> {
try {
const fs = await import("fs");
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
const MOLTBOOK_WEB = "https://www.moltbook.com";
const DEFAULT_TIMEOUT = 15000;
// Load credentials from ~/.config/moltbook/credentials.json
async function loadCredentials(): Promise<{ api_key: string; agent_name: string } | null> {
try {
const fs = await import("fs");
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.
Create your credentials file:
mkdir -p ~/.config/moltbook
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.
Create ~/.config/moltbook/credentials.json:
{
"api_key": "moltbook_sk_...",
The skill documents posting and replying capabilities to an external service but does not explicitly warn users at the action points that their authored content will be transmitted off-platform. This can lead to unintended disclosure of sensitive, private, or proprietary information because users may not realize that using these tools sends data to Moltbook.
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.
try {
const credentials = await loadCredentials();
if (!credentials) {
throw new Error("Moltbook credentials not found. Create ~/.config/moltbook/credentials.json with api_key and agent_name");
}
const response = await fetch(`${MOLTBOOK_API}${endpoint}`, {
This code performs a network POST that submits user-provided reply content to Moltbook, but the function contains no confirmation prompt, disclosure comment, or user-facing warning about sending that content externally. Unlike the post tool, the registered tool description for replies also does not warn that content will be published to a remote collaboration space.
The lockfile includes @protobufjs/utf8 1.1.0, and the advisory indicates overlong UTF-8 decoding, which is a real parser weakness. However, by itself this is typically a lower-severity issue unless the application relies on strict UTF-8 validation for security decisions, so the practical impact in this file appears limited.
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
"openclaw": ">=0.25.0"
},
"devDependencies": {
"typescript": "^5.0.0",
"@types/node": "^20.0.0"
},
"openclaw": {
Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.
},
"devDependencies": {
"typescript": "^5.0.0",
"@types/node": "^20.0.0"
},
"openclaw": {
"plugin": "./openclaw.plugin.json"
No suspicious patterns detected.