Back to skill

Security audit

4CHAD

Security checks for vulnerabilities and agentic risk

Overview

This looks like a real 4chad Solana trading skill, but it gives an agent high-impact wallet authority with weak safeguards around signing, automation, and credential handling.

Review carefully before installing. Use only a dedicated low-balance wallet, avoid production keys, do not pass wallet secrets on the command line, do not store API keys in shell startup files, and do not run the unattended bot examples unless you can independently decode, simulate, and limit every transaction before signing.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
Findings (7)

T03 · Remote Payload Retrieval and Execution

Error
Location
SKILL.md:27
Finding

Mutable Remote Transaction Signer Is Downloaded and Executed Without Integrity Verification

Content
View full analysis
~/.4chad/skills/SKILL.md curl -s https://4chad.xyz/launch.md > ~/.4chad/skills/LAUNCH.md curl -s https://4chad.xyz/trading.md > ~/.4chad/skills/TRADING.md curl -s https://4chad.xyz/fees.md > ~/.4chad/skills/FEES.md curl -s https://4chad.xyz/examples.md > ~/.4chad/skills/EXAMPLES.md curl -s https://4chad.xyz/sign-transaction.js > ~/.4chad/skills/sign-transaction.js curl -s https://4chad.xyz/skill.json > ~/.4chad/skills/skill.json ``` The signer is also downloaded independently: ```bash curl -O https://4chad.xyz/sign-transaction.js ``` The metadata recommends the same installation pattern: ```json "install": { "clawhub": "clawhub install 4chad", "manual": "curl -s https://4chad.xyz/skill.md > ~/.openclaw/skills/4chad/SKILL.md && curl -s https://4chad.xyz/sign-transaction.js > ~/.openclaw/skills/4chad/sign-transaction.js" } ``` ### Technical Analysis The security-sensitive transaction signer is retrieved from a mutable vendor-controlled URL. The installation process does not pin a release version, verify a cryptographic signature, or compare a trusted checksum before executing the downloaded file. Consequently, the effective signer used by an operator can differ from the audited repository copy. TLS protects transport confidentiality and server authentication but does not protect against compromise of the vendor server, deployment pipeline, domain, DNS infrastructure, or hosting credentials. The signer is especially sensitive because it is invoked with access to the Solana wallet private key. A modified response can read and exfiltrate the key, alter transactions, execute arbitrary commands under the user's account, or modify local files. ### Attack Path 1. An attacke ...[truncated 974 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
sign-transaction.js:19
Finding

Server-Generated Solana Transactions Are Signed Without Semantic Validation

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
sign-transaction.js:45
Finding

Solana Private Key Is Exposed Through Process Command-Line Arguments

Content
View full analysis
"); process.exit(1); } signTransaction(privateKey, transaction); ``` The documentation passes the private key as a positional argument: ```bash SIGNED_TX=$(node sign-transaction.js "$UNSIGNED_TX" "$SOLANA_PRIVATE_KEY") ``` ### Technical Analysis The signer obtains the complete base58-encoded wallet secret from `process.argv`. Command-line arguments may be observable through process-listing tools, endpoint monitoring, process telemetry, audit systems, crash diagnostics, shell tracing, or wrapper scripts. Environment-variable storage does not mitigate this issue because shell expansion places the variable's value directly into the child process argument vector. The key is a long-lived credential providing complete wallet control rather than a narrowly scoped session token. ### Attack Path 1. The user exports `SOLANA_PRIVATE_KEY` and invokes the documented signing command. 2. The shell expands the variable into a command-line argument. 3. A local process observer, monitoring agent, audit mechanism, or diagnostic collector records the command arguments. 4. An attacker obtains the recorded base58 key. 5. The attacker reconstructs the Solana keypair and signs arbitrary transactions. 6. Wallet assets can be transferred without further interaction with the Skill. ### Impact Assessment Any party that obtains the private key gains complete cryptographic control of the wallet. This permits arbitrary transfers and use of any program or token authorities assigned t ...[truncated 103 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
sign-transaction.js:7
Finding

Bundled Signer Argument Order Contradicts All Documented Invocations

Content
View full analysis
*/ ``` ```javascript const [, , privateKey, transaction] = process.argv; if (!privateKey || !transaction) { console.error("Usage: node sign-transaction.js "); process.exit(1); } signTransaction(privateKey, transaction); ``` The documentation uses transaction-first ordering: ```bash SIGNED_TX=$(node sign-transaction.js "$UNSIGNED_TX" "$SOLANA_PRIVATE_KEY") ``` A second implementation embedded in `EXAMPLES.md:827-842` uses the opposite order: ```javascript const unsignedTxBase64 = process.argv[2]; const privateKeyBase58 = process.argv[3]; const privateKey = bs58.decode(privateKeyBase58); const keypair = Keypair.fromSecretKey(privateKey); const txBuffer = Buffer.from(unsignedTxBase64, 'base64'); const transaction = VersionedTransaction.deserialize(txBuffer); transaction.sign([keypair]); const signedTxBase64 = Buffer.from(transaction.serialize()).toString('base64'); console.log(signedTxBase64); ``` ### Technical Analysis The distributed script interprets its first argument as a private key, whereas every documented call supplies the unsigned transaction first. The script therefore attempts to parse a transaction as a private key and the private key as a transaction. This ordinarily causes the core workflow to fail. The security consequence is heightened because users are likely to debug the failure by printing secrets, manually changing argument order, copying the alternative implementation, or downloading a replacement signer from an ...[truncated 903 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
TRADING.md:263
Finding

Automated Workflows Repeatedly Sign Opaque Transactions Without Circuit Breakers

Content
View full analysis
/dev/null ``` ### Technical Analysis These examples transform a single blind-signing weakness into a persistent unattended exposure. They repeatedly trust the API response without: - Human confirmation. - A per-transaction or daily spending ceiling. - Independent transaction simulation. - Program and account allowlists. - Expected wallet balance-delta checks. - Confirmation that t ...[truncated 1280 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
EXAMPLES.md:847
Finding

Security-Critical Signing Dependencies Are Installed Without Version or Integrity Pinning

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
EXAMPLES.md:35
Finding

API Key Is Printed and Persisted in Shell Startup Configuration

Content
View full analysis
> ~/.bashrc echo "✅ API key created: $API_KEY" # Save key securely echo "$API_KEY" > ~/.4chad_api_key chmod 600 ~/.4chad_api_key ``` ### Technical Analysis The API key is disclosed to terminal output and written in plaintext to `~/.bashrc`. Terminal output can be captured by logs, remote session recording, support transcripts, continuous-integration output, or monitoring software. Shell startup files are frequently backed up, synchronized, or inspected and are not appropriate secret stores. Although the separate `~/.4chad_api_key` file is eventually changed to mode `600`, it is first created using permissions derived from the current umask. This produces a creation-time window in which the file may be readable more broadly than intended. The API-key creation example also differs from the signed-message flow documented in `SKILL.md`. Whether the server accepts wallet-address-only registration cannot be established from this client-side repository. ### Attack Path 1. The user runs the setup example. 2. The API key is displayed in terminal output and appended to `.bashrc`. 3. A terminal recorder, backup process, local user, or party with access to copied shell configuration obtains the key. 4. The attacker sends authenticated requests to the documented agent endpoints. 5. The attacker may inspect account-related API data or generate transactions associated with the compromised key. 6. If combined with the signing workflow or another compromise, the stolen key facilitates una ...[truncated 413 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (71)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The example instructs users to place a Solana private key in an environment variable and persist the API key to shell startup files and local plaintext files, but it does not clearly warn about key compromise, shell history leakage, multi-user host exposure, or accidental exfiltration by other processes. For a wallet controlling real funds, this materially increases the chance of credential theft and irreversible asset loss.

Content

No source excerpt is available for this finding.

YARA rule 'backdoor_persistence': Backdoor persistence with malicious payloads (shell commands, SSH key injection, hidden root users) [malware]

High
Category
YARA Match
Confidence
92% confidence
Finding

Appending exported credentials and runtime state to ~/.bashrc creates persistence of sensitive data across sessions and increases the blast radius if the account, shell history, backups, or dotfiles are exposed. Although not a classic malware backdoor, this persistence pattern is dangerous in a wallet/funds context because it normalizes long-lived credential exposure and silent automatic loading.

Content

Scanner excerpt · EXAMPLES.md (reported line 41)May include surrounding context.

Solana wallet private key export SOLANA_PRIVATE_KEY="your_base58_private_key" export WALLET_ADDRESS="your_wallet_public_address"

Create API key

API_KEY_RESPONSE=$(curl -X POST https://4chad.xyz/api/v1/agent/keys/create
-H "Content-Type: application/json"
-d "{"walletAddress": "$WALLET_ADDRESS"}")

Extract and save key

API_KEY=$(echo $API_KEY_RESPONSE | jq -r '.apiKey') echo "export 4CHAD_API_KEY=$API_KEY" >> ~/.bashrc echo "✅ API key created: $API_KEY"

Save key securely

echo "$API_KEY" > ~/.4chad_api_key chmod 600 ~/.4chad_api_key

echo "Setup complete! Run: source ~/.bashrc"

text

**Load API key in future sessions:**

```bash
export 4CHAD_API_KEY=$(cat ~/.4chad_api_key)

2. Launch Your First Token

Easy Mode - 85 SOL target, 1B supply:

bash
#!/bin/bash
# launch-token.sh - Create a new meme token

# Token metadata
export TOKEN_NAME="Chad Frog"
export TOKEN_SYMBOL="CHAD"
export TOKEN_DESCRIPTION="The chadli

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The trading bot performs unattended buys and sells using real funds and submits signed on-chain transactions, yet the example lacks a prominent warning that actions are irreversible, market conditions are volatile, quotes can change, and losses may occur quickly. In this context, omission of safety guidance around automated execution meaningfully raises user harm risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The portfolio manager automatically allocates capital across multiple assets without a clear warning about automatic fund movement, slippage, liquidity risk, token fraud risk, and the inability to reverse confirmed trades. Because it batches multiple trades, a single misconfiguration can amplify losses.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The full lifecycle example chains token launch, purchase, fee claim, and sale into one workflow, creating several irreversible on-chain actions in sequence without consolidated warnings about real-funds use, contract/business logic trust, or failure modes between phases. This can mislead users into treating it as a safe turnkey flow when each step has financial and operational risk.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · EXAMPLES.md (reported line 816)May include surrounding context.

Backup Data

Save important addresses:

bash
echo "TOKEN=$MINT_ADDRESS" >> .env

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The skill is presented as a trading/launchpad integration, but it also instructs users to download and run a separate signing utility that accepts a Solana private key as a command-line argument and signs opaque unsigned transactions from a remote service. That materially expands the trust boundary beyond the declared behavior and can enable arbitrary asset movement if the returned transaction is malicious or not independently decoded and verified.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 35)May include surrounding context.

md
export WALLET_ADDRESS="your_wallet_public_address"

# Create API key
API_KEY_RESPONSE=$(curl -X POST https://4chad.xyz/api/v1/agent/keys/create \
  -H "Content-Type: application/json" \
  -d "{\"walletAddress\": \"$WALLET_ADDRESS\"}")

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
80% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

Scanner excerpt · EXAMPLES.md (reported line 46)May include surrounding context.

Save key securely

echo "$API_KEY" > ~/.4chad_api_key chmod 600 ~/.4chad_api_key

echo "Setup complete! Run: source ~/.bashrc"

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 109)May include surrounding context.

md
# Submit to blockchain
echo "Submitting transaction..."

SUBMIT_RESPONSE=$(curl -X POST https://4chad.xyz/api/v1/agent/transaction/submit \
  -H "X-API-Key: $4CHAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"signedTransaction\": \"$SIGNED_TX\"}")

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 164)May include surrounding context.

md
# Submit to blockchain
echo "Submitting transaction..."

SUBMIT_RESPONSE=$(curl -X POST https://4chad.xyz/api/v1/agent/transaction/submit \
  -H "X-API-Key: $4CHAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"signedTransaction\": \"$SIGNED_TX\"}")

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 233)May include surrounding context.

md
# Submit to blockchain
echo "Submitting transaction..."

SUBMIT_RESPONSE=$(curl -X POST https://4chad.xyz/api/v1/agent/transaction/submit \
  -H "X-API-Key: $4CHAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"signedTransaction\": \"$SIGNED_TX\"}")

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 292)May include surrounding context.

md
# Submit to blockchain
echo "Submitting transaction..."

SUBMIT_RESPONSE=$(curl -X POST https://4chad.xyz/api/v1/agent/transaction/submit \
  -H "X-API-Key: $4CHAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"signedTransaction\": \"$SIGNED_TX\"}")

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 190)May include surrounding context.

md
# Get token balance first
echo "Checking token balance..."

BALANCE_RESPONSE=$(curl -s "https://api.mainnet-beta.solana.com" \
  -X POST \
  -H "Content-Type: application/json" \
  -d "{

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 340)May include surrounding context.

md
# Sign and submit
SIGNED_TX=$(node sign-transaction.js "$UNSIGNED_TX" "$SOLANA_PRIVATE_KEY")

SUBMIT_RESPONSE=$(curl -X POST https://4chad.xyz/api/v1/agent/transaction/submit \
  -H "X-API-Key: $4CHAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"signedTransaction\": \"$SIGNED_TX\"}")

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest describes a skill for launching meme tokens, trading Solana assets, and claiming creator fees on 4chad.xyz. However, these examples expand that into generic autonomous strategy automation, including stop-loss/take-profit trading bots and multi-token portfolio allocation/rebalancing, which materially broadens the implied behavior beyond the narrower 4chad workflow description.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 395)May include surrounding context.

md
SIGNED_TX=$(node sign-transaction.js "$UNSIGNED_TX" "$SOLANA_PRIVATE_KEY")

curl -s -X POST https://4chad.xyz/api/v1/agent/transaction/submit \
  -H "X-API-Key: $4CHAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"signedTransaction\": \"$SIGNED_TX\"}" > /dev/null

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 446)May include surrounding context.

md
SIGNED_TX=$(node sign-transaction.js "$UNSIGNED_TX" "$SOLANA_PRIVATE_KEY")

curl -s -X POST https://4chad.xyz/api/v1/agent/transaction/submit \
  -H "X-API-Key: $4CHAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"signedTransaction\": \"$SIGNED_TX\"}" > /dev/null

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 472)May include surrounding context.

md
SIGNED_TX=$(node sign-transaction.js "$UNSIGNED_TX" "$SOLANA_PRIVATE_KEY")

curl -s -X POST https://4chad.xyz/api/v1/agent/transaction/submit \
  -H "X-API-Key: $4CHAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"signedTransaction\": \"$SIGNED_TX\"}" > /dev/null

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 537)May include surrounding context.

md
SIGNED_TX=$(node sign-transaction.js "$UNSIGNED_TX" "$SOLANA_PRIVATE_KEY")

curl -s -X POST https://4chad.xyz/api/v1/agent/transaction/submit \
  -H "X-API-Key: $4CHAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"signedTransaction\": \"$SIGNED_TX\"}" > /dev/null

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 602)May include surrounding context.

md
SIGNED_TX=$(node sign-transaction.js "$UNSIGNED_TX" "$SOLANA_PRIVATE_KEY")

curl -s -X POST https://4chad.xyz/api/v1/agent/transaction/submit \
  -H "X-API-Key: $4CHAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"signedTransaction\": \"$SIGNED_TX\"}" > /dev/null

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 761)May include surrounding context.

md
SIGNED_TX=$(node sign-transaction.js "$UNSIGNED_TX" "$SOLANA_PRIVATE_KEY")

curl -s -X POST https://4chad.xyz/api/v1/agent/transaction/submit \
  -H "X-API-Key: $4CHAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"signedTransaction\": \"$SIGNED_TX\"}" > /dev/null

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 414)May include surrounding context.

md
while true; do
  # Get current quote
  QUOTE=$(curl -s -X POST https://4chad.xyz/api/v1/agent/trade/quote \
    -H "Content-Type: application/json" \
    -d "{
      \"inputMint\": \"$TOKEN_MINT\",

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 433)May include surrounding context.

md
if (( $(echo "$CURRENT_VALUE <= $STOP_LOSS_LAMPORTS" | bc -l) )); then
    echo "🛑 STOP LOSS triggered at ${PNL_PERCENT}%"
    
    SELL_RESPONSE=$(curl -s -X POST https://4chad.xyz/api/v1/agent/trade/create-swap \
      -H "X-API-Key: $4CHAD_API_KEY" \
      -H "Content-Type: application/json" \
      -d "{

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · EXAMPLES.md (reported line 459)May include surrounding context.

md
if (( $(echo "$CURRENT_VALUE <= $STOP_LOSS_LAMPORTS" | bc -l) )); then
    echo "🛑 STOP LOSS triggered at ${PNL_PERCENT}%"
    
    SELL_RESPONSE=$(curl -s -X POST https://4chad.xyz/api/v1/agent/trade/create-swap \
      -H "X-API-Key: $4CHAD_API_KEY" \
      -H "Content-Type: application/json" \
      -d "{

Static analysis

No suspicious patterns detected.