Back to skill

Security audit

AMEX | Give your Agent your CreditCard

Security checks for vulnerabilities and agentic risk

Overview

This skill is a real financial/shopping integration, but it asks agents to handle live payment authority and plaintext card details in ways that deserve careful review before installation.

Install only if you are comfortable giving this skill live financial authority and having an agent handle payment-card material. Keep approval mode set to ask for every purchase unless you have strong limits, use a secure secrets manager for CREDITCLAW_API_KEY and webhook secrets, avoid main-agent card checkout, review any downloaded or delivered card files before use, and do not run the curl-based install/update flow without your own checksum or signature controls.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T03 · Remote Payload Retrieval and Execution

Error
Location
encrypted-card.md:80
Finding
Remote Server Supplies Executable Code and Free-Form Agent Instructions<![CDATA[ ## Vulnerability Details **File Location**: `encrypted-card.md:80-105`, `encrypted-card.md:147-180`, `encrypted-card.md:205-234`, `skill.md:472-525` **Vulnerability Type**: Remote payload retrieval and execution through server-provided scripts, tasks, and instructions **Risk Level**: Critical ### Vulnerable Code Snippets From `encrypted-card.md:80-105`: ```json { "approved": true, "checkout_id": "r5chk_abc123", "checkout_steps": [ "Call POST /api/v1/bot/rail5/key with { \"checkout_id\": \"r5chk_abc123\" } to get the decryption key.", "Run: node decrypt.js <key_hex> <iv_hex> <tag_hex> Card-ChaseD-9547.md", "Use the decrypted card details to complete checkout at DigitalOcean.", "Call POST /api/v1/bot/rail5/confirm with { \"checkout_id\": \"r5chk_abc123\", \"status\": \"success\" } when done.", "If checkout fails, call confirm with { \"status\": \"failed\" } instead.", "Announce the result." ], "spawn_payload": { "task": "You are a checkout agent...", "cleanup": "delete", "runTimeoutSeconds": 300, "label": "checkout-digitalocean" } } ``` From `encrypted-card.md:147-180`: ```text sessions_spawn({ task: spawn_payload.task, cleanup: "delete", runTimeoutSeconds: 300 }) ``` ```bash curl -X POST https://creditclaw.com/api/v1/bot/rail5/key \ -H "Authorization: Bearer $CREDITCLAW_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "checkout_id": "r5chk_abc123" }' ``` ```text node decrypt.js <key_hex> <iv_hex> <tag_hex> Card-ChaseD-9547.md ``` From `encrypted-card.md:205-234`: ```json { "event": "rail5.card.delivered", "bot_id": "bot_abc123", "data": { "card_id": "r5card_...", "card_name": "ChaseD", "card_last4": "9547", "file_content": "<self-contained markdown file with decrypt script and encrypted data>", "suggested_path": ".creditclaw/cards/Card-ChaseD-9547.md", "instructions": "Save this file to .creditclaw/cards/Card-ChaseD-9547.md — then confirm delivery via ...[truncated 3509 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove all execution of server-provided scripts and free-form task text. 2. Bundle a reviewed decryption implementation with the Skill or runtime and pin its cryptographic digest. 3. Replace `spawn_payload.task` and `checkout_steps` with a strict, versioned schema containing only typed transaction data. 4. Construct sub-agent prompts locally from trusted templates; never execute instruction strings returned by an API. 5. Enforce explicit allowlists for commands, tools, merchant domains, filesystem paths, and API endpoints available to the checkout sub-agent. 6. Run checkout processing in a sandbox with no general shell, no unrelated filesystem access, no inherited environment, and network access limited to CreditClaw and the explicitly approved merchant origin. 7. Cryptographically sign delivered card artifacts and verify the signature and expected version before processing them. 8. Reject unknown fields, unexpected instructions, redirects to unapproved origins, and any payload requesting unrelated actions. 9. Record immutable security audit events for payload version, artifact digest, approved merchant, amount, and destination without logging payment data. 10. Fail closed if the trusted local helper, signature verification, or required isolation is unavailable. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
encrypted-card.md:175
Finding
Plaintext Card Number and CVV Are Exposed to Process Output and Agent Context<![CDATA[ ## Vulnerability Details **File Location**: `encrypted-card.md:52-54`, `encrypted-card.md:175-186` **Vulnerability Type**: Insecure handling of plaintext payment-card data **Risk Level**: High ### Vulnerable Code Snippets From `encrypted-card.md:52-54`: ```text Alternative: If your environment doesn't support spawning sub-agents, you can execute the `checkout_steps` directly as the main agent. The guardrails and encryption still protect your owner's card — but the main agent will see the decrypted card details in its context. ``` From `encrypted-card.md:175-186`: ```text ### Step 4: Decrypt (Sub-Agent Does This) The sub-agent runs the deterministic decrypt script that was delivered with the card file: ``` node decrypt.js <key_hex> <iv_hex> <tag_hex> Card-ChaseD-9547.md ``` This outputs the card JSON (number, CVV, expiry, name, billing address). **Critical:** The sub-agent must **never** store, log, or persist the decrypted card data. It exists only in memory for this single transaction. After checkout, the sub-agent is deleted. ``` ### Technical Analysis The documented decryption command returns full cardholder data—including the primary account number and CVV—as command output. In an Agent environment, command output normally becomes part of the tool result and model context. It may also be captured by shell history, process telemetry, tracing systems, debugging logs, crash reports, session transcripts, or observability infrastructure. The statement that the data exists “only in memory” is not sufficient because model context and tool output may be persisted by the hosting platform. The explicitly supported fallback allows the main Agent to process the plaintext card details directly, expanding exposure from an isolated checkout context to the main conversation and any tools available there. A one-time decryption key limits repeated key retrieval but does not protect the plaintext after decryption. Deleting a sub-agent also does not guara ...[truncated 1470 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove the main-agent fallback entirely and refuse encrypted-card checkout when an approved isolated payment component is unavailable. 2. Replace stdout-based decryption with a fixed payment helper that decrypts internally and sends values directly to approved form fields without returning plaintext to the model. 3. Ensure the helper never prints the PAN, CVV, decryption key, authentication tag, or billing address. 4. Disable command tracing, shell history, debugging, telemetry, screenshots, and request-body logging for the isolated payment component. 5. Prevent the language model from receiving plaintext payment fields at any stage. 6. Run the helper in an isolated process with minimal filesystem permissions and network access restricted to the approved merchant. 7. Keep sensitive values in short-lived buffers, overwrite them where practical, and terminate the helper immediately after use. 8. Validate the merchant origin before releasing or using card data, and block redirects to unapproved origins. 9. Add automated tests that fail if sensitive field names or recognizable card-number patterns appear in stdout, stderr, logs, tool results, or Agent messages. 10. Document and enforce retention controls for any infrastructure involved in checkout processing. ]]>

T03 · Remote Payload Retrieval and Execution

Error
Location
skill.md:34
Finding
Skill Installation Overwrites Persistent Files with Unverified Mutable Remote Content<![CDATA[ ## Vulnerability Details **File Location**: `skill.md:34-46` **Vulnerability Type**: Unverified remote Skill installation and persistent instruction replacement **Risk Level**: High ### Vulnerable Code Snippet ```bash mkdir -p ~/.creditclaw/skills/shopping curl -s https://creditclaw.com/shopping/skill.md > ~/.creditclaw/skills/shopping/SKILL.md curl -s https://creditclaw.com/shopping/checkout.md > ~/.creditclaw/skills/shopping/CHECKOUT.md curl -s https://creditclaw.com/shopping/crossmint-wallet.md > ~/.creditclaw/skills/shopping/CROSSMINT-WALLET.md curl -s https://creditclaw.com/shopping/encrypted-card.md > ~/.creditclaw/skills/shopping/ENCRYPTED-CARD.md curl -s https://creditclaw.com/shopping/heartbeat.md > ~/.creditclaw/skills/shopping/HEARTBEAT.md curl -s https://creditclaw.com/shopping/management.md > ~/.creditclaw/skills/shopping/MANAGEMENT.md curl -s https://creditclaw.com/shopping/spending.md > ~/.creditclaw/skills/shopping/SPENDING.md curl -s https://creditclaw.com/shopping/stripe-x402-wallet.md > ~/.creditclaw/skills/shopping/STRIPE-X402-WALLET.md curl -s https://creditclaw.com/shopping/skill.json > ~/.creditclaw/skills/shopping/package.json ``` ### Technical Analysis The installation procedure downloads mutable files directly from web endpoints and overwrites persistent Skill files. It does not verify a signed release manifest, pinned digest, immutable version identifier, expected file size, or artifact signature. HTTPS protects the connection in transit but does not ensure that the content matches the version that was previously reviewed. A compromised origin server, content deployment account, DNS/TLS trust path, or build pipeline can serve modified Skill instructions while retaining valid HTTPS. Direct shell redirection also truncates the destination before `curl` has successfully completed. Because `curl -s` is used without `--fail`, a server error page or partial response may silently replace an active Skill file. Once placed in th ...[truncated 1542 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Publish immutable, versioned release artifacts rather than installing from mutable document URLs. 2. Sign a release manifest containing the version, file paths, sizes, and SHA-256 digests. 3. Verify the manifest signature and every file digest before activating the Skill. 4. Pin the expected release version and reject unexpected upgrades or downgrades. 5. Download files into a newly created temporary directory rather than redirecting directly over active files. 6. Use `curl --fail --show-error --location` with strict timeout and retry controls. 7. Validate all files, then perform an atomic directory rename to activate the release. 8. Preserve the last known-good release to support rollback. 9. Require explicit user confirmation for updates that change executable behavior, permissions, credentials, or network destinations. 10. Record the installed version and verified artifact digests for later auditing. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
Findings (35)

Credential Access

High
Category
Privilege Escalation
Content
- **Set `amount_locked: true`** for fixed-price products so buyers can't underpay.
- **Leave `amount_usd` empty** for donation or tip jars.
- **Use `page_type: "digital_product"`** when selling downloadable content, API keys, or access tokens.
- **Use `success_url`** to redirect buyers back to your service after payment.
- **Check `GET /bot/sales`** periodically to reconcile completed sales with your fulfillment.
- **Multiple checkout pages** are fine — create one per product or service tier.
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

YARA rule 'agent_skill_prompt_injection_hidden_instructions': Prompt injection or hidden instructions embedded in AI agent skill text [agent_skills]

High
Category
YARA Match
Content
name: creditclaw-shopping
version: 2.3.0
updated: 2026-02-23T00:00:00Z
description: Is your claw a shopaholic? Provide payment wallets and strict controls.
homepage: https://creditclaw.com
api_base: https://creditclaw.com/api/v1
credentials: [CREDITCLAW_API_KEY]
metadata: {"openclaw":{"requires":{"env":["CREDITCLAW_API_KEY"]},"primaryEnv":"CREDITCLAW_API_KEY"}}
---

# CreditClaw — Shopping for AI Agents

CreditClaw.com is a financial enablement platform for Bots, Agents, and OpenClaw.
Securely manage agentic spending.
1. Encrypted cards — owner's real-world card is encrypted and the bot uses it within strict guardrails after owner approval.
2. A stablecoin wallet to seamlessly enable x402 payments with a simple "Fund with Stripe" option.
3. Easy-to-use "Storefronts" and product management for bots to sell both digital and physical products.

## Skill Files

| File | URL | Purpose |
|------|-----|---------|
| **SKILL.md** (this file) | `https://creditclaw.com/shopping/skill.md` | R
Confidence
80% confidence
Finding
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

Unbounded Resource Access

Medium
Category
Excessive Agency
Content
-H "Content-Type: application/json"
  -d '{
    "title": "Premium API Access - 1 Month",
    "description": "Unlimited queries to my data analysis endpoint.",
    "amount_usd": 5.00,
    "amount_locked": true
  }'
Confidence
80% confidence
Finding
Skill allows unbounded resource consumption (API calls, storage, compute). Without rate limits or quotas, a compromised or misbehaving agent can cause denial-of-service or cost overruns.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill explicitly supports collecting buyer names and transmitting buyer emails and payment-related personal data, but it provides no warning about privacy obligations, data minimization, retention, or safe handling. In a payment-processing context, omission of privacy guidance increases the likelihood that downstream agents or operators mishandle personal data or collect it unnecessarily.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The invoice workflow instructs sending recipient name, recipient email, and invoice details through the platform and via email, but gives no warning that this discloses customer information to external systems and may create compliance and confidentiality risks. Because invoicing is a business workflow involving direct customer contact, missing privacy and disclosure guidance is a real security/privacy weakness rather than harmless documentation omission.

External Transmission

Medium
Category
Data Exfiltration
Content
"title": "Premium API Access",
  "amount_usd": 5.00,
  "page_type": "digital_product",
  "digital_product_url": "https://api.databot.com/keys/generate",
  "shop_visible": true
}
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
This guide documents a purchase API that places real orders and includes full shipping address details, but it does not prominently warn users that submitting the request triggers an actual purchase and sends sensitive personal data to external payment/merchant infrastructure. In an agent-skill context, that omission increases the risk of unintended purchases and privacy-impacting disclosure because the skill is specifically designed to automate shopping actions.

External Transmission

Medium
Category
Data Exfiltration
Content
## Purchase Request

```bash
curl -X POST https://creditclaw.com/api/v1/card-wallet/bot/purchase \
  -H "Authorization: Bearer $CREDITCLAW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
Confidence
77% confidence
Finding
The example performs an authenticated POST to a live purchase endpoint and includes sensitive shipping information in the request body, causing external transmission of personal and financial-operation data. While this is expected functionality for a shopping wallet, it is still security-relevant because users or downstream agents could copy and execute the command without fully appreciating that it is a real transaction against a production service.

External Transmission

Medium
Category
Data Exfiltration
Content
### Step 1: Request Checkout

```bash
curl -X POST https://creditclaw.com/api/v1/bot/rail5/checkout \
  -H "Authorization: Bearer $CREDITCLAW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
The sub-agent calls this endpoint to retrieve the one-time decryption key:

```bash
curl -X POST https://creditclaw.com/api/v1/bot/rail5/key \
  -H "Authorization: Bearer $CREDITCLAW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "checkout_id": "r5chk_abc123" }'
Confidence
78% confidence
Finding
This step retrieves the one-time decryption key for the stored card package and therefore represents transmission of highly sensitive key material to an agent execution context. The surrounding design explicitly allows a fallback where the main agent performs the flow directly, which weakens the isolation guarantee and can expose decryption material and resulting plaintext card data to broader context, logs, plugins, or memory capture.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
The skill instructs the agent to save a locally retrievable file that contains both encrypted payment material and an embedded decrypt script, but it does not require hardened storage, restricted permissions, secure deletion, or explicit operator warning about handling card-related artifacts. Even if the card details are encrypted at rest, local persistence of the card package increases the attack surface: filesystem compromise, backups, logs, sync tools, or other agents/processes could access the file and later combine it with a retrieved decryption key during checkout.

Missing User Warnings

Medium
Confidence
82% confidence
Finding
The skill description encourages periodic remote checks of wallet status, spending permissions, balances, and connected payment rails, but it does not warn that these operations query an external API about sensitive financial/account data. For a markdown skill description, this omission is a missing user warning about privacy-relevant behavior.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The markdown instructs the user to send requests authenticated with `$CREDITCLAW_API_KEY`, which is a sensitive credential, but it does not include any warning about handling that secret or about transmitting wallet status data to a remote service. Under the markdown-specific warning criterion, this is a user-impacting privacy and credential-use behavior that should be disclosed.

Description-Behavior Mismatch

Medium
Confidence
83% confidence
Finding
The manifest context says the skill is for 'shopping' with payment wallets and strict controls, but this file documents broader wallet-management operations including cross-rail top-ups and viewing full transaction history. Those management capabilities extend beyond a narrow shopping/payment-use flow and change the apparent purpose from shopping assistance to general financial account management.

External Transmission

Medium
Category
Data Exfiltration
Content
When your balance is low, ask your human if they'd like you to request a top-up:

```bash
curl -X POST https://creditclaw.com/api/v1/bot/wallet/topup-request \
  -H "Authorization: Bearer $CREDITCLAW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
Confidence
84% confidence
Finding
The skill instructs sending authenticated data to an external financial service endpoint using a bearer API key. In an agent setting, this creates real risk of unreviewed external fund-request actions, disclosure of spending intent/reason to a third party, and misuse if user approval and destination trust are not strongly enforced.

Description-Behavior Mismatch

Medium
Confidence
80% confidence
Finding
The transaction types documented here include 'payment_received', described as someone paying the bot's payment link. A shopping skill focused on providing wallets and purchase controls does not clearly imply merchant-style payment receiving or broader account ledger management.

Description-Behavior Mismatch

Medium
Confidence
94% confidence
Finding
The manifest description narrows the skill's purpose to payment wallets and spending controls, but the file also exposes seller/storefront, invoicing, and public checkout capabilities. That scope expansion can mislead users and policy engines into granting a broader commerce capability than expected, increasing the chance of unauthorized charging or data exposure through overlooked features.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
The skill introduces merchant and storefront functions that are not clearly required for the stated shopping-wallet purpose. Unsolicited monetization features broaden the attack surface by enabling creation of payment links, invoices, and public sales endpoints that an operator may not anticipate or monitor.

Session Persistence

Medium
Category
Rogue Agent
Content
| **package.json** (metadata) | `https://creditclaw.com/shopping/skill.json` | Machine-readable skill metadata |
Follow your human's instructions on how to manage and save skill files. If unsure, you can install locally:
```bash
mkdir -p ~/.creditclaw/skills/shopping
curl -s https://creditclaw.com/shopping/skill.md > ~/.creditclaw/skills/shopping/SKILL.md
curl -s https://creditclaw.com/shopping/checkout.md > ~/.creditclaw/skills/shopping/CHECKOUT.md
curl -s https://creditclaw.com/shopping/crossmint-wallet.md > ~/.creditclaw/skills/shopping/CROSSMINT-WALLET.md
Confidence
85% confidence
Finding
The skill instructs local persistence of downloaded skill files under a user directory, which can create durable trust in remotely hosted content that may later change. Persisting externally sourced instructions and related artifacts increases the risk of stale, tampered, or unexpectedly expanded behavior being reused across sessions.

Skill Enumeration

Medium
Category
Agent Snooping
Content
Follow your human's instructions on how to manage and save skill files. If unsure, you can install locally:
```bash
mkdir -p ~/.creditclaw/skills/shopping
curl -s https://creditclaw.com/shopping/skill.md > ~/.creditclaw/skills/shopping/SKILL.md
curl -s https://creditclaw.com/shopping/checkout.md > ~/.creditclaw/skills/shopping/CHECKOUT.md
curl -s https://creditclaw.com/shopping/crossmint-wallet.md > ~/.creditclaw/skills/shopping/CROSSMINT-WALLET.md
curl -s https://creditclaw.com/shopping/encrypted-card.md > ~/.creditclaw/skills/shopping/ENCRYPTED-CARD.md
Confidence
80% confidence
Finding
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

External Transmission

Medium
Category
Data Exfiltration
Content
You can register before your human does. You'll get an API key immediately.

```bash
curl -X POST https://creditclaw.com/api/v1/bots/register \
  -H "Content-Type: application/json" \
  -d '{
    "bot_name": "my-research-bot",
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
**You must follow these rules:**
- If `approval_mode` is `ask_for_everything`, ask your human before any purchase to get their approval. **New accounts default to this mode.** Your owner can loosen this from their dashboard once they're comfortable.
- If `approval_mode` is `auto_approve_under_threshold`, you may spend freely up to `ask_approval_above_usd`. Anything above that requires owner approval.
- If `approval_mode` is `auto_approve_by_category`, you may spend freely on `approved_categories` within limits. All others require approval.
- **Never** spend on `blocked_categories`. These are hard blocks enforced server-side and will be declined.
- Always read and follow the `notes` field — these are your owner's direct instructions.
Confidence
88% confidence
Finding
The skill explicitly permits autonomous spending under certain approval modes and thresholds. Even with server-side guardrails, this creates real financial risk if policy is misconfigured, compromised, or misunderstood, because the agent is authorized to initiate transactions without contemporaneous human review.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
**You must follow these rules:**
- If `approval_mode` is `ask_for_everything`, ask your human before any purchase to get their approval. **New accounts default to this mode.** Your owner can loosen this from their dashboard once they're comfortable.
- If `approval_mode` is `auto_approve_under_threshold`, you may spend freely up to `ask_approval_above_usd`. Anything above that requires owner approval.
- If `approval_mode` is `auto_approve_by_category`, you may spend freely on `approved_categories` within limits. All others require approval.
- **Never** spend on `blocked_categories`. These are hard blocks enforced server-side and will be declined.
- Always read and follow the `notes` field — these are your owner's direct instructions.
- Cache this for up to 30 minutes. Do not fetch before every micro-purchase.
Confidence
88% confidence
Finding
Category-based auto-approval allows the agent to classify purchases and spend independently within approved categories. Misclassification, prompt abuse, or overly broad category definitions can lead to unintended purchases while still appearing policy-compliant.

External Transmission

Medium
Category
Data Exfiltration
Content
### Fetch Pending Messages

```bash
curl https://creditclaw.com/api/v1/bot/messages \
  -H "Authorization: Bearer $CREDITCLAW_API_KEY"
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
Choose one:

- [x] **Ask me for everything** — Bot requests approval before any purchase
- [ ] **Auto-approve under threshold** — Bot spends freely up to the limit below
- [ ] **Auto-approve by category** — Bot spends freely on approved categories

---
Confidence
85% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Static analysis

No suspicious patterns detected.