T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/server.js:33- Finding
Unauthenticated Mint Authorization Service
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill performs the advertised token minting flow, but it uses raw wallet keys and remote signing in ways that can expose users to unauthorized or misdirected blockchain transactions.
Review carefully before installing or running. Do not paste a funded wallet private key into the documented command. Treat the signer URL as security-critical, prefer HTTPS and a pinned expected contract address, and do not operate the signer service publicly without authentication, durable rate limits, and body-size limits.
scripts/server.js:33Unauthenticated Mint Authorization Service
scripts/mint.js:10Untrusted Plaintext Signer Response Controls the Transaction Destination
scripts/mint.js:4Wallet Private Key Exposed Through Command-Line Arguments
scripts/server.js:25Unbounded HTTP Request Body Enables Denial of Service
The documented purpose presents the skill as a simple mint/status/info utility, but the behavior includes handling raw private keys, initiating blockchain transactions, and contacting an external signing service. That mismatch is dangerous because users and orchestrators may approve or route the skill under false assumptions, leading to credential disclosure, unexpected fund movement, or unreviewed outbound network communication.
The script takes a raw private key as a command-line argument, which commonly exposes secrets through shell history, process listings, job logs, orchestration metadata, and monitoring tools. In an agent skill that mints on behalf of users, this is especially dangerous because compromise of the private key gives full control of the wallet and any assets it holds, far beyond this single mint operation.
The skill describes behavior that relies on sensitive capabilities such as environment access and operational secrets, but it declares no explicit tool scope or permissions. This creates an authorization transparency gap: a caller or platform may not realize the skill can access secrets or perform privileged actions, increasing the chance of unintended secret exposure or unauthorized execution.
The instructions explicitly tell operators to pass a raw wallet private key and configure a signer private key, but provide no warning about the sensitivity of those credentials or safer handling methods. In this context, the risk is elevated because the skill also directs use of an external IP-based signer service; compromise, logging, shell history leakage, or operator error could expose keys that control wallets or the mint authorization service.
The script allows an arbitrary server_url argument and then POSTs the wallet address to ${SERVER_URL}/api/mint-signature, trusting the returned contract, nonce, deadline, and signature. In this skill context, that is more dangerous than a generic outbound request because the remote server directly influences which on-chain contract the agent signs and pays gas to interact with, enabling phishing, transaction redirection, and unwanted network egress to attacker-controlled hosts.
This code reads a signing private key from the SIGNER_PRIVATE_KEY environment variable and immediately uses it to create a wallet, but there is no comment, docstring, or user-facing disclosure explaining that the service depends on sensitive credential material. For code files, access to sensitive environment variables should have at least some visible warning or explanation unless clearly documented elsewhere in the skill description, which is not present in this file.
The manifest describes a skill used to mint 4Claw tokens on BSC, which implies carrying out or directly initiating the mint action. In this file, the main operation is generating and returning an off-chain signature plus metadata; no blockchain transaction is submitted and no mint function is invoked, so the implemented behavior is materially narrower and different from the claimed minting behavior.
The public status endpoint discloses the signer address, contract address, chain ID, and cooldown policy to any caller. While none of these are secret individually, exposing signer identity and operational details makes targeted abuse, reconnaissance, and service fingerprinting easier for attackers against a mint-signing service.
No suspicious patterns detected.