Back to skill

Security audit

kog

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent for a launchpad, but it tells agents to sign and submit blockchain transactions and mutate public identity data without enough safety checks or user confirmation.

Review this skill carefully before installing. Use it only with explicit per-action approval, decode and simulate every Solana transaction before any wallet signs it, use a dedicated low-balance wallet, and treat marketplace profile fields, IPFS uploads, playground posts, and Twitter/X verification tweets as public and persistent.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
SKILL.md:219
Finding
Unverified Server-Generated Solana Transaction Is Signed by the User Wallet## Vulnerability Details **File Location**: `SKILL.md:54-62, 201-221`; duplicated in `SKILL.txt:49-57, 196-216` **Vulnerability Type**: Blind signing of an externally generated blockchain transaction **Risk Level**: High ### Vulnerable Code Snippet From `SKILL.md:54-62`: ```markdown **Important:** The returned transaction must be signed by (1) the **mint keypair** (the keypair whose public key is `mint`) and (2) the **user wallet keypair** (the keypair for `userWallet`) before sending. Both signers are required. --- ### Send Transaction | Endpoint | Method | Request | Response | |----------|--------|---------|----------| | `/api/send-transaction` | POST | JSON: `{ signedTransaction }` – base64-encoded serialized **signed** Solana Transaction. | `{ success: true, signature }` – Solana transaction signature. | ``` From `SKILL.md:201-221`: ```markdown 1. **Generate mint keypair.** Create a Solana Keypair for the new token mint (e.g. `Keypair.generate()`). Use `keypair.publicKey.toBase58()` as `mint`. Store the keypair; you will need it to sign the pool transaction later. 4. **Pool transaction.** POST `https://kogaion.fun/api/create-pool-transaction` with JSON: - `mint` (from step 1), - `tokenName`, `tokenSymbol` (same as in metadata), - `metadataUri` (from step 3), - `userWallet` (creator/payer wallet base58). - Save the returned `poolTx` (base64). 5. **Sign.** Deserialize the transaction from base64. Sign with (1) the mint keypair from step 1, (2) the user wallet keypair. Serialize the signed transaction to base64. 6. **Send.** POST `https://kogaion.fun/api/send-transaction` with JSON `{ signedTransaction: base64 }`. Save the returned `signature`. ``` The same workflow appears in `SKILL.txt:49-57` and `SKILL.txt:196-216`. ### Technical Analysis The Skill directs the agent to obtain an opaque, serialized Solana transaction from the external `kogaion.fun` service and sign it with th ...[truncated 2303 chars]
Remediation
## Remediation Suggestions 1. Decode the returned transaction before requesting any signature. 2. Enforce a strict allowlist of expected Solana program IDs and instruction types. 3. Verify all account addresses, including payer, mint, pool, recipient, authority, and fee accounts. 4. Verify all transfer amounts, service fees, token quantities, and balance changes against explicit user-approved limits. 5. Reject transactions containing additional or reordered instructions that are not part of a documented transaction template. 6. Confirm that the transaction's mint, metadata, token name, symbol, payer, and creator wallet match the original request. 7. Present a human-readable transaction simulation and balance-change summary before signing. 8. Require explicit human confirmation for every financially significant signature. 9. Simulate the transaction through a trusted Solana RPC endpoint and reject simulation errors or unexplained account changes. 10. Prefer constructing the transaction locally from reviewed instructions rather than signing an opaque server-generated payload. 11. Use a dedicated, low-balance wallet with no unrelated assets or authorities when interacting with the service. 12. Apply the same corrections to the duplicate workflow in `SKILL.txt`.

T05 · Unauthorized Access and Privilege Escalation

Error
Location
SKILL.md:168
Finding
Marketplace Identity Operations Use a Public Wallet Address Without Documented Ownership Proof## Vulnerability Details **File Location**: `SKILL.md:106-110, 168-193`; duplicated in `SKILL.txt:101-105, 163-188` **Vulnerability Type**: Missing wallet-ownership authentication for registration and profile updates **Risk Level**: High ### Vulnerable Code Snippet From `SKILL.md:106-110`: ```markdown | `/api/service-providers/register` | POST | JSON. **Required:** `wallet` (valid Solana base58), `tags` (array of strings, at least one; e.g. "KOL", "Influencer", "Developer", "Community Manager", "Moltbook", or any tag that describes what you do). **Optional:** `email`, `telegram`, `twitterHandle` (with or without @), `description` (what you do as an agent, Moltbook, etc.). Tags: alphanumeric, spaces, hyphens, max 50 chars each. | 201 `{ success: true, serviceProvider }`. | **Errors:** 400 Invalid wallet / missing tags / invalid tag format; 409 Wallet already registered; 500 Server error. Response body: `{ error: string }`. **Example (Moltbook agent):** Register with `description: "Moltbook agent. I launch tokens and post on Moltbook and X."`, `tags: ["Moltbook", "Content Creator"]`, and your wallet, email, telegram, twitterHandle as needed. ``` From `SKILL.md:168-170`: ```markdown | `/api/service-providers/update` | PUT or PATCH | JSON. **Required:** `wallet` (your registered wallet). **Optional:** `email`, `telegram`, `twitterHandle`, `description`, `tags` (array, replaces existing; at least one if provided). | 200 `{ success: true, serviceProvider }`. | **Errors:** 400 Invalid wallet / invalid tags; 404 Provider not found; 500 Server error. ``` From `SKILL.md:189-193`: ```markdown 1. **Register:** POST `https://kogaion.fun/api/service-providers/register` with `wallet`, `tags` (e.g. "Moltbook", "Content Creator", "Community Manager"), and optionally `description` (e.g. "Moltbook agent. I launch tokens and promote on Moltbook and X."), `email`, `telegram`, `twitterHandle`. Save the returned `serviceProvider.id`. 2. ...[truncated 4148 chars]
Remediation
## Remediation Suggestions 1. Require a wallet-signature challenge before registration or profile modification. 2. Generate a cryptographically random, single-use nonce on the server. 3. Bind the signed challenge to the wallet address, operation, domain, network, timestamp, and intended profile changes. 4. Verify the signature against the claimed Solana public key on the server. 5. Expire challenges after a short period and invalidate each nonce after one use to prevent replay. 6. Establish an authenticated session after successful wallet verification rather than accepting the wallet address as a bearer credential. 7. Require fresh authentication for sensitive changes such as email, social handles, and recovery information. 8. Prevent pre-registration by requiring ownership proof before reserving a wallet identity. 9. Add a secure recovery and dispute process for wallet owners whose addresses were previously claimed. 10. Log registration and profile changes, apply rate limits, and notify existing verified contact channels when sensitive fields change. 11. Clearly distinguish wallet verification from Twitter/X verification; neither should implicitly substitute for the other. 12. Update both `SKILL.md` and `SKILL.txt` so agents never submit identity mutations without a signed ownership challenge.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (5)

Missing User Warnings

High
Confidence
97% confidence
Finding
The launch flow tells the agent to sign a Solana transaction with both the mint keypair and the user wallet and then send it, but does not warn that signing authorizes on-chain actions that may spend funds and cannot be undone once confirmed. In this context, omission of an irreversibility and cost warning is especially dangerous because the skill is specifically designed to facilitate token launches and transaction execution.

Missing User Warnings

High
Confidence
97% confidence
Finding
This section instructs the agent to obtain a transaction, have it signed by wallet-controlled keys, and submit it on-chain, but it provides no warning that signing and sending blockchain transactions can transfer value, create irreversible state changes, incur fees, or deploy attacker-influenced transaction content. In a skill consumed by autonomous or semi-autonomous agents, omission of these warnings materially increases the risk of users authorizing harmful or unintended transactions.

Missing User Warnings

High
Confidence
98% confidence
Finding
The launch flow gives operational instructions to sign with both the mint keypair and user wallet keypair and then submit the signed transaction, but it omits any explicit warning or verification step before broadcast. Because these are high-trust key operations tied to blockchain state changes, the step-by-step framing makes unsafe execution more likely, especially if an upstream endpoint returns a malformed or malicious transaction.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill explicitly instructs users to register marketplace profiles and complete Twitter/X verification, which involves publishing a verification tweet and submitting contact/profile data such as email, Telegram, and Twitter handle. Because the documentation omits any privacy, persistence, or public-visibility warning, an agent could prompt users into disclosing personal or operational identifiers without informed consent.

Vague Triggers

Medium
Confidence
89% confidence
Finding
The skill advertises itself as broadly usable for anything related to Kogaion, launchpad, token launch, or Moltbook agents without clear gating such as requiring explicit user intent, confirmation, or read-only mode by default. In an agent setting, overly broad activation criteria can cause the skill to engage in sensitive blockchain or account-registration workflows when the user only wanted information, increasing the chance of unintended financial or identity-linked actions.

Static analysis

No suspicious patterns detected.