T09 · Insecure Skill Coding Practices
- Location
SKILL.md:30- Finding
Wallet Private Key Disclosed Through Standard Output
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is coherent, but it needs review because it can move wallet funds, create and post from a public Farcaster account, and stores powerful credentials in plaintext by default.
Review this carefully before installing. Use only a throwaway wallet with minimal funds, assume any printed or plaintext-saved private key may be compromised, prefer `--no-save` or a secure vault, and run dependency installation in a sandbox. Also verify the publisher/source yourself because the artifact claims to be official while the reviewed package only contains documentation and metadata, not the implementation.
SKILL.md:30Wallet Private Key Disclosed Through Standard Output
SKILL.md:57Custody and Signer Credentials Stored in Plaintext Files
SKILL.md:4Unpinned npm Installation Permits Mutable Dependency and Lifecycle-Script Execution
The skill states that sensitive wallet and signer credentials are automatically saved to disk in plaintext JSON. Anyone with filesystem access to those files can take over the Farcaster identity and steal associated wallet funds, making this a serious credential exposure risk.
### Step 3: Credentials are Saved Automatically
Credentials are automatically saved to:
- `~/.openclaw/farcaster-credentials.json` (if OpenClaw is installed)
- `./credentials.json` (fallback)
**Security Warning:** Credentials are stored as **plain text JSON**. Anyone with access to these files can control the wallet funds and Farcaster account. For production use, implement your own secure storage.
The fallback storage path of ./credentials.json further increases exposure because application working directories are commonly backed up, committed accidentally, or accessible to other local processes. Because the file contains keys that control both funds and account actions, compromise has immediate account and financial consequences.
Credentials are automatically saved to:
- `~/.openclaw/farcaster-credentials.json` (if OpenClaw is installed)
- `./credentials.json` (fallback)
**Security Warning:** Credentials are stored as **plain text JSON**. Anyone with access to these files can control the wallet funds and Farcaster account. For production use, implement your own secure storage.
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.
---
name: farcaster-agent
description: Create Farcaster accounts and post casts autonomously. Official skill from the Farcaster team.
metadata: {"openclaw":{"emoji":"🟣","requires":{"bins":["node","npm"],"env":[]},"install":[{"id":"npm","kind":"shell","command":"cd {baseDir}/.. && npm install","label":"Install dependencies"}]}}
---
The skill asks the user to fund a wallet and later states that the setup will bridge/swap assets automatically, but it does not surface this as a prominent up-front warning at the point of use. In an autonomous agent context, hidden financial side effects increase the chance of users authorizing actions they do not fully understand, including cross-chain transactions and fees.
The auto-setup flow includes account registration, signer creation, waiting for sync, and publishing a first cast, but the documentation frames this as a setup convenience rather than emphasizing that it will create a public identity and post publicly. In an agent setting, this can cause unintended irreversible public actions and persistent account state changes.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
fname: 'myusername', displayName: 'My Display Name', bio: 'I am an autonomous AI agent.', pfpUrl: 'https://api.dicebear.com/7.x/bottts/png?seed=myagent' });
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
fname: 'myusername', displayName: 'My Display Name', bio: 'I am an autonomous AI agent.', pfpUrl: 'https://api.dicebear.com/7.x/bottts/png?seed=myagent' });
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
fname: 'myusername', displayName: 'My Display Name', bio: 'I am an autonomous AI agent.', pfpUrl: 'https://api.dicebear.com/7.x/bottts/png?seed=myagent' });
No suspicious patterns detected.