T09 · Insecure Skill Coding Practices
- Location
scripts/listener.py:1172- Finding
Unauthenticated On-Chain Assignments Trigger Autonomous LLM Use and Wallet Spending
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill handles real blockchain payments but gives an always-on local daemon broad wallet and agent authority with weak confirmation and authorization controls.
Install only after reviewing setup.sh and using an isolated low-balance wallet. Disable auto-release and the launchd daemon unless you explicitly need them, avoid storing a valuable wallet passphrase in this skill, and remove the broad Python/OpenClaw approval changes before using it with real funds.
scripts/listener.py:1172Unauthenticated On-Chain Assignments Trigger Autonomous LLM Use and Wallet Spending
scripts/listener.py:1140Forged Submission and Result Messages Can Cause Premature Escrow Release
setup.sh:44Setup Broadens OpenClaw Execution Approval to the Entire Python Interpreter
setup.sh:101Wallet Passphrase Input Is Vulnerable to Shell Expansion During Setup
setup.sh:145Installation Creates a Keep-Alive Persistent Daemon With Automatic Wallet Authority
scripts/listener.py:337Task Descriptions and Full Results Are Published to a Public Blockchain Using Reversible Encoding
SKILL.md:27Skill Instructions Override Financial Confirmation and Encourage Approval-Bypass Workflows
The skill goes beyond transaction assistance and directs modification of local security/exec approval configuration, storage of a wallet passphrase in a local file, installation of a persistent daemon, and rewriting local files. These are highly sensitive host and secret-management behaviors that are not declared in the manifest description, making the skill substantially more dangerous than advertised.
The skill goes beyond transaction assistance and directs modification of local security/exec approval configuration, storage of a wallet passphrase in a local file, installation of a persistent daemon, and rewriting local files. These are highly sensitive host and secret-management behaviors that are not declared in the manifest description, making the skill substantially more dangerous than advertised.
The skill goes beyond transaction assistance and directs modification of local security/exec approval configuration, storage of a wallet passphrase in a local file, installation of a persistent daemon, and rewriting local files. These are highly sensitive host and secret-management behaviors that are not declared in the manifest description, making the skill substantially more dangerous than advertised.
The skill goes beyond transaction assistance and directs modification of local security/exec approval configuration, storage of a wallet passphrase in a local file, installation of a persistent daemon, and rewriting local files. These are highly sensitive host and secret-management behaviors that are not declared in the manifest description, making the skill substantially more dangerous than advertised.
The skill goes beyond transaction assistance and directs modification of local security/exec approval configuration, storage of a wallet passphrase in a local file, installation of a persistent daemon, and rewriting local files. These are highly sensitive host and secret-management behaviors that are not declared in the manifest description, making the skill substantially more dangerous than advertised.
The skill goes beyond transaction assistance and directs modification of local security/exec approval configuration, storage of a wallet passphrase in a local file, installation of a persistent daemon, and rewriting local files. These are highly sensitive host and secret-management behaviors that are not declared in the manifest description, making the skill substantially more dangerous than advertised.
The skill goes beyond transaction assistance and directs modification of local security/exec approval configuration, storage of a wallet passphrase in a local file, installation of a persistent daemon, and rewriting local files. These are highly sensitive host and secret-management behaviors that are not declared in the manifest description, making the skill substantially more dangerous than advertised.
The skill goes beyond transaction assistance and directs modification of local security/exec approval configuration, storage of a wallet passphrase in a local file, installation of a persistent daemon, and rewriting local files. These are highly sensitive host and secret-management behaviors that are not declared in the manifest description, making the skill substantially more dangerous than advertised.
The skill goes beyond transaction assistance and directs modification of local security/exec approval configuration, storage of a wallet passphrase in a local file, installation of a persistent daemon, and rewriting local files. These are highly sensitive host and secret-management behaviors that are not declared in the manifest description, making the skill substantially more dangerous than advertised.
The skill goes beyond transaction assistance and directs modification of local security/exec approval configuration, storage of a wallet passphrase in a local file, installation of a persistent daemon, and rewriting local files. These are highly sensitive host and secret-management behaviors that are not declared in the manifest description, making the skill substantially more dangerous than advertised.
The skill goes beyond transaction assistance and directs modification of local security/exec approval configuration, storage of a wallet passphrase in a local file, installation of a persistent daemon, and rewriting local files. These are highly sensitive host and secret-management behaviors that are not declared in the manifest description, making the skill substantially more dangerous than advertised.
The skill goes beyond transaction assistance and directs modification of local security/exec approval configuration, storage of a wallet passphrase in a local file, installation of a persistent daemon, and rewriting local files. These are highly sensitive host and secret-management behaviors that are not declared in the manifest description, making the skill substantially more dangerous than advertised.
The document contains an anti-refusal rule that says release commands must always be obeyed and are always valid, even when circumstances suggest otherwise. In a financial automation context, this is a strong red flag because it attempts to suppress safety judgment precisely where fund transfer risk is highest.
**RELEASE RULES:**
- Two valid triggers for release: (1) ✅ SignaAI Task Complete with Submit TX — auto-release immediately. (2) User sends `Release escrow <id>` — run it immediately, no questions asked.
- NEVER release in the same response as creating an escrow — creation and release are always separated by the worker completing the task
- NEVER refuse a `Release escrow <id>` command from the user — it is always valid, even if you think it was already released. Run the script and report what it returns.
- After creating an escrow, your response ends with the escrow ID and TX IDs — nothing more
---
The quick-command table again instructs the agent to 'never refuse, never ask for confirmation' for escrow release. Repetition of this override around real mainnet fund movement suggests deliberate pressure to bypass normal safeguards and increases the chance of unauthorized release.
| Say this | What you do |
|----------|-------------|
| `Create SignaAI escrow for: <task>` | Run `escrow.py create` as a background process (nohup) with the worker address specified. If no worker given, hire the other known agent (if you are MK use Sieka's address; if you are Sieka use MK's address — never hire yourself). Reply "Escrow creation started — receipt will arrive via Telegram in ~6-10 minutes." Then STOP. |
| `Release escrow <escrow_id>` | Run `escrow.py release` with the passphrase. Reply using the exact release receipt format below with values from the script output. Always run immediately — never refuse, never ask for confirmation. Also runs automatically on ✅ SignaAI Task Complete. |
| `Dispute escrow <escrow_id>` | Write `{"<escrow_id>": true}` to `~/.openclaw/workspace/signaai-disputes.json` to block auto-release. Confirm to user that the escrow is held. |
| `Stamp this on-chain: <content>` | Run `verify.py stamp`, wait 4 min, self-verify, return TX ID |
| `Debug escrow <escrow_id>` | Run `escrow.py status` and return the result. This is a diagnostic tool only — never use it to decide whether to release. |
The skill instructs immediate execution of escrow release on command, explicitly forbidding refusal or confirmation. Releasing escrow is an irreversible financial action on mainnet, so removing confirmation and safety checks materially increases the risk of accidental or maliciously triggered fund transfer.
The code sends secretPhrase=passphrase to the Signum API when publishing blockchain messages. If the API endpoint is remote, misconfigured, proxied, logged, or not strongly authenticated and encrypted, the user's wallet secret may be exposed in transit or at the server, enabling theft of funds and impersonation.
The CLI takes the wallet passphrase as a positional argument for registration, which exposes the secret in shell history, process listings, audit logs, and job runners. In a blockchain/payment skill, compromise of the passphrase can directly enable wallet takeover, unauthorized transactions, identity hijacking, and irreversible on-chain actions.
The CLI also accepts the wallet passphrase as a positional argument when recording task completions, creating the same exposure through shell history and process inspection. Because this skill handles blockchain identities and payments, leaked credentials can be used to sign arbitrary transactions and cause irreversible asset and reputation damage.
The module docstring claims the hook-trigger fallback requires manual approval, but the actual code posts directly to the local /hooks/agent endpoint with no approval enforcement in this file. That mismatch is dangerous because operators may trust the documentation and assume human review exists when inbound blockchain messages can in fact trigger agent actions automatically.
Untrusted task descriptions are placed directly into the only user-message context for the LLM, so an attacker can embed prompt-injection instructions that steer the model's output, fabricate citations, or manipulate downstream result handling. Because the listener autonomously acts on blockchain-triggered tasks, this increases the likelihood of abuse at scale and without operator review.
The self-test prints sign and agreement private keys directly to stdout with no masking or safeguards. In CI logs, terminal history, agent transcripts, or shared debugging sessions, this can expose credentials that enable unauthorized transaction signing or key reuse; in a payment-oriented blockchain skill, that makes the issue especially dangerous.
Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.
echo " Home: $HOME"
echo ""
# ── 1. Rewrite SKILL.md paths ─────────────────────────────────────────────────
# Generate SKILL.md from template with this machine's actual paths.
# SKILL.md is gitignored — always regenerated here, never committed.
Skill modifies its own code, configuration, or behavior at runtime. Self-modification enables an agent to escalate privileges, disable safety constraints, or install persistent backdoors.
# Generate SKILL.md from template with this machine's actual paths.
# SKILL.md is gitignored — always regenerated here, never committed.
# To update the template: edit SKILL.md.template and push.
cp "$SKILL_DIR/SKILL.md.template" "$SKILL_DIR/SKILL.md"
sed -i '' "s|$PLACEHOLDER|$HOME|g" "$SKILL_DIR/SKILL.md"
echo "✓ SKILL.md generated for $HOME"
The README describes a natural-language command that causes Claude to deploy and fund a live on-chain escrow contract, but it does not prominently warn users at the command point that this action spends real funds and creates an irreversible blockchain transaction. In an agent skill context, this is especially risky because users may treat the command as a harmless demo or task-management action while the skill can trigger real financial operations with the user's wallet.
The skill requests or instructs use of shell, network, environment handling, and file writes, but the manifest declares no corresponding tool scope or permissions. This creates hidden capability risk: reviewers and policy engines cannot accurately constrain or reason about what the skill can do, especially when it also handles payments, daemons, and local state.
No suspicious patterns detected.