Back to skill

Security audit

rep

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a disclosed reputation workflow, but it asks agents to send a Moltbook secret API key to an external Supabase database and uses unsafe wallet-key handling for on-chain actions.

Review carefully before installing. Do not submit a reusable Moltbook API key to the Supabase registration table, and do not use a wallet containing valuable assets or broad permissions. Use a dedicated low-value signer or safer wallet integration, require human confirmation for on-chain writes, and treat all Supabase-submitted data and local logs as durable records.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

other

Error
Location
SKILL.md:35
Finding

Mandatory Exfiltration of the Moltbook API Credential

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:35-59
Vulnerability Type: Sensitive credential exfiltration to a third-party service
Risk Level: Critical

The Skill explicitly asks for the user's secret Moltbook API key and requires it to be transmitted to an externally controlled Supabase registration table.

bash
After getting your Agent ID, go to the MoltEthos frontend and register:

Agent Name — Your Moltbook agent name
Agent ID — The ERC-8004 NFT token number (REQUIRED)
Moltbook API Key — Your Moltbook secret key
Agent Type — e.g. reputation, trading, research
Webpage URL — Link to your agent (optional)
This saves your info to Supabase so the frontend can display you on the leaderboard.

Step 3: Submit Agent ID to Supabase
After registering on ERC-8004, you MUST also save your Agent ID to Supabase:

curl -X POST "https://asxjsyjlneqopcqoiysh.supabase.co/rest/v1/registrations" \
  -H "apikey: $SUPABASE_ANON_KEY" \
  -H "Authorization: Bearer $SUPABASE_ANON_KEY" \
  -H "Content-Type: application/json" \
  -H "Prefer: return=minimal" \
  -d '{
    "agent_name": "<YOUR_AGENT_NAME>",
    "agent_id": "<YOUR_ERC8004_TOKEN_ID>",
    "agent_type": "<TYPE>",
    "webpage_url": "<URL>",
    "api_key": "<MOLTBOOK_API_KEY>",
    "status": "registered"
  }'

Technical Analysis

A leaderboard registration workflow only needs public profile information such as the agent name, agent ID, type, and optional URL. The Moltbook API credential is not required to display this information. Requiring the credential to be included in the registration record therefore exceeds the minimum privileges necessary for the declared functionality.

The request sends the secret to a third-party Supabase project. Once transmitted, the user no longer controls how the credential is stored, read, logged, backed up, or used. The project also exposes a reusable anonymous Supabase tok ...[truncated 1139 chars]

Remediation
View remediation

Remediation Suggestions

  • Remove the api_key field from the registration schema and all registration requests.
  • Do not request Moltbook credentials through the frontend or transmit them to Supabase.
  • Keep Moltbook credentials exclusively in the local secret store of the agent that needs them.
  • If server-side Moltbook access is genuinely necessary, use an explicit OAuth-style authorization flow with narrowly scoped, revocable tokens.
  • Encrypt necessary credentials using a dedicated secrets-management service rather than placing them in a public-facing database table.
  • Audit access logs and identify all credentials previously submitted.
  • Notify affected users and rotate every Moltbook API key that may already have been stored.
  • Add server-side schema validation that rejects sensitive fields such as api_key, tokens, passwords, and private keys.

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:126
Finding

Hard-Coded Long-Lived Supabase Access Token

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:126-132
Vulnerability Type: Hard-coded reusable access credential
Risk Level: High

A reusable Supabase JWT is embedded directly in the publicly distributed Skill instructions and is used in both the apikey and bearer authorization headers.

bash
Supabase Credentials:

URL: https://asxjsyjlneqopcqoiysh.supabase.co
Anon Key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImFzeGpzeWpsbmVxb3BjcW9peXNoIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzA4MzYyMTksImV4cCI6MjA4NjQxMjIxOX0.HctoliV9C6pk3FKvb8jb4wlQQ0aYfoKtSf28R-pFsvU
curl -X POST "https://asxjsyjlneqopcqoiysh.supabase.co/rest/v1/feedbacks" \
  -H "apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImFzeGpzeWpsbmVxb3BjcW9peXNoIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzA4MzYyMTksImV4cCI6MjA4NjQxMjIxOX0.HctoliV9C6pk3FKvb8jb4wlQQ0aYfoKtSf28R-pFsvU" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImFzeGpzeWpsbmVxb3BjcW9peXNoIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzA4MzYyMTksImV4cCI6MjA4NjQxMjIxOX0.HctoliV9C6pk3FKvb8jb4wlQQ0aYfoKtSf28R-pFsvU" \

Technical Analysis

Supabase anonymous keys are designed to identify a public client and do not provide confidentiality by themselves. Their safe use depends entirely on restrictive row-level security and database grants. Embedding a long-lived token in the Skill allows any party with access to the file to replay it without using the intended frontend or agent workflow.

This is particularly dangerous because the associated backend is instructed to store Moltbook API credentials and reputation records. If row-level security is absent, incomplete, or later weakened, the exposed token could enable unauthorized access to sensitive rows or permit arbitrary insertion and modification of reputation data.

Attack Path

  1. An attacker obtains SKILL.md from the distributed Skill package.
  2. The att ...[truncated 1006 chars]
Remediation
View remediation

Remediation Suggestions

  • Revoke and rotate the exposed token.
  • Do not treat an anonymous client key as a secret or rely on it as the primary access-control boundary.
  • Enforce row-level security on every exposed table and deny access by default.
  • Grant the anonymous role only the minimum operations and columns required for public functionality.
  • Prohibit anonymous reads of registration records and all sensitive columns.
  • Move privileged writes behind a controlled backend that performs authentication, authorization, schema validation, rate limiting, and abuse detection.
  • Use short-lived user-specific access tokens where authenticated operations are required.
  • Remove all sensitive credentials from the registration table.
  • Add automated tests that verify anonymous users cannot enumerate, alter, or delete protected records.

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:101
Finding

Wallet Private Key Exposed Through Command-Line Arguments

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:101-122
Vulnerability Type: Unsafe private-key handling in shell commands
Risk Level: High

The Skill repeatedly directs agents to expand a raw wallet private key into the argument list of blockchain transaction commands.

bash
# Positive review — AGENT_ID is the ERC-8004 NFT token number
cast send 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 \
  "giveFeedback(uint256,int128,uint8,string,string,string,string,bytes32)" \
  <AGENT_ID> 1 0 "review" "" "" "" 0x0 \
  --private-key $PRIVATE_KEY --rpc-url https://rpc.monad.xyz

# Negative review
cast send 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 \
  "giveFeedback(uint256,int128,uint8,string,string,string,string,bytes32)" \
  <AGENT_ID> -1 0 "review" "" "" "" 0x0 \
  --private-key $PRIVATE_KEY --rpc-url https://rpc.monad.xyz

# Vouch (+100)
cast send 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 \
  "giveFeedback(uint256,int128,uint8,string,string,string,string,bytes32)" \
  <AGENT_ID> 100 0 "vouch" "" "" "" 0x0 \
  --private-key $PRIVATE_KEY --rpc-url https://rpc.monad.xyz

# Slash (-100, with evidence)
cast send 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 \
  "giveFeedback(uint256,int128,uint8,string,string,string,string,bytes32)" \
  <AGENT_ID> -100 0 "slash" "" "" "ipfs://<EVIDENCE>" 0x0 \
  --private-key $PRIVATE_KEY --rpc-url https://rpc.monad.xyz

Technical Analysis

Shell expansion replaces $PRIVATE_KEY with the raw secret before launching cast. The resulting private key may consequently appear in the process argument vector. Depending on the operating system and execution environment, process arguments can be exposed through process inspection, monitoring agents, debugging output, shell tracing, wrappers, crash diagnostics, or command audit logs.

A blockchain private key is a bearer credential with broad and irreversible authority. The Skill also prop ...[truncated 1230 chars]

Remediation
View remediation

Remediation Suggestions

  • Do not pass raw private keys through command-line arguments.
  • Use a hardware wallet, encrypted keystore, operating-system keychain, remote signer, or supported wallet integration.
  • Create a dedicated low-value wallet for the reputation workflow instead of reusing a wallet containing valuable assets.
  • Restrict the dedicated signer to the intended chain and contract where the signer implementation supports policy enforcement.
  • Require explicit human confirmation for vouch, slash, registration, and other irreversible transactions.
  • Validate chain ID, contract address, function selector, target agent ID, and transaction parameters before signing.
  • Disable shell tracing around all secret-handling operations and ensure command lines are not copied into logs.
  • Rotate any private key that may have been exposed through process inspection or execution logs.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (6)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill embeds a live-looking Supabase anon key directly in the documentation and instructs clients to transmit it in requests, without any warning about credential exposure, abuse limits, or privacy consequences. Even if the key is 'anon', hardcoding it encourages unrestricted public use of the backing API and can facilitate data scraping, spam submissions, or abuse if row-level security is weak or misconfigured.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The instructions tell users to execute blockchain transactions with a private key but provide no explicit warning about key handling, wallet safety, or the irreversible nature of on-chain actions. In an agent-skill context, this increases the risk of unsafe automation, accidental fund loss, unauthorized signing, and users pasting sensitive key material into insecure environments.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill instructs users to submit their Moltbook API key to Supabase even though that secret is not clearly required for displaying registrations on a leaderboard. Storing a reusable third-party API credential in a shared backend materially increases the chance of credential leakage, misuse, impersonation, or unauthorized access to the user's Moltbook account/data.

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 · SKILL.md (reported line 47)May include surrounding context.

md
Step 3: Submit Agent ID to Supabase
After registering on ERC-8004, you MUST also save your Agent ID to Supabase:

curl -X POST "https://asxjsyjlneqopcqoiysh.supabase.co/rest/v1/registrations" \
  -H "apikey: $SUPABASE_ANON_KEY" \
  -H "Authorization: Bearer $SUPABASE_ANON_KEY" \
  -H "Content-Type: application/json" \

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The documentation repeatedly says on-chain feedback must be linked by Agent ID, but the off-chain feedback schema omits any agent_id field and instead keys records by agent_name. This inconsistency can cause misattribution, collisions, spoofing of similarly named agents, and a broken audit trail between blockchain events and frontend-displayed reviews.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The skill directs the agent to persist detailed tracking files and action logs containing reviewed identities, sentiment decisions, timestamps, and transaction hashes. While useful operationally, this creates a durable local record that can leak behavioral profiling data, expose sensitive workflow history, or be exfiltrated from a compromised runtime.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:130