Back to skill

Security audit

RelayAPI

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent RelayAPI integration, but it gives an agent broad power to publish, delete, connect accounts, moderate messages, and change social-media configuration without clear confirmation rules.

Install only if you intend to let an agent operate connected social-media accounts through RelayAPI. Use a limited API key where possible, keep it in OpenClaw secrets, and require the agent to confirm before publishing, bulk posting, uploading local files, connecting or disconnecting accounts, deleting/unpublishing content, changing workspaces or queues, sending DMs/replies, or creating webhooks.

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 (51)

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
The skill includes account-connection flows for third-party services, including OAuth exchanges and credential-like inputs such as Bluesky app passwords. These capabilities expand beyond simple posting/management activation and can prompt users into linking external accounts or providing sensitive authorization material, increasing phishing, consent, and scope-creep risk.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The skill exposes social engagement actions such as follow, retweet, and bookmark, which are externally visible account actions not clearly covered by the stated purpose of unified posting and management. In an agent context, this can lead to unintended reputation-impacting actions or abuse of connected accounts for amplification without clear user intent.

Context-Inappropriate Capability

Low
Confidence
72% confidence
Finding
The Reddit search and feed features extend the skill from account management into content discovery. While not inherently destructive, this broadens the data-access and behavioral scope of the skill beyond its advertised purpose, making over-activation and unintended external queries more likely.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The activation text uses broad phrases like social media posting, analytics, inbox, comments, and webhooks, which are common across many benign conversations. This increases the chance the skill activates in contexts where users did not intend account-linked, externally acting operations, creating consent and data-exposure risks.

Missing User Warnings

High
Confidence
93% confidence
Finding
The skill documents destructive or externally visible actions such as deleting posts and unpublishing content without requiring explicit confirmation. In an autonomous or semi-autonomous agent setting, this omission raises the risk of accidental deletion, public-facing mistakes, and irreversible business impact across multiple platforms.

External Transmission

Medium
Category
Data Exfiltration
Content
env:
        - RELAYAPI_API_KEY
      bins:
        - curl
    primaryEnv: RELAYAPI_API_KEY
    emoji: "📡"
    homepage: https://relayapi.dev
Confidence
89% confidence
Finding
The skill is fundamentally designed to transmit user content, account metadata, analytics, messages, and media to an external service over the network using an API key. This is expected functionality, but it is still a real security concern because it enables broad outbound data flow to a third party and can affect many downstream platforms.

External Transmission

Medium
Category
Data Exfiltration
Content
storage_key="${media_url#https://media.relayapi.dev/}"

# PUT once using every exact header returned above
curl --fail-with-body -sS -X PUT "$upload_url" \
  -H "Content-Type: $upload_content_type" \
  -H "If-None-Match: $upload_precondition" \
  --data-binary @photo.jpg
Confidence
83% confidence
Finding
The media upload flow performs a direct PUT to an externally supplied upload URL, transmitting local file contents outside the immediate RelayAPI origin. This creates additional data-exfiltration risk because agents may upload sensitive local files if file selection is not tightly constrained and confirmed.

External Transmission

Medium
Category
Data Exfiltration
Content
# Confirm the object before attaching it (mandatory)
jq -n --arg storage_key "$storage_key" '{storage_key: $storage_key}' | \
  curl --fail-with-body -sS -X POST https://api.relayapi.dev/v1/media/confirm \
    -H "Authorization: Bearer $RELAYAPI_API_KEY" \
    -H "Content-Type: application/json" \
    --data-binary @-
Confidence
80% confidence
Finding
The confirm step sends media metadata and storage references to an external API, finalizing uploaded objects for later use in posts. Although expected, it contributes to a multi-step external transmission pipeline that can publish user-provided assets broadly if not carefully constrained.

External Transmission

Medium
Category
Data Exfiltration
Content
# Confirm the object before attaching it (mandatory)
jq -n --arg storage_key "$storage_key" '{storage_key: $storage_key}' | \
  curl --fail-with-body -sS -X POST https://api.relayapi.dev/v1/media/confirm \
    -H "Authorization: Bearer $RELAYAPI_API_KEY" \
    -H "Content-Type: application/json" \
    --data-binary @-
Confidence
80% confidence
Finding
The confirm step sends media metadata and storage references to an external API, finalizing uploaded objects for later use in posts. Although expected, it contributes to a multi-step external transmission pipeline that can publish user-provided assets broadly if not carefully constrained.

External Transmission

Medium
Category
Data Exfiltration
Content
-H "Authorization: Bearer $RELAYAPI_API_KEY"

# Filter by workspace
curl "https://api.relayapi.dev/v1/accounts?workspace_id=ws_abc123" \
  -H "Authorization: Bearer $RELAYAPI_API_KEY"

# Accounts not assigned to a workspace
Confidence
76% confidence
Finding
Listing accounts transmits authorization credentials to a third-party service and retrieves potentially sensitive account inventory information such as usernames, workspace associations, and platform identities. This can reveal organizational structure and connected assets if invoked too broadly or without need.

External Transmission

Medium
Category
Data Exfiltration
Content
-H "Authorization: Bearer $RELAYAPI_API_KEY"

# Accounts not assigned to a workspace
curl "https://api.relayapi.dev/v1/accounts?ungrouped=true" \
  -H "Authorization: Bearer $RELAYAPI_API_KEY"

# Search by username
Confidence
73% confidence
Finding
Querying ungrouped accounts sends an external request that enumerates account-management state and may disclose account organization gaps. While part of normal operation, this is still sensitive administrative data exposure through a third-party API.

External Transmission

Medium
Category
Data Exfiltration
Content
-H "Authorization: Bearer $RELAYAPI_API_KEY"

# Create workspace
curl -X POST https://api.relayapi.dev/v1/workspaces \
  -H "Authorization: Bearer $RELAYAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Marketing Team", "description": "All brand accounts" }'
Confidence
83% confidence
Finding
Creating workspaces is an external state-changing operation that can reorganize connected accounts at a third-party service. In the agent context, unauthorized or mistaken execution could alter publishing scope and future post routing across multiple social accounts.

External Transmission

Medium
Category
Data Exfiltration
Content
-d '{ "name": "Marketing Team", "description": "All brand accounts" }'

# Update workspace
curl -X PATCH https://api.relayapi.dev/v1/workspaces/{workspace_id} \
  -H "Authorization: Bearer $RELAYAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Rebranded Team" }'
Confidence
82% confidence
Finding
Updating a workspace changes external configuration that can affect how accounts are grouped and targeted. Misuse or accidental invocation could disrupt operational workflows and cause future posts to reach unintended destinations.

External Transmission

Medium
Category
Data Exfiltration
Content
-d '{ "name": "Rebranded Team" }'

# Delete workspace (accounts are unassigned, not deleted)
curl -X DELETE https://api.relayapi.dev/v1/workspaces/{workspace_id} \
  -H "Authorization: Bearer $RELAYAPI_API_KEY"

# Assign account to a workspace
Confidence
90% confidence
Finding
Deleting a workspace is a destructive external action that modifies account organization state. Even if accounts are only unassigned, it can break targeting assumptions and operational processes across teams, especially because this skill manages many downstream platforms.

External Transmission

Medium
Category
Data Exfiltration
Content
-H "Authorization: Bearer $RELAYAPI_API_KEY"

# Assign account to a workspace
curl -X PATCH https://api.relayapi.dev/v1/accounts/{account_id} \
  -H "Authorization: Bearer $RELAYAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "workspace_id": "ws_abc123" }'
Confidence
84% confidence
Finding
Assigning accounts to workspaces changes external routing and administrative scope, which can affect where future content gets published. Incorrect reassignment could result in cross-brand posting mistakes or unauthorized access patterns.

External Transmission

Medium
Category
Data Exfiltration
Content
# Facebook Pages
curl https://api.relayapi.dev/v1/accounts/{id}/facebook-pages \
  -H "Authorization: Bearer $RELAYAPI_API_KEY"
curl -X PUT https://api.relayapi.dev/v1/accounts/{id}/facebook-pages \
  -H "Authorization: Bearer $RELAYAPI_API_KEY" \
  -d '{ "page_id": "123" }'
Confidence
78% confidence
Finding
Platform sub-resource selection sends and retrieves account-linked configuration from an external service, potentially exposing available pages or properties and changing which assets are managed. This affects downstream publishing authority and visibility.

External Transmission

Medium
Category
Data Exfiltration
Content
-d '{ "page_id": "123" }'

# LinkedIn Organizations
curl https://api.relayapi.dev/v1/accounts/{id}/linkedin-organizations \
  -H "Authorization: Bearer $RELAYAPI_API_KEY"

# Pinterest Boards
Confidence
74% confidence
Finding
Listing LinkedIn organizations is an external transmission of account-scoped administrative data. It can reveal available organizational assets and broaden the agent's effective control surface if triggered unnecessarily.

External Transmission

Medium
Category
Data Exfiltration
Content
-H "Authorization: Bearer $RELAYAPI_API_KEY"

# Pinterest Boards
curl https://api.relayapi.dev/v1/accounts/{id}/pinterest-boards \
  -H "Authorization: Bearer $RELAYAPI_API_KEY"

# Reddit Subreddits & Flairs
Confidence
72% confidence
Finding
Listing Pinterest boards transmits account context externally and retrieves managed asset inventory. This is sensitive because it reveals publishing destinations and content organization structures.

External Transmission

Medium
Category
Data Exfiltration
Content
-H "Authorization: Bearer $RELAYAPI_API_KEY"

# Reddit Subreddits & Flairs
curl https://api.relayapi.dev/v1/accounts/{id}/reddit-subreddits \
  -H "Authorization: Bearer $RELAYAPI_API_KEY"
curl https://api.relayapi.dev/v1/accounts/{id}/reddit-flairs \
  -H "Authorization: Bearer $RELAYAPI_API_KEY"
Confidence
71% confidence
Finding
Fetching Reddit subreddit options is an external data request tied to connected account configuration. It expands data exchange beyond core posting and can expose or act on community-targeting metadata.

External Transmission

Medium
Category
Data Exfiltration
Content
# Reddit Subreddits & Flairs
curl https://api.relayapi.dev/v1/accounts/{id}/reddit-subreddits \
  -H "Authorization: Bearer $RELAYAPI_API_KEY"
curl https://api.relayapi.dev/v1/accounts/{id}/reddit-flairs \
  -H "Authorization: Bearer $RELAYAPI_API_KEY"

# Google Business Locations
Confidence
71% confidence
Finding
Fetching Reddit flairs is another external call that retrieves posting-target metadata and broadens the skill's third-party interactions. In aggregate with other admin actions, this increases the surface for unnecessary data exchange.

External Transmission

Medium
Category
Data Exfiltration
Content
# Returns: { "auth_url": "https://twitter.com/i/oauth2/authorize?..." }

# Step 2: After user authorizes, exchange the code
curl -X POST https://api.relayapi.dev/v1/connect/twitter \
  -H "Authorization: Bearer $RELAYAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "code": "the_auth_code_from_callback" }'
Confidence
91% confidence
Finding
The OAuth code exchange transmits sensitive authorization artifacts to an external service and results in persistent account connection. This is a high-impact action because successful misuse could give the skill control over the user's social accounts and downstream posting capabilities.

External Transmission

Medium
Category
Data Exfiltration
Content
-H "Authorization: Bearer $RELAYAPI_API_KEY"

# Platform overview for a specific account
curl "https://api.relayapi.dev/v1/analytics/platform/overview?account_id=acc_abc123" \
  -H "Authorization: Bearer $RELAYAPI_API_KEY"

# Post-level metrics from the platform
Confidence
74% confidence
Finding
Platform overview analytics transmits account identifiers and retrieves potentially sensitive performance data from an external service. While aligned with the product, it still exposes business intelligence through a third-party integration.

External Transmission

Medium
Category
Data Exfiltration
Content
-H "Authorization: Bearer $RELAYAPI_API_KEY"

# Post-level metrics from the platform
curl "https://api.relayapi.dev/v1/analytics/platform/posts?account_id=acc_abc123" \
  -H "Authorization: Bearer $RELAYAPI_API_KEY"

# Audience demographics
Confidence
74% confidence
Finding
Post-level analytics queries expose detailed content performance data externally. This may reveal campaign effectiveness, audience behavior, or sensitive business metrics if triggered broadly.

External Transmission

Medium
Category
Data Exfiltration
Content
-H "Authorization: Bearer $RELAYAPI_API_KEY"

# Audience demographics
curl "https://api.relayapi.dev/v1/analytics/platform/audience?account_id=acc_abc123" \
  -H "Authorization: Bearer $RELAYAPI_API_KEY"

# Daily time series from platform
Confidence
77% confidence
Finding
Audience analytics can involve demographic or segmentation data, which is especially sensitive business and potentially privacy-related information. Pulling this through an agent to a third-party service increases confidentiality concerns.

External Transmission

Medium
Category
Data Exfiltration
Content
-H "Authorization: Bearer $RELAYAPI_API_KEY"

# List posts with comment counts
curl https://api.relayapi.dev/v1/inbox/comments/by-post \
  -H "Authorization: Bearer $RELAYAPI_API_KEY"

# Comments for a specific post
Confidence
78% confidence
Finding
Listing comment counts requires external retrieval of inbox-related data and can expose engagement patterns and linked post metadata. This is within expected functionality but still constitutes third-party data access.

Static analysis

No suspicious patterns detected.