Back to skill

Security audit

Hot Fun Integration

Security checks for vulnerabilities and agentic risk

Overview

This skill is transparent about creating Solana tokens, but it asks agents to use a wallet private key in a workflow that signs server-supplied transactions and relies on mutable npm installation paths.

Install only after reviewing the risk carefully. Use a fresh low-value Solana wallet, avoid storing real wallet keys in shared project .env files, avoid npx or @latest for this workflow, and do not sign unless you can independently verify the exact transaction contents and expected on-chain effects.

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

T09 · Insecure Skill Coding Practices

Error
Location
scripts/create-token.ts:117
Finding

Blind Signing and Broadcasting of an Untrusted Remote Solana Transaction

Content
View full analysis
''); throw new Error(`API request failed: ${res.status} ${res.statusText}\n${text}`); } const json = await res.json() as { data: { transaction: string; signature: string; dbc_config: string; dbc_pool: string; base_mint: string; name: string; symbol: string; uri: string; royalty_party: string; }; common: Record; }; const { transaction: txBase58, dbc_config, dbc_pool, base_mint, uri } = json.data; if (!txBase58) { throw new Error('API returned empty transaction. Response: ' + JSON.stringify(json)); } console.error(` base_mint: ${base_mint}`); console.error(` dbc_config: ${dbc_config}`); console.error(` dbc_pool: ${dbc_pool}`); console.error(` uri: ${uri}`); // ── Step 2: Deserialize and sign transaction ────────────────────────── const txBytes = bs58.decode(txBase58); const tx = VersionedTransaction.deserialize(txBytes); tx.sign([keypair]); // ── Step 3: Send to Solana RPC ──────────────────────────────────────── console.error('Sending transaction ...'); const txHash = await connection.sendRawTransaction(tx.serialize(), { skipPreflight: false, maxRetries: 3, }); ``` ### Technical Analysis The external API controls the serialized Solana transaction that the application signs. After decoding and deserializing the response, the code immediately calls `tx.sign([keypair])` and broadcasts the signed transaction. No validation is performed on: - The transaction fee payer. - Program IDs invoked by the transaction. - Instruction types and encoded instruction data. - Writable and signer accounts. - SOL or token transfer recipients and amo ...[truncated 2235 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:76
Finding

Mutable npm Package Installation in a Private-Key-Bearing Execution Context

Content
View full analysis
[args]`. If you use a local install instead, use `npx hotfun [args]` from the project root. ``` ```md ### Execution and install - **Invocation**: The agent must run commands only via the **hotfun** CLI: `hotfun [args]` or `npx hotfun [args]` (allowed-tools). Do not invoke scripts or `npx tsx` directly; the CLI entry (`bin/hotfun.cjs`) dispatches to the correct script and loads `.env` from the current working directory. - **Install**: `npm install -g @hot-fun/hot-fun-ai@latest`. Runtime: Node.js. Dependencies (including dotenv, @solana/web3.js, tsx) are declared in the package's `package.json`; global install installs them. No separate install spec beyond the npm package. ``` ### Technical Analysis The installation instructions explicitly select the mutable npm distribution tag `latest`. Consequently, the code installed by a user is not fixed to the version reviewed during this audit. A future release can replace the effective CLI implementation without requiring any change to the audited Skill files. The alternative `npx hotfun` execution path also does not establish a reviewed version or integrity value. Depending on the local environment and npm behavior, it may resolve or execute package content that is not tied to the audited source. This risk is particularly significant because the CLI executes in a process that has access to `PRIVATE_KEY`. The supplied project contains no package manifest, lockfile, integrity hash, or reproducible-build information that would allow the insta ...[truncated 1634 chars]
Remediation
View remediation
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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (17)

Credential Access

High
Category
Privilege Escalation
Confidence
82% confidence
Finding

The skill instructs users to place PRIVATE_KEY in a .env file in the current working directory and states the CLI will auto-load it. In a wallet-management context, this increases the chance of accidental exposure through permissive filesystem access, workspace leakage, malicious local tooling, or execution from the wrong directory; paired with npx, fetched code could immediately read the secret.

Content

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

md
**When not using OpenClaw (standalone)**
Set **PRIVATE_KEY** and optionally **SOLANA_RPC_URL** via the process environment:

- **.env file**: Put a `.env` file in **the directory where you run the `hotfun` command** (i.e. your project / working directory). The CLI automatically loads `.env` from that current working directory. Use lines like `PRIVATE_KEY=...` and `SOLANA_RPC_URL=...`. Do not commit `.env`; add it to `.gitignore`.
- **Shell export**: `export PRIVATE_KEY=your_base58_key` and optionally `export SOLANA_RPC_URL=https://api.mainnet-beta.solana.com`, then run `npx hotfun <command> ...`.

### Declared and optional environment variables

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'env' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'network' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

The manifest's allowed-tools includes Bash(npx hotfun *), authorizing execution of an unpinned package manager command. Since the skill metadata also requests PRIVATE_KEY, this creates a high-risk supply-chain path where arbitrary package code can execute with access to signing credentials.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The manifest allows execution via npx hotfun *, which can fetch and run package code at invocation time without a version pin. In a skill that handles a Solana PRIVATE_KEY and signs on-chain transactions, a compromised or replaced package version could directly exfiltrate the key or submit malicious transactions.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding

The installation and usage guidance tells users to run npx hotfun without an exact version, enabling retrieval of whatever package version is current at execution time. Because this skill is explicitly designed to use a wallet private key, supply-chain compromise of the package would have direct access to signing material and funds.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding

The standalone instructions combine loading PRIVATE_KEY from the environment with executing npx hotfun, which creates a dangerous trust boundary: dynamically fetched code runs in a process holding the secret. If the package or its dependencies are tampered with, the private key can be stolen and used to drain assets.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

The command invocation section still permits npx hotfun <command> [args], again allowing unpinned package execution. In this context the danger is amplified because the same section states the CLI loads .env from the current working directory, so dynamically resolved code may immediately access PRIVATE_KEY.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
84% confidence
Finding

The command invocation section still permits npx hotfun <command> [args], again allowing unpinned package execution. In this context the danger is amplified because the same section states the CLI loads .env from the current working directory, so dynamically resolved code may immediately access PRIVATE_KEY.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The document instructs users to accept a base58-encoded transaction from an external API, sign it with their wallet private key, and broadcast it on-chain, but it does not require independent transaction inspection or warn about irreversible on-chain effects. This is dangerous because a compromised or malicious API could return a transaction that transfers funds, grants authorities, or performs other unintended actions, and the user is explicitly guided to sign it.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The authentication flow tells users to sign an externally scoped challenge (agent_ts) with the wallet private key without warning about key-handling risks or the security implications of reusing a wallet key for off-chain authentication. While signing a timestamp is less severe than blindly signing a transaction, it still normalizes direct private-key use and can lead to unsafe key exposure patterns in CLI environments or scripts.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
81% confidence
Finding

The usage text instructs users to run the tool via npx hotfun without pinning a version, which can pull whatever package version is current at execution time. In a wallet-handling tool that reads a private key and signs transactions, this creates a supply-chain risk where a compromised or unexpected package version could exfiltrate secrets or alter signed actions.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
81% confidence
Finding

The error/usage message again directs execution through an unpinned npx hotfun command. Because this tool consumes a wallet private key and performs on-chain signing, any unpinned package fetch materially increases the chance of supply-chain compromise affecting real funds or token operations.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
81% confidence
Finding

The example command uses npx hotfun without a pinned version, repeating the same supply-chain exposure in the most likely copy-paste path for users. This is more dangerous in context because the tool directly accesses PRIVATE_KEY and signs blockchain transactions, so package substitution could lead to irreversible asset loss.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The code deserializes a transaction returned by a remote API, signs it with the user's private key, and broadcasts it to mainnet without presenting a clear warning, confirmation step, or transaction detail review. In this context, the danger is elevated because blockchain transactions are irreversible and the tool fully trusts server-supplied transaction bytes, so a malicious or compromised API could cause unintended on-chain actions with the user's wallet.

Content

No source excerpt is available for this finding.

Scope Creep

Low
Category
Excessive Agency
Confidence
70% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

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

md
**User Agreement**

**Notice**: Before using this plugin and this skill (including but not limited to token creation), please read the following. **By choosing to continue using this plugin and this skill, you have read, understood, and agreed to this agreement.**

**Plugin nature and limitation of liability**: This plugin provides local-only CLI interaction (private key is used via environment or local config). It **does not collect, upload, or store your private key**. The plugin and its providers **are not liable** for private key disclosure or asset loss due to any cause (including but not limited to tampered plugin, compromised environment, user error, or third-party plugins).

Scope Creep

Low
Category
Excessive Agency
Confidence
70% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

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

md
**User Agreement**

**Notice**: Before using this plugin and this skill (including but not limited to token creation), please read the following. **By choosing to continue using this plugin and this skill, you have read, understood, and agreed to this agreement.**

**Plugin nature and limitation of liability**: This plugin provides local-only CLI interaction (private key is used via environment or local config). It **does not collect, upload, or store your private key**. The plugin and its providers **are not liable** for private key disclosure or asset loss due to any cause (including but not limited to tampered plugin, compromised environment, user error, or third-party plugins).

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/create-token.ts:75