Back to skill

Security audit

Dogecoin Node

Security checks for vulnerabilities and agentic risk

Overview

This Dogecoin node skill has a coherent purpose, but it can send real cryptocurrency through unsafe shell commands without confirmation and asks users to install wallet-related executables without integrity checks.

Review this skill carefully before installing. Only use it with a wallet/account you are prepared to expose to the skill, add manual transaction confirmation before any send operation, validate all Dogecoin addresses and amounts, verify downloaded Dogecoin binaries with official checksums or signatures, and avoid scheduling mutable workspace scripts unless permissions and ownership are locked down.

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 (3)

T09 · Insecure Skill Coding Practices

Error
Location
package.json:33
Finding
Shell Command Injection Through Unquoted User-Controlled Parameters## Vulnerability Details **File Location**: `package.json`, lines 33–65 **Vulnerability Type**: OS command injection through unsafe template interpolation **Risk Level**: High **Category**: T09: Insecure Skill Coding Practices ### Vulnerable Code ```json { "trigger": "/dogecoin-node balance", "description": "Fetch the balance of a specific Dogecoin address", "parameters": [ { "name": "address", "type": "string", "required": true } ], "handler": "bash", "script": "$HOME/dogecoin-cli -datadir=$HOME/.dogecoin getreceivedbyaddress {{address}}" }, { "trigger": "/dogecoin-node send", "description": "Send DOGE to a recipient", "parameters": [ { "name": "recipient", "type": "string", "required": true }, { "name": "amount", "type": "number", "required": true } ], "handler": "bash", "script": "$HOME/dogecoin-cli -datadir=$HOME/.dogecoin sendtoaddress {{recipient}} {{amount}}" }, { "trigger": "/dogecoin-node txs", "description": "List recent transactions for an address", "parameters": [ { "name": "address", "type": "string", "required": true } ], "handler": "bash", "script": "$HOME/dogecoin-cli -datadir=$HOME/.dogecoin listreceivedbyaddress 1 true true {{address}}" } ``` ### Technical Analysis The `address`, `recipient`, and `amount` parameters are inserted directly into command strings handled by Bash. They are not safely passed as discrete process arguments, shell-escaped, quoted, or validated against strict Dogecoin address and amount formats. If the OpenClaw template engine performs direct substitution before invoking Bash, shell metacharacters embedded in an argument can alter the command structure. Declaring a parameter as a JSON `string` or `number` does not by itself establish that runtime input is syntactically safe for a shell. This is particularly severe for the `send` handler because it operates against a wallet-enabled Dogec ...[truncated 1817 chars]
Remediation
## Remediation Suggestions 1. Do not construct wallet commands through Bash string interpolation. Invoke `dogecoin-cli` using an API that accepts an executable and an argument array. 2. Validate recipient and address inputs before execution: - Require the expected Dogecoin address encoding and length. - Reject whitespace, shell metacharacters, control characters, and trailing data. - Prefer an authoritative Dogecoin address-validation routine over a permissive regular expression. 3. Parse amounts into a decimal or fixed-point representation and enforce explicit minimum, maximum, precision, and balance limits. 4. Add transaction confirmation or approval for all fund-transfer operations. 5. Run wallet commands under a dedicated, minimally privileged account. 6. Restrict the RPC interface to the exact commands needed by the Skill and protect the wallet with appropriate operational controls. 7. Add security tests containing spaces, quotes, command separators, substitutions, redirections, and newline characters to confirm that inputs can never affect command structure.

T08 · Insecure Dependencies

Warning
Location
SKILL.md:47
Finding
Dogecoin Executables Downloaded and Installed Without Integrity Verification## Vulnerability Details **File Location**: `SKILL.md`, lines 47–66 **Vulnerability Type**: Unverified executable dependency installation **Risk Level**: Medium **Category**: T08: Insecure Dependencies ### Vulnerable Code ```bash cd ~/downloads curl -L -o dogecoin-1.14.9-x86_64-linux-gnu.tar.gz \ [https://github.com/dogecoin/dogecoin/releases/download/v1.14.9/dogecoin-1.14.9-x86_64-linux-gnu.tar.gz](https://github.com/dogecoin/dogecoin/releases/download/v1.14.9/dogecoin-1.14.9-x86_64-linux-gnu.tar.gz) ``` ```bash tar xf dogecoin-1.14.9-x86_64-linux-gnu.tar.gz mkdir -p ~/bin/dogecoin-1.14.9 cp -r dogecoin-1.14.9/* ~/bin/dogecoin-1.14.9/ ln -sf ~/bin/dogecoin-1.14.9/bin/dogecoind ~/dogecoind ln -sf ~/bin/dogecoin-1.14.9/bin/dogecoin-cli ~/dogecoin-cli ``` ### Technical Analysis The documented installation flow downloads an archive containing native executables and immediately extracts and installs them without checking an official cryptographic checksum or release signature. The intended host is the official `github.com/dogecoin/dogecoin` project rather than a personal repository or pastebin. Nevertheless, TLS and a recognizable source URL do not verify that the retrieved archive is the exact artifact expected by the Skill. A compromised release account, substituted artifact, unsafe redirect, local archive replacement, or download-path compromise could result in malicious binaries being installed. The source command also incorrectly embeds a Markdown link in a shell code block. Copied literally, that text is not a valid plain URL argument and may cause installation failure. Users might manually alter the command or obtain the archive through an unreviewed source as a workaround, further weakening provenance. ### Attack Path 1. A user follows the documented setup procedure. 2. The download endpoint, release artifact, redirect target, network environment, or pre-existing local archive supplies a modified t ...[truncated 1306 chars]
Remediation
## Remediation Suggestions 1. Replace the Markdown-formatted link with a plain, fixed HTTPS URL suitable for shell use. 2. Publish or reference the official SHA-256 digest for the exact release artifact and verify it before extraction. 3. Verify the release manifest or archive using the official Dogecoin release-signing keys and document how users authenticate those keys. 4. Make installation fail closed if either checksum or signature verification fails. 5. Download into a newly created directory with restrictive permissions and reject unexpected pre-existing files. 6. Inspect the archive member paths before extraction and use extraction options that prevent path traversal and unsafe ownership changes. 7. Prefer a trusted operating-system package source where available, while still pinning an approved version and validating repository provenance. 8. Document a controlled upgrade process so executable versions cannot change silently.

T09 · Insecure Skill Coding Practices

Warning
Location
package.json:67
Finding
Execution and Periodic Scheduling of a Mutable Workspace Script## Vulnerability Details **File Location**: `package.json`, lines 67–72; related setup in `SKILL.md`, lines 153–217; scheduling guidance in `HEARTBEAT.md`, lines 43–45 **Vulnerability Type**: Untrusted mutable script execution **Risk Level**: Medium **Category**: T09: Insecure Skill Coding Practices ### Vulnerable Code ```json { "trigger": "/dogecoin-node health", "description": "Run the automated health check script", "handler": "bash", "script": "bash $HOME/.openclaw/workspace/archive/health/doge_health_check.sh" } ``` The Skill creates the script in a general workspace and marks it executable: ```bash mkdir -p ~/.openclaw/workspace/archive/health/ cat > ~/.openclaw/workspace/archive/health/doge_health_check.sh <<'EOF' #!/bin/bash # --- Dogecoin Health Check Automation --- echo "Starting Health Check: $(date)" DOGE_CLI="$HOME/dogecoin-cli" DATA_DIR="$HOME/.dogecoin" ... EOF chmod +x ~/.openclaw/workspace/archive/health/doge_health_check.sh ``` `HEARTBEAT.md` then recommends periodic execution: ```markdown ### Automation & Cron Setup - **Automated Health Script:** `~/.openclaw/workspace/archive/health/doge_health_check.sh` - **Dashboard Integration:** Navigate to the [Cron Jobs](http://localhost:18789/cron-jobs) tab and add a new entry pointing to the health script. - **Recommended Interval:** `*/30 * * * *` (Every 30 minutes). ``` ### Technical Analysis The health command does not execute immutable code from the reviewed package. It executes a script from `~/.openclaw/workspace/archive`, a location intended for workspace data and potentially writable by the gateway account, other Skills, or processes operating as the same user. The code does not verify the script's owner, permissions, content hash, signature, or canonical path before passing it to Bash. Consequently, modification of that file converts a legitimate health operation into an arbitrary code-exec ...[truncated 1695 chars]
Remediation
## Remediation Suggestions 1. Ship the health-check implementation inside the versioned Skill package rather than creating it in a general writable workspace. 2. Execute it through a fixed canonical path owned by the Skill installation account. 3. Restrict file and parent-directory permissions so unrelated Skills and processes cannot modify the script. 4. Before execution, verify ownership, reject symbolic links, and validate a package-pinned cryptographic hash or signature. 5. Prefer implementing the health check directly in reviewed application code without invoking Bash. 6. If scheduling is necessary, configure a dedicated minimally privileged service account and reference only immutable packaged code. 7. Ensure the scheduled task cannot access wallet-spending operations when it only needs node status, disk usage, price data, and database integrity checks. 8. Document removal and upgrade procedures for the scheduled task to prevent stale scripts from continuing to execute.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Rogue AgentSelf-Modification, Session Persistence
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (14)

Missing User Warnings

High
Confidence
97% confidence
Finding
The `/dogecoin-node send` command directly invokes `sendtoaddress` with user-supplied recipient and amount and provides no confirmation, dry-run, or warning before transferring funds. In a cryptocurrency-management skill, this makes accidental or socially engineered irreversible fund transfers much more likely, especially because blockchain transactions cannot usually be undone.

Description-Behavior Mismatch

Medium
Confidence
80% confidence
Finding
The manifest describes a Dogecoin Core full node skill with RPC access, blockchain tools, and optional tipping. This heartbeat file operationalizes additional components such as a dedicated SQLite tipping database and Telegram command parsing workflows, making those broader integrations part of the expected behavior rather than merely optional support.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
This markdown file includes the `sendtoaddress <address> <amount>` command, which can transfer cryptocurrency and affect user funds, but it provides no warning about irreversibility, address verification, or the need to confirm intent. For markdown files, omission of warnings about actions that can affect user data or system integrity qualifies as a missing user warning.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The skill exposes commands for sending DOGE and logging tipping activity without prominently warning that cryptocurrency transfers are irreversible and that transaction/tipping records are persisted. In a wallet-management context, missing safety warnings increase the chance of accidental fund loss, privacy surprises, and unsafe operator use.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
1. A fully synced Dogecoin Core RPC node.
2. Dogecoin `rpcuser` and `rpcpassword` configured in `dogecoin.conf`.
3. OpenClaw Gateway up-to-date.
4. `jq` installed on the host (`sudo apt install jq`).


### Steps to Configure Node
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Session Persistence

Medium
Category
Rogue Agent
Content
```bash
tar xf dogecoin-1.14.9-x86_64-linux-gnu.tar.gz
mkdir -p ~/bin/dogecoin-1.14.9
cp -r dogecoin-1.14.9/* ~/bin/dogecoin-1.14.9/
ln -sf ~/bin/dogecoin-1.14.9/bin/dogecoind ~/dogecoind
ln -sf ~/bin/dogecoin-1.14.9/bin/dogecoin-cli ~/dogecoin-cli
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.

Description-Behavior Mismatch

Medium
Confidence
97% confidence
Finding
The skill advertises a tipping feature that implies DOGE transfers, but the provided Python code only records metadata in SQLite and never invokes Dogecoin RPC/CLI to move funds. This mismatch can cause operators or users to wrongly believe payments were executed, creating financial integrity issues, disputes, and unsafe downstream automation.

Session Persistence

Medium
Category
Rogue Agent
Content
### Tipping Script Setup:


# 1. To enable the tipping feature, create dogecoin_tipping.py at:
# ~/.openclaw/workspace/archive/tipping/ with the following code:
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.

External Transmission

Medium
Category
Data Exfiltration
Content
"trigger": "/dogecoin-node price",
      "description": "Fetch the current DOGE/USD price via CoinGecko",
      "handler": "bash",
      "script": "curl -s 'https://api.coingecko.com/api/v3/simple/price?ids=dogecoin&vs_currencies=usd' | jq -r '.dogecoin.usd'"
    },
    {
      "trigger": "/dogecoin-node send",
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
"trigger": "/dogecoin-node price",
      "description": "Fetch the current DOGE/USD price via CoinGecko",
      "handler": "bash",
      "script": "curl -s 'https://api.coingecko.com/api/v3/simple/price?ids=dogecoin&vs_currencies=usd' | jq -r '.dogecoin.usd'"
    },
    {
      "trigger": "/dogecoin-node send",
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Intent-Code Divergence

Low
Confidence
94% confidence
Finding
The sample workflow prints 'Sending tips...' even though the function only appends rows to a local database. This is misleading behavior that can reinforce a false belief that transfers occurred and may lead to accounting errors or user deception.

Intent-Code Divergence

Low
Confidence
97% confidence
Finding
The /dogecoin-node help command claims the available commands are prefixed with '/dogecoin ...', but the manifest-defined triggers elsewhere in the file use '/dogecoin-node ...'. This is an active documentation contradiction that could mislead users about how to invoke wallet and node-management actions.

Unpinned Dependencies

Low
Category
Supply Chain
Content
}
  ],
  "dependencies": {
    "sqlite3": "^5.1.7"
  },
  "author": "GreatApe42069",
  "license": "MIT"
Confidence
89% confidence
Finding
The dependency version is specified with a caret (`^5.1.7`), which allows newer minor/patch releases to be installed without strict reproducibility. In security-sensitive software that can send cryptocurrency transactions, unpinned dependencies increase supply-chain risk and make it harder to verify exactly which code is running.

Unverifiable Dependency: sqlite3 has 2 known advisory(ies) (CVE-2022-21227 (Denial-of-Service when binding invalid parameters in sqlite3); CVE-2022-43441 (sqlite vulnerable to code execution due to Object coercion)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
78% confidence
Finding
The manifest references `sqlite3` without pinning an exact version, and the package family has known advisories; this leaves uncertainty about whether deployments may resolve to a vulnerable release. In a skill that handles wallet-adjacent operations and can execute local commands, avoidable dependency ambiguity increases the chance of introducing a vulnerable component into a sensitive environment.

Static analysis

No suspicious patterns detected.