Back to skill

Security audit

StonebornBot

Security checks for vulnerabilities and agentic risk

Overview

This NFT mint bot can perform real irreversible blockchain actions with many wallets, and one test script is documented as safe while actually broadcasting transactions.

Install only if you are comfortable reviewing and controlling a bot that can spend ETH and mint from every configured wallet. Use fresh low-balance wallets, keep private keys out of shared or version-controlled directories, avoid batch-test.js on mainnet unless you intend to broadcast transactions, and verify every contract, calldata, chain ID, gas cap, RPC endpoint, Bankr setting, and Archetype auth source before running.

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
scripts/batch-test.js:43
Finding

Batch Test Signs and Broadcasts Real Blockchain Transactions Contrary to Documentation

Content
View full analysis
{ const tx = { to: cfg.contract.address, data: calldata, value: 0n, chainId: cfg.chainId, type: 2, maxFeePerGas: ethers.parseUnits(cfg.gas.maxFeePerGas, "gwei"), maxPriorityFeePerGas: ethers.parseUnits(cfg.gas.maxPriorityFeePerGas, "gwei"), gasLimit: cfg.gas.gasLimit, nonce: nonces[i], }; return s.signTransaction(tx); })); const signMs = Number(process.hrtime.bigint() - signStart) / 1e6; log("⚡ All " + signed.length + " txs signed in " + signMs.toFixed(0) + "ms"); // Batched broadcast const fireStart = process.hrtime.bigint(); log("🔥 FIRING in batches of " + BATCH_SIZE + "..."); let success = 0, fail = 0; const rpcUrls = cfg.rpcUrls || [cfg.rpcUrl]; for (let b = 0; b < signed.length; b += BATCH_SIZE) { const batchNum = Math.floor(b / BATCH_SIZE) + 1; const totalBatches = Math.ceil(signed.length / BATCH_SIZE); const batch = signed.slice(b, b + BATCH_SIZE); const labels = cfg.wallets.slice(b, b + BATCH_SIZE).map(w => w.label); const results = await Promise.allSettled(batch.map((raw, i) => { // Send to first RPC only to avoid rate limits return fetch(rpcUrls[0], { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: "eth_sendRawTransaction", params: [raw] }), }).then(r => r.json()).then(j => { ...[truncated 2292 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/mint-bot.js:49
Finding

Wallet Private Keys Are Stored in Plaintext Project-Local Configuration Files

Content
View full analysis
new ethers.Wallet(w.privateKey, provider)); ``` The batch test follows the same pattern: ```javascript const cfg = JSON.parse(fs.readFileSync(path.join(__dirname, "config-test-all.json"), "utf-8")); ``` ```javascript const signers = cfg.wallets.map(w => new ethers.Wallet(w.privateKey, provider)); ``` The documented configuration format explicitly places private keys in JSON: ```json "wallets": [ { "privateKey": "0x...", "label": "wallet-1" }, { "privateKey": "0x...", "label": "wallet-2" } ] ``` The setup script creates the project-local configuration without restricting its permissions: ```bash if [ ! -f config.json ]; then cp ../assets/config-template.json config.json echo "📄 Created config.json from template — edit it with your settings" else echo "⚠️ config.json already exists, skipping" fi ``` ### Technical Analysis Ethereum private keys are bearer credentials that provide irreversible transaction authority. The Skill instructs users to place these credentials unencrypted in JSON and then reads them from fixed files within the project directory. This design conflicts with the wallet guide’s recommendation to store wallet files outside the project directory because the executables do not expose a documented external confi ...[truncated 1655 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
scripts/setup.sh:12
Finding

Setup Installs a Range-Unpinned Dependency Without a Committed Lockfile

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (10)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The run instructions tell the user to execute the bot in instant or monitor mode without clearly warning that doing so can broadcast real, irreversible blockchain transactions that spend ETH and may trigger unintended mint purchases. Because the skill is explicitly optimized for speed, pre-signing, and multi-RPC broadcast, accidental execution or misconfiguration could rapidly commit funds across many wallets before the user realizes it.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 21)May include surrounding context.

md
node scripts/mint-bot.js

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 24)May include surrounding context.

md
node scripts/mint-bot.js

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill instructs users to configure an array of wallet private keys for 100+ wallets but does not prominently warn that these are highly sensitive secrets whose exposure enables immediate theft of funds and assets. In this context, the omission is especially dangerous because the skill centralizes many private keys in one configuration, creating a high-value target and increasing blast radius if mishandled.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 69)May include surrounding context.

md
Use `scripts/batch-test.js` to test wallet signing speed and RPC connectivity without sending real transactions.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill advertises network-capable behavior such as RPC, WebSocket, mempool watching, and multi-endpoint broadcasting, but it declares no explicit tool scope or permission boundary. That mismatch increases the chance an agent or user invokes a network-active skill without clear authorization constraints, which is risky given the skill is designed to transmit blockchain transactions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The guidance explicitly tells users to obtain Archetype auth/invite data by inspecting other users' successful mint transactions and decoding the auth parameter. In the context of a high-speed NFT mint bot designed for sniping and multi-wallet automation, this facilitates reuse or abuse of access credentials intended for allowlisted participants, enabling unauthorized minting, queue-jumping, or bypass of project gating.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script automatically broadcasts pre-signed raw transactions to an RPC endpoint without any interactive confirmation, dry-run mode, or prominent final warning before funds-affecting actions occur. In this skill’s context—a high-speed multi-wallet NFT mint bot handling many private keys and transactions—this increases the risk of accidental mass submission, unwanted spending, and irreversible on-chain actions if the config, target contract, or gas settings are wrong or maliciously altered.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The Bankr helpers transmit bearer credentials and transaction/signing data to an external service, but the file provides no explicit disclosure, consent flow, or trust-boundary warning to the user. This is dangerous because it externalizes signing/submission operations and exposes sensitive operational metadata to a third party, which is especially risky in an automated bot handling multiple wallets and valuable on-chain transactions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script loads raw private keys, pre-signs transactions, and automatically broadcasts them across multiple RPC endpoints or Flashbots without any explicit runtime confirmation, approval gate, or transaction summary acknowledgement. In the context of a high-speed multi-wallet NFT mint bot, this creates a serious risk of unintended asset spend, mass transaction submission, and irreversible loss if configuration is wrong, the target contract is malicious, or the skill is triggered unexpectedly.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.