Back to skill

Security audit

Platform API Connector

Security checks for vulnerabilities and agentic risk

Overview

This skill is a credential setup guide for social platforms, but it gives high-impact token storage and OAuth flow guidance without enough safety controls.

Review before installing. This skill may be useful as a platform API checklist, but do not follow its credential storage pattern as written. Store OAuth tokens and app secrets in a secret manager or encrypted store, use least-privilege scopes, validate OAuth state and PKCE where applicable, redact tokens from logs and URLs, and define token rotation and revocation procedures.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
references/oauth-flows.md:6
Finding

OAuth callback accepts authorization codes without validating the state parameter

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:128
Finding

Reusable platform credentials are stored directly in a generic JSONB column without prescribed protection

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:29
Finding

Facebook application secret and OAuth tokens are placed in URL query strings

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (8)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill explicitly instructs storing API credentials, OAuth access tokens, refresh tokens, and app secrets in a database, but provides no safeguards such as encryption, secret scoping, access control, rotation, or redaction guidance. In this context, the skill handles highly sensitive platform credentials, so normalizing plaintext or loosely governed storage materially increases the risk of account takeover and long-term unauthorized API access.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 28)May include surrounding context.

md
3. In Graph API Explorer (`developers.facebook.com/tools/explorer/`):
   - Select your app
   - Add permissions: `pages_show_list`, `pages_read_engagement`, `pages_manage_posts`, `instagram_basic`, `instagram_content_publish`
   - Generate User Access Token → authorize
   - Exchange for long-lived token: `GET /oauth/access_token?grant_type=fb_exchange_token&client_id={app_id}&client_secret={secret}&fb_exchange_token={short_token}`
4. Get Page Access Token: `GET /me/accounts` → find page → copy `access_token`
5. Get Instagram Business Account ID: `GET /{page_id}?fields=instagram_business_account`

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 96)May include surrounding context.

md
3. In Graph API Explorer (`developers.facebook.com/tools/explorer/`):
   - Select your app
   - Add permissions: `pages_show_list`, `pages_read_engagement`, `pages_manage_posts`, `instagram_basic`, `instagram_content_publish`
   - Generate User Access Token → authorize
   - Exchange for long-lived token: `GET /oauth/access_token?grant_type=fb_exchange_token&client_id={app_id}&client_secret={secret}&fb_exchange_token={short_token}`
4. Get Page Access Token: `GET /me/accounts` → find page → copy `access_token`
5. Get Instagram Business Account ID: `GET /{page_id}?fields=instagram_business_account`

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 97)May include surrounding context.

md
3. In Graph API Explorer (`developers.facebook.com/tools/explorer/`):
   - Select your app
   - Add permissions: `pages_show_list`, `pages_read_engagement`, `pages_manage_posts`, `instagram_basic`, `instagram_content_publish`
   - Generate User Access Token → authorize
   - Exchange for long-lived token: `GET /oauth/access_token?grant_type=fb_exchange_token&client_id={app_id}&client_secret={secret}&fb_exchange_token={short_token}`
4. Get Page Access Token: `GET /me/accounts` → find page → copy `access_token`
5. Get Instagram Business Account ID: `GET /{page_id}?fields=instagram_business_account`

Credential Access

High
Category
Privilege Escalation
Confidence
93% confidence
Finding

The skill explicitly instructs users to copy a page access token and then presents a storage pattern for persisting credentials, without any security controls. In this context, page access tokens can grant durable posting and account-management access, so encouraging manual copying and persistence without secret-handling safeguards creates a realistic credential-compromise path.

Content

Scanner excerpt · SKILL.md (reported line 30)May include surrounding context.

md
- Add permissions: `pages_show_list`, `pages_read_engagement`, `pages_manage_posts`, `instagram_basic`, `instagram_content_publish`
   - Generate User Access Token → authorize
   - Exchange for long-lived token: `GET /oauth/access_token?grant_type=fb_exchange_token&client_id={app_id}&client_secret={secret}&fb_exchange_token={short_token}`
4. Get Page Access Token: `GET /me/accounts` → find page → copy `access_token`
5. Get Instagram Business Account ID: `GET /{page_id}?fields=instagram_business_account`

### Store

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

The statement that page tokens derived from long-lived user tokens are permanent encourages retention of effectively non-expiring credentials without corresponding security warnings or compensating controls. In a credential-management skill, emphasizing permanence increases danger because a leaked token may provide indefinite unauthorized access.

Content

Scanner excerpt · SKILL.md (reported line 48)May include surrounding context.

text

### Key gotcha
Page Access Tokens from Graph API Explorer are **short-lived** unless you exchange the User Token for a long-lived one FIRST, then request Page tokens from the long-lived User Token. Page tokens derived from long-lived user tokens are **permanent** (no expiry).

## YouTube

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · SKILL.md (reported line 63)May include surrounding context.

md
from google_auth_oauthlib.flow import InstalledAppFlow

flow = InstalledAppFlow.from_client_secrets_file(
    'credentials.json',
    scopes=['https://www.googleapis.com/auth/youtube.upload',
            'https://www.googleapis.com/auth/youtube.readonly']
)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The description says to use the skill for 'setting up API access for any social platform, refreshing expired OAuth tokens, or debugging authentication flows,' which is a very broad trigger scope without explicit constraints or exclusion conditions. This ambiguity increases the chance of unintended invocation for generic auth or API-debugging tasks outside the intended platform-connector context.

Content

No source excerpt is available for this finding.