Back to skill

Security audit

Crow Payments

Security checks across malware telemetry and agentic risk

Overview

This CrowPay payment skill is mostly aligned with its stated purpose, but it needs review because it grants real spending authority while pushing broad activation, immediate setup, persistent credential storage, and extra skill installs.

Install only if you intentionally want an agent to use CrowPay for payments. Require explicit confirmation for wallet setup and each new merchant, store the API key only in a scoped secret manager or environment variable, avoid writing it into memory or notes, disable or tightly cap auto-approval, validate merchant/domain/amount/payee before paid calls, and do not install the suggested extra skills unless separately reviewed.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (21)

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The skill instructs the agent to install software from a remote GitHub repository as part of normal operation, which expands capability beyond payment handling into package fetching and code installation. This creates an avoidable supply-chain and privilege-expansion risk, especially because the installation is framed as something to do immediately rather than only with explicit user approval.

Context-Inappropriate Capability

Medium
Confidence
99% confidence
Finding
The skill directs the agent to write an API key and behavioral instructions into persistent memory or files, which is broader than the stated payment task and can outlive the current user session. Persisting secrets alongside action-triggering instructions increases the chance of credential leakage, cross-session misuse, and unauthorized future payments triggered by unrelated interactions.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The skill instructs installation of a separate Nightmarket skill unrelated to the minimum payment flow, unnecessarily broadening the agent's capabilities into service discovery and further remote code retrieval. That capability expansion increases the attack surface and can chain into additional unreviewed behaviors outside the user's immediate request.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The trigger description is overly broad, covering generic concepts like buying anything on the internet and mentioning payment-related keywords even without naming the skill. This can cause the skill to activate in situations where payment authority or user consent is unclear, increasing the likelihood of unnecessary credential setup or payment-related actions.

Vague Triggers

Medium
Confidence
88% confidence
Finding
The 'When to Use' guidance is too general and omits meaningful scope limits or negative examples, encouraging invocation for broad purchasing scenarios. In a payment skill, ambiguous invocation is particularly risky because it can lead to wallet setup, transmission of payment metadata, or attempts to spend funds without sufficiently explicit user authorization.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
This API reference documents endpoints that create wallets/API keys and authorize real payments, but it does not prominently warn that these actions create credentials and can trigger financial transactions. In an agent-skill context, missing safety guidance materially increases the risk that an agent or integrator invokes these endpoints without clear user consent or appropriate handling of secrets.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The documentation shows a live-looking secret header (`X-API-Key: crow_sk_abc123...`) in executable curl examples without an explicit warning to use environment variables or redact credentials. In a payment skill, this can normalize hardcoding secrets into prompts, scripts, logs, or repositories, increasing the chance of API key leakage and unauthorized payment actions.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The documentation instructs forwarding the entire HTTP 402 response body from an external API to Crow without any privacy minimization or warning. While x402 payment metadata is often expected to be shared, the full body may include URLs, resource descriptions, query-linked identifiers, or merchant-supplied metadata that can expose user or business-sensitive information to a third party.

External Transmission

Medium
Category
Data Exfiltration
Content
Check spending rules and sign an EIP-3009 USDC payment authorization for x402 protocol.

```bash
curl -X POST https://api.crowpay.ai/authorize \
  -H "X-API-Key: crow_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
Confidence
79% confidence
Finding
This example sends a payment authorization request to an external service using an API key and payment metadata. In this skill context, the transmission is financially sensitive because it can result in signed payment authorizations, so presenting it without strong consent and validation guidance makes misuse by agents more dangerous.

External Transmission

Medium
Category
Data Exfiltration
Content
To retry the original request with payment:
```bash
PAYMENT=$(echo '{"x402Version":2,...}' | base64 -w0)
curl https://api.example.com/v1/endpoint \
  -H "payment-signature: $PAYMENT"
```
Confidence
73% confidence
Finding
The example shows retrying a third-party request with a payment-signature header containing a base64-encoded payment payload. In a payment skill, this is sensitive because the header can authorize paid access and may leak signed payment data to logs, proxies, browser tooling, or unintended destinations if mishandled.

External Transmission

Medium
Category
Data Exfiltration
Content
Check spending rules and sign an EIP-3009 USDC payment authorization for x402 protocol.

```bash
curl -X POST https://api.crowpay.ai/authorize \
  -H "X-API-Key: crow_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
Confidence
79% confidence
Finding
This example sends a payment authorization request to an external service using an API key and payment metadata. In this skill context, the transmission is financially sensitive because it can result in signed payment authorizations, so presenting it without strong consent and validation guidance makes misuse by agents more dangerous.

External Transmission

Medium
Category
Data Exfiltration
Content
To retry the original request with payment:
```bash
PAYMENT=$(echo '{"x402Version":2,...}' | base64 -w0)
curl https://api.example.com/v1/endpoint \
  -H "payment-signature: $PAYMENT"
```
Confidence
73% confidence
Finding
The example shows retrying a third-party request with a payment-signature header containing a base64-encoded payment payload. In a payment skill, this is sensitive because the header can authorize paid access and may leak signed payment data to logs, proxies, browser tooling, or unintended destinations if mishandled.

External Transmission

Medium
Category
Data Exfiltration
Content
Request a credit card payment. Returns a Stripe Shared Payment Token.

```bash
curl -X POST https://api.crowpay.ai/authorize/card \
  -H "X-API-Key: crow_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
Confidence
82% confidence
Finding
This example requests a card payment authorization from an external API and can produce a Stripe Shared Payment Token usable for real purchases. In context, that is financially dangerous if an agent invokes it automatically or without strong user consent, merchant verification, and secret-handling safeguards.

External Transmission

Medium
Category
Data Exfiltration
Content
Check wallet balance, spending rules, and daily spending. Returns all wallets and card payment methods for the authenticated user.

```bash
curl "https://api.crowpay.ai/status" \
  -H "X-API-Key: crow_sk_..."
```
Confidence
69% confidence
Finding
The status endpoint returns all wallets, card payment methods, spending rules, and daily spending for the authenticated user. In an agent environment, documenting and encouraging use of this endpoint without privacy guidance can expose sensitive financial metadata if responses are logged, surfaced to the wrong user, or over-collected.

External Transmission

Medium
Category
Data Exfiltration
Content
Pass the **entire 402 response body** as `paymentRequired`, and add a clear `merchant` name and `reason`:

```bash
curl -X POST https://api.crowpay.ai/authorize \
  -H "X-API-Key: crow_sk_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
Confidence
87% confidence
Finding
This step explicitly sends paymentRequired data from one external service to another third-party service, expanding the trust boundary. In this payment skill context, that is functionally necessary, but it becomes risky because the documentation tells users to send the entire 402 body without warning, minimization, or validation, which can leak sensitive metadata to Crow.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
### Responses

**200 OK — Auto-approved**

The signed payment payload. Use this to retry the original request.
Confidence
92% confidence
Finding
The documentation explicitly supports auto-approved payment authorizations that return a signed payload ready for use. In a payment skill, autonomous approval of real fund movements is inherently risky because compromised prompts, deceptive 402 responses, or weak validation can cause unauthorized spending without a human in the loop.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
2. Merchant blacklist
3. Merchant whitelist (if configured)
4. Daily spending limit
5. Auto-approve threshold (above threshold → 202 pending)

---
Confidence
90% confidence
Finding
The documented spending rules permit automatic payment approval below a threshold. While intended functionality, this materially increases risk in an agent context because prompt injection, compromised upstream APIs, or merchant spoofing can exploit those thresholds to drain funds through many small transactions.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
|------|---------|
| Daily limit | $50 |
| Per-transaction limit | $25 |
| Auto-approve threshold | $5 |

---
Confidence
89% confidence
Finding
The default card spending rules include an auto-approve threshold of $5, enabling unattended purchases. In isolation the amount is small, but in aggregate this can be abused through repeated low-value charges or by malicious tools persuading the agent to authorize many transactions.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
|------|---------|
| Daily limit | $50 (5000 cents) |
| Per-transaction limit | $25 (2500 cents) |
| Auto-approve threshold | $5 (500 cents) |

Owners can customize all limits in the dashboard under the "Rules" tab.
Confidence
72% confidence
Finding
The documented default `Auto-approve threshold` allows some payments to be approved without human review, which is an autonomous spending decision. In the context of an agent payment skill, this increases risk because prompt injection, tool misuse, or transaction manipulation could trigger real financial actions below the threshold without explicit user consent.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
The wallet owner sees the `merchant` and `reason` when approving, so make them descriptive.

## Step 3a: If 200 — Auto-approved

Crow checked spending rules and $0.50 is within the auto-approve threshold. You get a signed payment payload:
Confidence
86% confidence
Finding
The documentation normalizes automatic approval of payments based on spending rules, allowing the agent workflow to obtain signed payment authorizations without per-transaction human review. In a payment-handling skill, this increases risk because malicious or manipulated 402 responses could trigger unintended charges within the threshold if upstream merchant identity, amount, or context are not robustly validated.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
- USDC contract: `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`
- Crow signs EIP-3009 `TransferWithAuthorization` — the facilitator settles on-chain
- The wallet's private key never leaves Crow's server
- Default auto-approve threshold is $5 — owner can change this in dashboard
Confidence
84% confidence
Finding
Advertising a default auto-approve threshold for payments creates a standing authorization that can be abused if an agent is induced to process malicious or misleading payment requests. In this skill context, autonomous spending is the core function, which makes the issue more dangerous because the system is explicitly designed to convert external prompts and 402 responses into signed payment actions.

VirusTotal

65/65 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
references/card-payments.md:15

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
references/x402-flow.md:43