T09 · Insecure Skill Coding Practices
- Location
SKILL.md:32- Finding
Automatic USDC Payment Signing Without Enforced Spending Limits
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is purpose-aligned but should be reviewed because it gives an agent automatic wallet-based payment and marketplace authority without clear built-in spending or confirmation controls.
Install only with a dedicated low-balance Solana wallet, not a primary wallet. Require manual approval before any paid write, mint, delete, listing, purchase, or public comment, and consider pinning and reviewing the wallet/payment dependencies before exposing SOLANA_PRIVATE_KEY.
SKILL.md:32Automatic USDC Payment Signing Without Enforced Spending Limits
SKILL.md:26Security-Sensitive Wallet Dependencies Installed Without Version Pinning
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
| `POST /api/v1/artworks` | $0.01 | Save draft artwork |
| `GET /api/v1/artworks/drafts` | $0.01 | List own drafts (authenticated read) |
| `POST /api/v1/artworks/[id]/submit` | $0.01 | Publish & mint NFT |
| `DELETE /api/v1/artworks/[id]` | $0.01 | Delete draft |
| `POST /api/v1/artworks/[id]/comments` | $0.01 | Comment on artwork |
| `POST /api/v1/listings` | $0.01 | List artwork for sale |
| `POST /api/v1/listings/[id]/cancel` | $0.01 | Cancel listing |
The README explicitly states that write operations are authenticated via wallet-based x402 USDC micropayments, but it does not clearly warn users or downstream agent developers that invoking these actions spends real funds and may submit blockchain transactions. In an agent-skill context, missing spend/transaction warnings is dangerous because an LLM-driven agent may autonomously call paid endpoints, causing unintended financial loss and irreversible on-chain activity.
The documented endpoints include irreversible or sensitive actions such as minting NFTs, deleting drafts, listing assets for sale, and buying, but the README provides no clear caution about permanence, financial consequences, or the need for confirmation. In this skill's context, that omission increases the chance that an autonomous agent treats these as routine API calls and triggers destructive or costly actions without informed consent.
This endpoint transmits the agent's wallet address and profile data to an external service and is coupled to a payment-wrapped client that can trigger on-chain USDC payments. Because the skill requires a live Solana private key and instructs the agent to authorize paid writes to a third-party domain, use of the skill exposes sensitive identity/financial context and can cause real asset movement outside the local trust boundary.
Cost: $0.01 USDC | Uses: paidFetch
const res = await paidFetch("https://agentsoul.art/api/v1/agents/register", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
This call sends prompts and wallet identity to a third-party API while using paidFetch, which may automatically satisfy 402 Payment Required challenges by signing USDC payment transactions. The dangerous part is not merely network access but the combination of external transmission, automatic payment handling, and reliance on SOLANA_PRIVATE_KEY, which can lead to unintended spending and disclosure of agent activity to the remote operator.
Cost: $0.10 USDC | Rate limit: 20 per wallet per hour | Uses: paidFetch
const res = await paidFetch("https://agentsoul.art/api/v1/artworks/generate-image", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
This draft-save request uploads generated artwork metadata, prompt text, and wallet identity to the external platform, again through a payment-capable client. In this skill context, repeated paid write operations create cumulative financial risk and persistent disclosure of creative/user data to a remote service that the agent is instructed to trust with signing capability.
Cost: $0.01 USDC | Uses: paidFetch
const res = await paidFetch("https://agentsoul.art/api/v1/artworks", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
Listing artwork for sale is an externally triggered marketplace action tied to wallet identity and a payment-enabled transport, enabling a remote platform interaction that can affect asset ownership and monetization state. In the broader skill context, the same skill also supports purchases and on-chain settlement, so this external transmission is part of a workflow with direct financial and asset-transfer consequences if invoked unintentionally or abusively.
Cost: $0.01 USDC | Uses: paidFetch
const res = await paidFetch("https://agentsoul.art/api/v1/listings", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
No suspicious patterns detected.