Back to skill

Security audit

social-data

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly documented as a Superagnt data API, but it exposes broader web/SEO tooling and persistent webhook handling than the social-data framing clearly suggests.

Install only if you intend to let agents send social, web, SEO, and webhook data to Superagnt. Treat webhook receive URLs like credentials, do not rely on them as proof an event is genuine, validate vendor payloads before acting, and avoid using this skill for sensitive profile, business, or third-party data without authorization and retention controls.

Vulnerability Patterns
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (56)

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The file documents a different capability set than the manifest-declared skill, which creates a trust-boundary mismatch for agents and users. A skill presented as social-data but actually exposing SEO, website inspection, and search tooling can cause unintended data flows, overbroad permissions, and misuse of the integration under false expectations.

Description-Behavior Mismatch

Medium
Confidence
96% confidence
Finding
The skill metadata and introductory text claim a narrower scope than the body actually exposes. That mismatch can mislead users and agents into enabling Web scraping and SEO capabilities they did not intend to trust, weakening least-privilege and informed-consent assumptions.

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
The file explicitly says 'Nothing else' and later repeats that only the listed social APIs and webhooks are included, yet it also documents Web and SEO APIs. This deceptive or inaccurate scoping increases the chance an agent will trust and invoke broader external capabilities than the user expects.

External Transmission

Medium
Category
Data Exfiltration
Content
### Concepts

- **Endpoint** — a named receiver in the user's workspace. Created with a friendly `name` (e.g. `stripe-prod`); identified by a UUID `id`.
- **Receive URL** — `https://api.superagnt.com/webhooks/ingest/<endpointId>`. The endpoint id IS the secret in the URL — treat it like a credential. There is no signature verification; the URL is the auth.
- **Delivery** — one inbound POST, captured with the raw JSON body, the headers the third party sent, and the source IP. Has an `acknowledgedAt` timestamp that starts `null`.
- **Acknowledge** — mark a delivery as processed so it stops appearing in `unacknowledged: true` queries. Does NOT delete the delivery; history is retained.
Confidence
93% confidence
Finding
The webhook design explicitly states that the endpoint ID embedded in the URL is the only secret and that there is no signature verification. Any party that learns or guesses the URL can submit forged events, so agents consuming these deliveries may act on spoofed, replayed, or malicious payloads.

External Transmission

Medium
Category
Data Exfiltration
Content
### Typical Agent Flow

1. **Create the endpoint** — `POST /v1/webhook-endpoints` with `{ "name": "stripe-prod" }`. Returns `{ id, name, url }`. Show the `url` to the user and tell them to paste it into the third party's webhook configuration.
2. **Wait for events** — the third party POSTs to `https://api.superagnt.com/webhooks/ingest/<id>`. Each POST is stored as a delivery; nothing is forwarded synchronously.
3. **Poll for new work** — `GET /v1/webhook-endpoints/deliveries?unacknowledged=true&endpointId=<id>` (or omit `endpointId` to query across all endpoints in the workspace).
4. **Process each `rawPayload`** — it's the exact JSON the vendor sent. Parse it the way that vendor documents (e.g. for Stripe, switch on `type` and read `data.object`).
5. **Acknowledge** — call `POST /v1/webhook-endpoints/deliveries/ack` with `{ "ids": [...] }` (or single via `POST /v1/webhook-endpoints/deliveries/{id}/ack`) so the next poll doesn't re-deliver them.
Confidence
94% confidence
Finding
The documented agent flow instructs processing of raw third-party payloads from a webhook receiver that lacks signature verification. This makes the surrounding automation pipeline more dangerous because an agent may trust and execute business logic on untrusted inbound data that only relies on possession of a secret URL.

External Transmission

Medium
Category
Data Exfiltration
Content
| Method | Path | Summary |
|--------|------|---------|
| `POST` | `/v1/webhook-endpoints` | Create a new superagnt webhook endpoint. Returns { id, name, url } where `url` is a public HTTPS endpoint of the form https://api.superagnt.com/webhooks/ingest/<id>. Give that URL to a third party (Stripe, Calendly, GitHub, your own service, etc.) so they can POST events to it. superagnt stores every inbound POST as a "delivery" the agent can later fetch with superagnt_webhooks_list_deliveries. The `name` is a workspace-unique label (3-50 chars, lowercase + hyphens) that you can show to the user; it is NOT part of the receive URL. Use this when the user asks to "set up a webhook", "give me a URL to receive events", or "let me ingest events from <vendor>". |
| `GET` | `/v1/webhook-endpoints` | List every active webhook endpoint in the workspace. Returns an array of { id, name, description, isActive, createdAt, updatedAt }. Use the `id` from any item as `endpointId` for superagnt_webhooks_get_endpoint, superagnt_webhooks_delete_endpoint, or superagnt_webhooks_list_deliveries. Use this to discover existing endpoints before creating a new one or to show the user their current webhook configuration. |
| `GET` | `/v1/webhook-endpoints/{id}` | Get full details of a single webhook endpoint by id. Returns { id, name, description, isActive, createdAt, updatedAt }. Use this when you have an endpoint id (e.g. from superagnt_webhooks_list_endpoints) and need its full record. Note: this does NOT return the receive URL — reconstruct it as https://api.superagnt.com/webhooks/ingest/{id} if you need to show it again. |
| `DELETE` | `/v1/webhook-endpoints/{id}` | Soft-delete (deactivate) a webhook endpoint by id. After deletion the receive URL https://api.superagnt.com/webhooks/ingest/{id} stops accepting POSTs (returns 404). Existing delivery history is retained and still queryable. Use this when the user wants to stop receiving events on an endpoint or rotate to a new one. ALWAYS confirm wit
...[truncated 24 chars]
Confidence
93% confidence
Finding
The endpoint-creation documentation describes issuing public receive URLs for third parties while using only URL secrecy as authentication. Publicly addressable webhook endpoints without payload signing are susceptible to forgery if the URL leaks through logs, chats, referrers, or user error.

External Transmission

Medium
Category
Data Exfiltration
Content
|--------|------|---------|
| `POST` | `/v1/webhook-endpoints` | Create a new superagnt webhook endpoint. Returns { id, name, url } where `url` is a public HTTPS endpoint of the form https://api.superagnt.com/webhooks/ingest/<id>. Give that URL to a third party (Stripe, Calendly, GitHub, your own service, etc.) so they can POST events to it. superagnt stores every inbound POST as a "delivery" the agent can later fetch with superagnt_webhooks_list_deliveries. The `name` is a workspace-unique label (3-50 chars, lowercase + hyphens) that you can show to the user; it is NOT part of the receive URL. Use this when the user asks to "set up a webhook", "give me a URL to receive events", or "let me ingest events from <vendor>". |
| `GET` | `/v1/webhook-endpoints` | List every active webhook endpoint in the workspace. Returns an array of { id, name, description, isActive, createdAt, updatedAt }. Use the `id` from any item as `endpointId` for superagnt_webhooks_get_endpoint, superagnt_webhooks_delete_endpoint, or superagnt_webhooks_list_deliveries. Use this to discover existing endpoints before creating a new one or to show the user their current webhook configuration. |
| `GET` | `/v1/webhook-endpoints/{id}` | Get full details of a single webhook endpoint by id. Returns { id, name, description, isActive, createdAt, updatedAt }. Use this when you have an endpoint id (e.g. from superagnt_webhooks_list_endpoints) and need its full record. Note: this does NOT return the receive URL — reconstruct it as https://api.superagnt.com/webhooks/ingest/{id} if you need to show it again. |
| `DELETE` | `/v1/webhook-endpoints/{id}` | Soft-delete (deactivate) a webhook endpoint by id. After deletion the receive URL https://api.superagnt.com/webhooks/ingest/{id} stops accepting POSTs (returns 404). Existing delivery history is retained and still queryable. Use this when the user wants to stop receiving events on an endpoint or rotate to a new one. ALWAYS confirm with the user before deleting —
...[truncated 26 chars]
Confidence
94% confidence
Finding
The deliveries API returns raw webhook payloads, headers, and source IP for events accepted solely by secret URL. That combination can cause downstream agents to over-trust attacker-controlled content and increases exposure of sensitive inbound data without authenticity guarantees.

External Transmission

Medium
Category
Data Exfiltration
Content
[
  {
    "name": "superagnt_webhooks_create_endpoint",
    "description": "Create a new superagnt webhook endpoint. Returns { id, name, url } where `url` is a public HTTPS endpoint of the form https://api.superagnt.com/webhooks/ingest/<id>. Give that URL to a third party (Stripe, Calendly, GitHub, your own service, etc.) so they can POST events to it. superagnt stores every inbound POST as a \"delivery\" the agent can later fetch with superagnt_webhooks_list_deliveries. The `name` is a workspace-unique label (3-50 chars, lowercase + hyphens) that you can show to the user; it is NOT part of the receive URL. Use this when the user asks to \"set up a webhook\", \"give me a URL to receive events\", or \"let me ingest events from <vendor>\".",
    "method": "POST",
    "path": "/v1/webhook-endpoints",
    "parameters": {
Confidence
93% confidence
Finding
The tool schema for creating webhook endpoints again advertises public receive URLs authenticated only by knowledge of the URL. In an agent ecosystem, such URLs are prone to accidental disclosure in logs, prompts, traces, or user-visible output, enabling event spoofing.

External Transmission

Medium
Category
Data Exfiltration
Content
},
  {
    "name": "superagnt_webhooks_list_deliveries",
    "description": "Fetch the most recent webhook deliveries for the workspace, newest first. This is THE tool to use to \"check for new webhook events\", \"process incoming webhooks\", or \"see what a third party sent\". Returns { deliveries: [{ id, webhookEndpointId, rawPayload, headers, sourceIp, acknowledgedAt, createdAt }], nextCursor }. `rawPayload` is the exact JSON body the third party POSTed to https://api.superagnt.com/webhooks/ingest/<id> — parse it the way that vendor documents (e.g. for Stripe inspect `type` and `data.object`). Workflow: (1) call this with `unacknowledged: true` to get only un-processed deliveries, (2) handle each `rawPayload`, (3) call superagnt_webhooks_ack_delivery (or superagnt_webhooks_ack_deliveries for batch) with the delivery `id`s so they don't come back next poll. If `nextCursor` is non-null, pass it as `cursor` on the next call to page through older deliveries.",
    "method": "GET",
    "path": "/v1/webhook-endpoints/deliveries",
    "parameters": {
Confidence
94% confidence
Finding
The deliveries tool explicitly encourages agents to parse exact raw JSON bodies from webhook POSTs while the receiver lacks signature verification. This creates a high-risk trust boundary error: attacker-controlled payloads may be fed directly into autonomous processing workflows.

External Transmission

Medium
Category
Data Exfiltration
Content
Create an endpoint:

```bash
curl -X POST https://api.superagnt.com/v1/webhook-endpoints \
  -H "Authorization: Bearer $SUPERAGNT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "stripe-prod", "description": "Stripe events for production"}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Description-Behavior Mismatch

Medium
Confidence
90% confidence
Finding
The manifest describes a social data API for major social platforms plus webhook receiving, which strongly suggests social-profile, post, comment, and media data access. This file documents substantial additional capabilities for ad archive/search, seller details, and Facebook Marketplace rentals, vehicles, and item listings, which extend into commerce/classifieds intelligence rather than ordinary social data access.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
This markdown file describes access to page posts, group posts, marketplace listings, video content, ad discovery, and media download, all of which can affect user privacy or involve collection of third-party data. Under the markdown-specific warning rule, the description should disclose these implications, but no warning appears near the overview or endpoint list.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
The README advertises access to Instagram profiles, media, reels, locations, hashtags, and direct media download capabilities, but provides no privacy, consent, or acceptable-use guidance. In an agent context, this omission can normalize collection and redistribution of potentially privacy-sensitive social data and increase the likelihood of misuse at scale.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
This README advertises broad company/profile enrichment and retrieval capabilities over LinkedIn data but provides no guidance on handling personal data, consent, retention, or downstream use restrictions. In an agent setting, that omission increases the chance that integrators will collect, correlate, and expose sensitive professional profile data without appropriate privacy controls.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
This markdown file describes access to user activity, profile, comments, and posts, which can affect user privacy expectations, but it provides no warning or usage note about handling potentially sensitive personal data. Under the markdown-specific warning criterion, documenting data-access behavior without any privacy disclosure is a missing user warning.

Intent-Code Divergence

Medium
Confidence
98% confidence
Finding
The header explicitly identifies the app as `seo`, contradicting the manifest identity of `social-data`. This identity inconsistency can mislead reviewers and downstream agents about what tools are being enabled, weakening security review and approval processes.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
Technology fingerprinting and technology-based site discovery exceed the stated social-data purpose and expand the operational scope of the skill. In context, these capabilities can be used for reconnaissance and target profiling, especially when hidden behind an unrelated manifest identity.

External Transmission

Medium
Category
Data Exfiltration
Content
## Example

```bash
curl -X POST "https://api.superagnt.com/v1/data/seo/serp" \
  -H "Authorization: Bearer $SUPERAGNT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"key": "value"}'
Confidence
60% 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
88% confidence
Finding
This markdown file describes use of an external API with bearer-token authentication, and later defines parameters such as usernames, video IDs, and search queries that will be sent off-box. The documentation does not include any user-facing warning about privacy or data-handling implications of sending those inputs to a third-party endpoint.

External Transmission

Medium
Category
Data Exfiltration
Content
## Example

```bash
curl -X POST "https://api.superagnt.com/v1/data/web/scrape" \
  -H "Authorization: Bearer $SUPERAGNT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"key": "value"}'
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
# X (Twitter) API Reference

**App name:** `x`
**Base URL:** `https://api.superagnt.com/v1/data/x`
**Endpoints:** 52

Unified access to tweets, user profiles, followers, search, and hashtag streams. Built for LLMs and automation — not one-off scraping.
Confidence
91% confidence
Finding
The documented base URL confirms that this skill is designed to transmit data to an external third-party domain. In this context, that is expected functionality, but it is still security-relevant because agents using the skill may forward user data, social graph information, or analysis text outside the trust boundary.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The README instructs clients to send identifiers and free-form content to a third-party service using an API key, but it does not warn that prompts, usernames, user IDs, tweet IDs, hashtags, search queries, and text submitted to AI/translation endpoints leave the local environment and are processed externally. In an agent setting, this omission can cause unsuspecting users or downstream integrators to transmit sensitive or regulated data to a remote provider without informed consent or data-handling review.

External Transmission

Medium
Category
Data Exfiltration
Content
## Example

```bash
curl -X GET "https://api.superagnt.com/v1/data/x/user/medias/continuation?param=value" \
  -H "Authorization: Bearer $SUPERAGNT_API_KEY"
```
Confidence
89% confidence
Finding
The example curl command demonstrates direct transmission of request parameters and an authorization bearer token to the external API. While this is normal documentation behavior, it reinforces the risk that users may send live data or mishandle credentials if they do not understand the third-party nature of the call.

External Transmission

Medium
Category
Data Exfiltration
Content
# YouTube API Reference

**App name:** `youtube`
**Base URL:** `https://api.superagnt.com/v1/data/youtube`
**Endpoints:** 24

Unified access to video metadata, channel discovery, comments, subtitles, and recommendations. Built for LLMs and automation — not one-off scraping.
Confidence
50% 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
# YouTube API Reference

**App name:** `youtube`
**Base URL:** `https://api.superagnt.com/v1/data/youtube`
**Endpoints:** 24

Unified access to video metadata, channel discovery, comments, subtitles, and recommendations. Built for LLMs and automation — not one-off scraping.
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Static analysis

No suspicious patterns detected.