Back to skill

Security audit

A2A Market

Security checks across malware telemetry and agentic risk

Overview

This is a coherent marketplace/payment skill, but it gives an agent broad authority to spend wallet funds or credits and perform account actions with incomplete confirmation safeguards.

Install only if you intentionally want an agent to interact with A2A Market. Use a dedicated low-balance wallet, disable or lower auto-approval, require explicit confirmation before every purchase, listing, registration, reward claim, or credit spend, and review any acquired skill package before installing or running it. Remove ~/.a2a_agent_id and ~/.a2a_referral_code when you no longer want the local account linkage.

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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (12)

Lp3

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding
The skill instructs use of environment variables, local file storage, network requests, and shell commands, but declares no permissions. That mismatch hides powerful capabilities from users and host systems, reducing informed consent and preventing least-privilege enforcement for actions that can access secrets, write files, and initiate payments.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The quick-start commands instruct users to publish the entire project to ClawHub and, as a fallback, create a public GitHub repository, but they do not warn that these actions upload local project contents to third-party services and may expose code or embedded secrets. In an agent-skill marketplace context, users may paste and run these commands verbatim, increasing the chance of unintended disclosure of proprietary code, credentials, or sensitive configuration files.

Vague Triggers

Medium
Confidence
93% confidence
Finding
The activation conditions are overly broad, including generic terms like "marketplace," "buy skill," capability-gap detection, and internal agent behaviors such as task failure or low efficiency. This can cause the skill to trigger during ordinary conversation or autonomous execution paths, increasing the chance of unintended searches, registrations, purchases, or monetization flows.

Missing User Warnings

High
Confidence
98% confidence
Finding
The skill explicitly allows autonomous purchases, payment-method selection, and daily reward claims without a prominent, mandatory warning that these actions can spend money or credits and create on-chain or account-side effects. In a marketplace and wallet-integrated context, silent or lightly-gated financial actions are especially dangerous because they can lead to unauthorized spending or account activity.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The script persists the agent ID and referral code under the user's home directory without warning, consent, or setting restrictive permissions. These identifiers may be reused for account actions or referral abuse, and storing them silently increases the risk of unintended disclosure on multi-user systems or through backups and dotfile sync tools.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The register() method persists the agent_id and referral_code to predictable files in the user's home directory without any consent flow, permission hardening, or secrecy controls. While these are not private keys, they are account-linked identifiers that may be sensitive in multi-user environments, containers, shared hosts, or systems with weak default umask settings, and the skill context increases concern because the client handles payments and marketplace transactions.

External Transmission

Medium
Category
Data Exfiltration
Content
echo -e "${YELLOW}Registering agent: $name${NC}"

    response=$(curl -s -X POST "$API_URL/v1/agents/register" \
        -H "Content-Type: application/json" \
        -d "$body")
Confidence
79% confidence
Finding
curl -s -X POST "$API_URL/v1/agents/register" \ -H "Content-Type: application/json" \ -d

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
max_per_transaction: 10.00      # Max $10 per purchase
    daily_budget: 100.00            # Max $100/day
    min_seller_reputation: 60       # Only buy from rep >= 60
    auto_approve_below: 5.00        # Auto-buy under $5
    require_confirmation_above: 50.00
  
  # Selling rules
Confidence
94% confidence
Finding
auto_approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
1. Search: GET /v1/listings/search?q=pdf_parser
2. Present options to user with price, rating, seller reputation
3. User says "buy the first one"
4. Check: price <= auto_approve_below? 
   - Yes: Execute purchase automatically
   - No: Confirm with user first
5. Complete x402 payment flow
Confidence
95% confidence
Finding
auto_approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
max_per_transaction: float = 10.0
    daily_budget: float = 100.0
    min_seller_reputation: int = 60
    auto_approve_below: float = 5.0
    require_confirmation_above: float = 50.0

@dataclass
Confidence
93% confidence
Finding
auto_approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
def _needs_confirmation(self, price: float) -> bool:
        """Check if purchase needs human confirmation."""
        return price > self.rules.auto_approve_below
    
    def search(
        self,
Confidence
94% confidence
Finding
auto_approve

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
if not confirm_callback(skill):
                    raise ValueError("Purchase cancelled by user")
            else:
                raise ValueError(f"Purchase of ${price} requires confirmation (above ${self.rules.auto_approve_below})")
        
        # Step 1: Request content, expect 402
        response = requests.get(f"{self.api_url}/v1/listings/{skill_id}/content")
Confidence
95% confidence
Finding
auto_approve

VirusTotal

64/64 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.