Back to skill

Security audit

xpr-xmd

Security checks for vulnerabilities and agentic risk

Overview

This XMD skill is purpose-aligned but needs review because it can sign real financial transactions with an environment private key that is not declared in its metadata.

Review before installing. Use this only with a dedicated, narrowly scoped XPR permission and small limits, not a broad active key. Treat xmd_mint and xmd_redeem as real financial transactions and require an external transaction preview or manual wallet confirmation before allowing confirmed=true.

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

T09 · Insecure Skill Coding Practices

Warning
Location
src/index.ts:486
Finding

Incomplete Preflight Validation for Financial Transactions

Content
View full analysis
{ const parsed = parseExtSym(t.symbol); return parsed?.symbol === sym; }); if (!token) { const available = tokens.map((t: any) => parseExtSym(t.symbol)?.symbol).filter(Boolean); return { error: `Token "${sym}" not supported. Available: ${available.join(', ')}` }; } if (!token.isMintEnabled) { return { error: `Minting with ${sym} is currently disabled` }; } const parsed = parseExtSym(token.symbol); if (!parsed) return { error: 'Could not parse token symbol' }; // Check treasury is not paused const globals = await getTableRows(rpcEndpoint, { code: XMD_TREASURY, scope: XMD_TREASURY, table: 'xmdglobals', limit: 1, }); if (globals.length > 0 && globals[0].isPaused) { return { error: 'XMD treasury is currently paused' }; } const quantity = formatAsset(amount, parsed.precision, parsed.symbol); const { api: eosApi, account, permission } = await getXmdSession(); const result = await eosApi.transact({ actions: [{ account: parsed.contract, name: 'transfer', authorization: [{ actor: account, permission }], data: { from: account, to: XMD_TREASURY, quantity, memo: 'mint', }, }], }, { blocksBehind: 3, expireSeconds: 30 }); ``` The redeem path has the same weakness: ```ts // Validate the target collateral exists and redeem is enabled const tokens = await getTableRows(rpcEndpoint, { code: XMD_TREASURY, scope: XMD_TREASURY, table: 'tokens', limit: 50, }); const token = tokens.find((t: any) => { ...[truncated 3823 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
skill.json:19
Finding

Signing Credentials and Permission Requirements Are Undeclared in Skill Metadata

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (3)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill describes tool-based interactions, including write operations, but does not declare an explicit tool scope such as allowed-tools or permissions. When a skill with detected env/network capabilities lacks a restrictive scope, the runtime or agent may expose broader capabilities than intended, increasing the chance of unauthorized network access, environment data exposure, or misuse of available tools.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest advertises mint and redeem capabilities but provides no user-facing warning that these are financial, state-changing actions. In DeFi/stablecoin workflows, missing safety language can lead an orchestrating agent to treat transactional tools like ordinary informational queries, increasing the risk of unintended asset movement or financially consequential actions.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest description is broad enough to match general stablecoin-related requests without clearly constraining when the skill should be invoked. In a financial context, overly broad routing increases the chance that an agent invokes mint/redeem tooling in situations where the user only wanted information, creating unnecessary exposure to state-changing operations.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
src/index.ts:81