Back to skill

Security audit

Fabric Marketplace

Security checks for vulnerabilities and agentic risk

Overview

This Fabric marketplace skill is mostly coherent documentation, but it tells agents to take financial, legal, account, webhook, contact-sharing, and credential-transfer actions without enough explicit user control.

Review before installing. Use this only with explicit human approval for account creation, legal assent, purchases, subscriptions, contact reveal, settlement, and any posting or offer acceptance. Do not share long-lived SSH credentials, API keys, dormant accounts, or primary account access; require scoped, temporary, revocable access and verify provider terms before any off-platform deal.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
failure-taxonomy.md:18
Finding
Agent-Directed Purchases Without Explicit Operator Authorization<![CDATA[ ## Vulnerability Details **File Location**: `failure-taxonomy.md:18`, `failure-taxonomy.md:35`, `failure-taxonomy.md:46`, `failure-taxonomy.md:57`, `failure-taxonomy.md:91`, and `trust-safety.md:74-76` **Vulnerability Type**: Financial action performed without mandatory human approval **Risk Level**: High ### Vulnerable Content From `failure-taxonomy.md`: ```markdown | 402 | `credits_exhausted` | Not enough credits | Purchase credits using `credit_pack_options` from the error response, then retry with new key | ``` ```markdown | 429 | `prepurchase_daily_limit_exceeded` | Pre-purchase limits active | Make any purchase (subscription or credit pack) to permanently remove these limits. `purchase_options` is included in the response. | ``` ```markdown ├─ Is it 402? │ └─ YES → Read credit_pack_options from error. Purchase credits. Retry. ``` ```markdown └─ Is it 429? └─ prepurchase_daily_limit_exceeded → Purchase something, retry ``` ```markdown If balance < 50 credits and you have more work to do, purchase proactively rather than hitting 402 mid-workflow. ``` From `trust-safety.md`: ```markdown These exist to let you evaluate Fabric with signup credits. **Any purchase** (subscription or credit pack) permanently removes them. When you hit `429 prepurchase_daily_limit_exceeded`, the response includes `purchase_options` with ready-to-use payloads for both subscription and credit pack purchases. ``` ### Technical Analysis The skill directs an agent to purchase credits or subscriptions in response to API errors and low-balance conditions. It does not require explicit operator confirmation, impose a transaction limit, distinguish one-time purchases from recurring subscriptions, or require independent verification of the amount and payment destination. The guidance also encourages using purchase options and ready-to-use payloads supplied by the remote API. A compromised service, malicious intermediary, or incorrectly trusted endpoint could influe ...[truncated 1596 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require explicit, transaction-specific operator approval before every purchase or subscription. 2. Display the product, amount, currency, payment provider, recurrence terms, taxes, and total charge before approval. 3. Never execute a purchase request body directly from an API error response. 4. Validate that purchase endpoints use an allowlisted HTTPS origin and expected API path. 5. Independently validate product identifiers and prices against trusted configuration. 6. Enforce per-transaction, daily, and cumulative spending limits. 7. Disable recurring subscriptions by default and require separate confirmation for recurring billing. 8. Treat insufficient credits as a stop condition when human approval is unavailable. 9. Record an auditable transaction log containing the approving operator, selected product, amount, and response. 10. Replace autonomous language such as “Purchase something” with “Ask the operator whether to purchase; do not proceed without explicit approval.” ]]>

T05 · Unauthorized Access and Privilege Escalation

Error
Location
trading-scenarios.md:15
Finding
Unsafe Exchange of Reusable Credentials and Delegated Account Access<![CDATA[ ## Vulnerability Details **File Location**: `trading-scenarios.md:15`, `trading-scenarios.md:39`, and `trading-scenarios.md:203` **Vulnerability Type**: Transfer of reusable credentials and privileged account access **Risk Level**: High ### Vulnerable Content ```markdown | 7 | Account Actions & Delegated Access | Submit/claim using seller's account, workspace access, queue position | ``` ```markdown Agent B accepts. Mutual acceptance. Contact reveal. They exchange SSH creds and API keys off-platform. ``` ```markdown - **What do you have that's sitting idle?** Unused compute, empty time slots, excess inventory, dormant accounts, unused licenses. ``` ### Technical Analysis The skill presents reusable SSH credentials, API keys, workspace access, delegated account actions, and dormant accounts as tradeable resources. It does not require credentials to be temporary, scoped, isolated, or revocable. It also does not verify whether account or license transfers are permitted by the account owner or underlying provider. Reusable SSH credentials may grant interactive access to a host and any data or services reachable from it. API keys may provide broad service permissions and can remain usable after the transaction. Delegating actions through a seller's account may enable impersonation or bypass normal authorization controls. The instruction to exchange credentials off-platform removes the marketplace's visibility and makes it more difficult to audit, constrain, or revoke access. ### Attack Path 1. A malicious counterparty publishes a listing or offer involving compute, API access, a workspace, or an account action. 2. The agent negotiates and mutually accepts the offer. 3. After contact reveal, one party sends reusable SSH credentials, API keys, session credentials, or account access details. 4. The recipient authenticates with the transferred credentials. 5. If the credentials are overprivileged, the recipient reads unrelated data, performs unauthor ...[truncated 1037 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Explicitly prohibit transferring passwords, private SSH keys, session cookies, recovery codes, long-lived API keys, and dormant accounts. 2. Require isolated, transaction-specific service accounts rather than personal or production accounts. 3. Use short-lived credentials with automatic expiration and immediate revocation after the transaction. 4. Restrict credentials to least-privilege permissions, specific resources, expected source addresses, and required operations. 5. For SSH access, use temporary public-key authorization in an isolated environment; never transfer a private key. 6. For APIs, issue narrowly scoped tokens with quotas, expiration, and resource-level restrictions. 7. Require documented authorization from the account or resource owner before delegated actions. 8. Verify that account, license, and workspace transfers comply with provider terms and applicable policies. 9. Place traded compute in a sandbox with network segmentation, secret isolation, monitoring, and immutable audit logs. 10. Rotate or revoke all credentials after fulfillment and alert on access outside the agreed time or scope. 11. Revise examples to describe temporary access grants rather than exchanging “SSH creds and API keys.” ]]>

T01 · Skill Instruction Hijacking

Warning
Location
getting-started.md:13
Finding
Autonomous External Registration, Legal Assent, and Webhook Configuration<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:10`, `getting-started.md:13-28`, and `getting-started.md:32-41` **Vulnerability Type**: Skill instructions redirecting the agent into consequential external actions **Risk Level**: Medium ### Vulnerable Content From `SKILL.md`: ```markdown **This skill is your operating system for marketplace interaction.** It teaches you not just the API surface, but *how to behave* — efficiently, creatively, and in good faith. ``` From `getting-started.md`: ```markdown ## Step 2: Bootstrap your Node ``` POST /v1/bootstrap Idempotency-Key: <uuid> Content-Type: application/json { "display_name": "Your Agent Name", "email": null, "referral_code": null, "legal": { "accepted": true, "version": "<from Step 1>" } } ``` Returns `node.id`, `api_key.api_key`, and 100 signup credits. **Store both securely.** The API key is your identity from here on. ``` ```markdown ## Step 3: Set up webhooks (do this immediately) ``` PATCH /v1/me Authorization: ApiKey <key> Idempotency-Key: <uuid> If-Match: <version> { "event_webhook_url": "https://your-agent.example.com/fabric-events" } ``` ``` ### Technical Analysis Loading the skill introduces authoritative language that characterizes the skill as the agent's “operating system” and then directs the agent to create an external marketplace identity, assent to legal terms, retain a long-lived identity credential, and immediately configure an inbound webhook. These are consequential actions that should be subject to operator authorization. An agent generally cannot independently provide informed legal assent on behalf of a person or organization unless it has explicit delegated authority. Similarly, webhook registration establishes a continuing channel through which remote events may influence later agent behavior. The webhook security section elsewhere in the project recommends HMAC verification, but the setup example labels the secret as optional and does not requir ...[truncated 1469 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require explicit operator approval before account creation, legal assent, API-key storage, webhook setup, publication, offer creation, contact reveal, or settlement. 2. Present the current legal terms or a trusted link and confirm that the operator is authorized to accept them. 3. Replace `"accepted": true` in autonomous setup instructions with an operator-confirmed parameter. 4. Remove language that calls the skill the agent's “operating system” or otherwise implies authority over higher-priority goals and safety constraints. 5. State that system, developer, and operator instructions always take precedence over skill content. 6. Require webhook signing rather than describing the secret as optional. 7. Verify HMAC signatures using constant-time comparison and reject stale timestamps to prevent replay attacks. 8. Apply strict event schemas, payload-size limits, rate limits, deduplication, and event-ID replay protection. 9. Treat all webhook fields, listings, notes, and counterparty messages as untrusted data, never as executable instructions. 10. Store API keys in an approved secret manager, redact them from logs, apply rotation, and provide revocation procedures. 11. Use an allowlisted webhook origin and require operator approval for any downstream consequential action triggered by an event. ]]>
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 (5)

Vague Triggers

Medium
Confidence
94% confidence
Finding
The skill’s 'use when' description is very broad and covers many common marketplace, API integration, and billing scenarios without clear activation boundaries. In an agentic system, this can cause the skill to be invoked in overly broad contexts, increasing the chance that its trading and negotiation guidance influences actions where marketplace behavior is not actually appropriate or where stricter domain-specific controls should apply.

Unbounded Resource Access

Medium
Category
Excessive Agency
Content
return give_up(last_response)
```

After 3 retries: log the failure, surface it to your operator, and move on. Don't loop forever.
Confidence
75% 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
96% confidence
Finding
The playbook explicitly encourages off-platform settlement using arbitrary payment methods and immediate contact sharing, but provides no warning about fraud, irreversible payments, impersonation, privacy exposure, or lack of platform protection. In a marketplace-integration skill, this omission can lead agents or users to route transactions into higher-risk channels without applying verification or safety controls.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The document normalizes exchanging SSH credentials and API keys off-platform as a routine settlement step, without any warning about credential theft, reuse, provenance, least-privilege, or revocation. In a marketplace skill aimed at agent behavior, this can directly encourage unsafe handling of powerful secrets and access channels, increasing the likelihood of account compromise, unauthorized compute use, or data exfiltration.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The scenario promotes delegated account access and transfer of API-backed usage rights as a creative marketplace good, but omits any discussion of terms-of-service violations, privacy exposure, auditability, or abuse of the seller's account. Because this skill teaches agents how to structure trades, it may cause automated systems to treat account sharing and API-key transfer as acceptable defaults, leading to policy breaches, fraud, and unauthorized access to third-party systems.

Static analysis

No suspicious patterns detected.