Skip to content
Back to skills

Webapp Api Unsafe Third Party Consumption

ASecurity

Testing whether the target trusts data from third-party APIs, webhooks, or callbacks without sufficient validation, enabling injection, logic bypass, or data…

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
securityjavascriptrustgojavabashtestinggitapisecurity

Works with

  • terminal
  • api

Security analysis

A100/100

Scanned November 7, 2026

npx -y skills add bitbytelabio/arsenal --skill webapp-api-unsafe-third-party-consumption --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Webapp Api Unsafe Third Party Consumption?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Webapp Api Unsafe Third Party Consumption
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/bitbytelabio-webapp-api-unsafe-third-party-consumption/badge)](https://www.skillsdirectory.com/skills/bitbytelabio-webapp-api-unsafe-third-party-consumption)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: webapp-api-unsafe-third-party-consumption
description: Testing whether the target trusts data from third-party APIs, webhooks, or callbacks without sufficient validation, enabling injection, logic bypass, or data…
domain: webapp
category: api
hide: true
license: Apache-2.0
metadata:
  manifest_entry: src/corpus/webapp-api-unsafe-third-party-consumption/SKILL.md
---
# API Unsafe Third-Party Consumption (OWASP API10)

## Purpose
Test whether the target API consumes data from external services (webhooks, payment callbacks, identity providers, enrichment APIs) without properly validating the input, enabling data poisoning, injection, or trust-boundary failures.

## Preconditions
- The target accepts data from a third-party source (webhook, callback, API response, OAuth provider)
- You can influence the data the third party sends (or simulate it)

## Distinction from SSRF
- **SSRF** (API7): The TARGET sends a request to an unintended destination
- **Unsafe consumption** (API10): The TARGET trusts and mishandles data returned/provided by another API

## Attack Surface Signals
- Webhook endpoints (Stripe, PayPal, GitHub, Slack, etc.)
- Payment processor callbacks
- Identity provider (IdP) data ingestion (OAuth userinfo, SAML assertions, SSO)
- Third-party enrichment APIs (email verification, credit checks, address validation)
- External feed/RSS import
- Remote image/document/file ingestion
- Shipping/tracking API responses
- Third-party authentication flows (sign in with Google/GitHub)
- External data imports (CSV, JSON, XML from a URL)

## Methodology

### Step 1: Identify Third-Party Data Ingestion Points
Map where the target accepts external data:
- What fields from the third-party response are consumed?
- Are they stored, displayed, or used in logic decisions?
- Is there signature/HMAC validation?

### Step 2: Test Webhook Payload Injection
```bash
# If you control the webhook source (e.g., you registered a webhook):
# Send a webhook with malicious payload in fields the target processes

curl -sk -X POST "https://TARGET/webhooks/stripe" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "payment_intent.succeeded",
    "data": {
      "object": {
        "id": "pi_test123",
        "amount": 100,
        "metadata": {
          "user_id": "<img src=x onerror=alert(1)>",
          "callback_url": "javascript:alert(1)"
        }
      }
    }
  }'

# Check: does the metadata get stored and rendered without sanitization?
```

### Step 3: Test Missing Signature Validation
```bash
# Check if the webhook validates the signature
# Send a webhook WITHOUT the signature header
curl -sk -X POST "https://TARGET/webhooks/stripe" \
  -H "Content-Type: application/json" \
  -d '{"type":"payment_intent.succeeded","data":{"object":{"id":"pi_fake","amount":999999}}}'

# If accepted without Stripe-Signature header → missing validation

# Try with an invalid signature
curl -sk -X POST "https://TARGET/webhooks/stripe" \
  -H "Stripe-Signature: t=1,v1=invalid" \
  -H "Content-Type: application/json" \
  -d '{"type":"payment_intent.succeeded","data":{"object":{"id":"pi_fake"}}}'
```

### Step 4: Test OAuth/IdP Data Poisoning
```bash
# If the target consumes user profile data from an IdP:
# Can you control the data sent in the OAuth userinfo response?

# Test: set your profile email/username on the IdP to contain injection
# Then trigger the OAuth flow on the target
# Does the target trust the email from the IdP without validation?
```

### Step 5: Test Third-Party URL/Redirect Handling
```bash
# If the target follows URLs from third-party responses:
# Can the third-party response contain a redirect to an internal service?
# Or a data: URI, file: URI, or javascript: URI?

curl -sk -X POST "https://TARGET/api/import" \
  -H "Content-Type: application/json" \
  -d '{"source_url":"data:text/html,<script>alert(1)</script>"}'
```

### Step 6: Test Upstream Schema Drift
```bash
# If the target expects a specific JSON structure from an upstream API:
# What happens when the upstream sends unexpected types?

curl -sk -X POST "https://TARGET/api/webhooks/custom" \
  -H "Content-Type: application/json" \
  -d '{"user_id": {"$gt": ""}, "amount": "not_a_number"}'

# Test type confusion: string vs int, null vs object, array vs object
```

### Step 7: Test Trust Boundary Failures
```bash
# If the target uses third-party data for authorization decisions:
# Can you manipulate the third-party data to bypass access control?

# e.g., target trusts the "role" field from the IdP response
# Can you get the IdP to send a different role?

# If the target trusts "email_verified": true from an unverified source:
# Can you create an account with email_verified=true without actually verifying?
```

## Evidence Contract

An unsafe-consumption finding requires:
1. The third-party data source is identified (webhook, IdP, API)
2. The target accepts data from that source
3. The manipulated data caused a concrete security impact:
   - XSS in stored webhook metadata
   - Authorization bypass via manipulated IdP claim
   - Injection via unvalidated third-party field
   - State change from a forged webhook event
4. The target did NOT validate the data (or validation was bypassable)

**NOT evidence**: The webhook endpoint exists, a third-party API is used, a 200 response from the webhook receiver

## Common Misses
- Webhook endpoints that accept unsigned/incorrectly signed payloads
- IdP profile data (email, name, role) trusted without local validation
- Third-party API responses used in server-side template rendering
- External feeds that allow HTML/JavaScript injection
- Payment callbacks that update order status without server-side verification
- Data imports from external URLs that don't validate content type

## False Positives / Non-Findings
- Webhook exists but properly validates HMAC signatures
- Third-party data is used only for display and is properly escaped
- The target makes its own request to the third-party (that's SSRF, not consumption)
- A webhook endpoint that requires a secret token you don't have

## Arsenal Tool Strategy
- `terminal_execute` with curl for webhook payload crafting
- `http_request` for precise header/content-type manipulation
- `oob_callback` for verifying webhook-driven SSRF (when consumption leads to URL fetching)
- `agentmail` for testing email-based ingestion endpoints

## Stopping Rule
Test every identified third-party data ingestion point for: signature validation, input sanitization, type confusion, authorization bypass, and injection.

## Handoff
Report each confirmed unsafe-consumption issue with the data source, the manipulated field, the validation that was missing, and the concrete impact.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.