Back to skill

Security audit

Api Tmp

Security checks for vulnerabilities and agentic risk

Overview

This is a documentation-only API reference, but some examples use risky credential patterns and high-impact API actions that should be reviewed before use.

Review this skill before installing if you expect agents or users to copy commands directly. Prefer header-based authentication, avoid URL query-string credentials, do not use password-grant examples for general integrations, and require explicit user approval before running write/delete/posting/payment/crypto-transfer commands.

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

T09 · Insecure Skill Coding Practices

Warning
Location
apis/crm.md:238
Finding

Pipedrive API token exposed through URL query parameters

Content
View full analysis

Vulnerability Details

File Location: apis/crm.md, lines 238-284
Vulnerability Type: Credential exposure through URL query parameters
Risk Level: Medium

The Pipedrive reference repeatedly places the user's API token in request URLs:

bash
# API Key auth (query param)
curl "https://api.pipedrive.com/v1/deals?api_token=$PIPEDRIVE_API_KEY"

# List Deals
curl "https://api.pipedrive.com/v1/deals?api_token=$PIPEDRIVE_API_KEY&status=open&limit=50"

# Create Deal
curl -X POST "https://api.pipedrive.com/v1/deals?api_token=$PIPEDRIVE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "New Deal",
    "value": 5000,
    "currency": "USD",
    "person_id": 123,
    "org_id": 456
  }'

# Get Person (Contact)
curl "https://api.pipedrive.com/v1/persons/123?api_token=$PIPEDRIVE_API_KEY"

# Create Activity
curl -X POST "https://api.pipedrive.com/v1/activities?api_token=$PIPEDRIVE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Call with client",
    "type": "call",
    "due_date": "2024-03-15",
    "deal_id": 789
  }'

# Search Items
curl "https://api.pipedrive.com/v1/itemSearch?term=acme&item_types=deal,person&api_token=$PIPEDRIVE_API_KEY"

Technical Analysis

Environment-variable expansion inserts the real Pipedrive credential directly into the URL passed to curl. Although HTTPS protects the URL while it is transported over the network, URLs are commonly captured by local process inspection, shell debugging output, HTTP client diagnostics, reverse proxies, gateways, observability platforms, and server access logs.

This advice also conflicts with the project's own rule in SKILL.md:103, which states that API keys should be placed in headers instead of URL query parameters. The Pipedrive section acknowledges that query-parameter authentication is deprecated for OAuth applications but nevertheless presents it as the ...[truncated 1567 chars]

Remediation
View remediation

Remediation Suggestions

  1. Replace query-parameter authentication examples with OAuth bearer authentication:
    bash
    curl "https://api.pipedrive.com/v1/deals?status=open&limit=50" \
      -H "Authorization: Bearer $PIPEDRIVE_ACCESS_TOKEN"
    
  2. Present OAuth as the default and recommended authentication mechanism throughout the Pipedrive section.
  3. If legacy query authentication must remain documented, mark it clearly as deprecated and unsafe for environments where URLs are logged.
  4. Recommend short-lived, narrowly scoped credentials and separate test and production accounts.
  5. Warn users not to enable shell tracing, verbose HTTP diagnostics, or URL logging while using credentials.
  6. Configure proxies, gateways, monitoring systems, and access logs to redact api_token and other credential-bearing parameters.
  7. Rotate any credential suspected of appearing in logs and remove historical unredacted records where feasible.
  8. Add an automated documentation check that rejects examples containing secret-like variables in URL query strings.

T09 · Insecure Skill Coding Practices

Warning
Location
apis/crm.md:488
Finding

Apollo API key exposed through a URL query parameter

Content
View full analysis

Vulnerability Details

File Location: apis/crm.md, line 488
Vulnerability Type: Credential exposure through URL query parameters
Risk Level: Medium

The Apollo authentication section provides a query-string alternative that interpolates the user's API key into the request URL:

bash
curl "https://api.apollo.io/api/v1/auth/health?api_key=$APOLLO_API_KEY"

Technical Analysis

The shell expands $APOLLO_API_KEY before invoking curl, causing the reusable credential to become part of the URL. HTTPS protects the request in transit but does not prevent credential disclosure through local diagnostics, process monitoring, proxy logs, API gateway logs, observability tools, or provider access logs.

This example is unnecessary because the immediately preceding Apollo example uses the safer supported header form:

bash
curl https://api.apollo.io/api/v1/auth/health \
  -H "X-Api-Key: $APOLLO_API_KEY"

Consequently, the query-string variant exceeds the minimum exposure necessary for the documented operation and contradicts the project's stated rule against putting API keys in URLs.

Attack Path

  1. A user stores a genuine Apollo credential in APOLLO_API_KEY.
  2. The user copies and runs the query-string example.
  3. The shell substitutes the genuine key into the URL.
  4. A logging, monitoring, debugging, proxy, or telemetry component records the complete URL.
  5. An unauthorized party with access to that record extracts the API key.
  6. The party authenticates to Apollo using the stolen key.
  7. The party accesses or modifies Apollo resources permitted by the credential.

Impact Assessment

Compromise may expose Apollo account data and CRM or prospecting resources available to the API key. Depending on its permissions, an attacker may be able to perform people matching, enrichment, contact searches, contact creation, or campaign-related actions.

The effective scope is constrained by ...[truncated 176 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove the query-parameter example and retain only header-based authentication:
    bash
    curl https://api.apollo.io/api/v1/auth/health \
      -H "X-Api-Key: $APOLLO_API_KEY"
    
  2. Add a warning that API keys must not be placed in URLs because URLs are frequently retained in logs and telemetry.
  3. Use narrowly scoped keys where supported and separate production credentials from testing credentials.
  4. Ensure request logging and monitoring systems redact parameters named api_key, api_token, access_token, and similar variants.
  5. Rotate keys that may have been exposed through previously executed query-string examples.
  6. Add static validation for documentation examples to prevent secret-bearing environment variables from appearing in URLs.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (746)

Prompt Exfiltration via Tool

High
Category
System Prompt Leakage
Confidence
80% confidence
Finding

Skill contains patterns that exfiltrate system prompts or internal instructions via tool calls (file writes, network requests, logging).

Content

Scanner excerpt · apis/ai-ml.md (reported line 667)May include surrounding context.

md
- `max_new_tokens` - Max tokens to generate
- `temperature` - Randomness (0-1)
- `top_p` - Nucleus sampling
- `return_full_text` - Include prompt in response
- `wait_for_model` - Wait if model loading

## Rate Limits

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 · apis/business.md (reported line 21)May include surrounding context.

Authentication

bash
# Admin API (access token)
curl "https://{store}.myshopify.com/admin/api/2024-01/products.json" \
  -H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

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 · apis/payments.md (reported line 127)May include surrounding context.

Authentication

bash
# Admin API (access token)
curl "https://{store}.myshopify.com/admin/api/2024-01/products.json" \
  -H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

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 · apis/payments.md (reported line 132)May include surrounding context.

Authentication

bash
# Admin API (access token)
curl "https://{store}.myshopify.com/admin/api/2024-01/products.json" \
  -H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

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 · apis/social.md (reported line 111)May include surrounding context.

Authentication

bash
# Admin API (access token)
curl "https://{store}.myshopify.com/admin/api/2024-01/products.json" \
  -H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

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 · apis/social.md (reported line 367)May include surrounding context.

Authentication

bash
# Admin API (access token)
curl "https://{store}.myshopify.com/admin/api/2024-01/products.json" \
  -H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

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 · apis/social.md (reported line 527)May include surrounding context.

Authentication

bash
# Admin API (access token)
curl "https://{store}.myshopify.com/admin/api/2024-01/products.json" \
  -H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

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 · apis/support.md (reported line 295)May include surrounding context.

Authentication

bash
# Admin API (access token)
curl "https://{store}.myshopify.com/admin/api/2024-01/products.json" \
  -H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN"

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 · apis/developer.md (reported line 198)May include surrounding context.

https://api.bitbucket.org/2.0

Authentication

App passwords, OAuth 2.0, or repository/workspace access tokens.

bash
# Using App Password (Basic Auth)

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 · apis/social.md (reported line 472)May include surrounding context.

https://api.bitbucket.org/2.0

Authentication

App passwords, OAuth 2.0, or repository/workspace access tokens.

bash
# Using App Password (Basic Auth)

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 · apis/developer.md (reported line 1167)May include surrounding context.

md
## Links
- [Docs](https://docs.launchdarkly.com/)
- [API Reference](https://apidocs.launchdarkly.com/)
- [API Access Tokens](https://docs.launchdarkly.com/home/account-security/api-access-tokens)
# Split (Harness Feature Flags)

Feature flags and experimentation platform (acquired by Harness).

Credential Access

High
Category
Privilege Escalation
Confidence
84% confidence
Finding

The documentation explicitly recommends placing the Mapbox access token in the query string. Query-string credentials are more likely to be exposed through browser history, logs, analytics, intermediary systems, referrer leakage, and copied URLs, so normalizing this pattern can lead to credential disclosure in downstream implementations.

Content

Scanner excerpt · apis/geo.md (reported line 80)May include surrounding context.

text

## Authentication
Access token as query parameter.

```bash
curl -X GET "https://api.mapbox.com/geocoding/v5/mapbox.places/Los%20Angeles.json?access_token=YOUR_ACCESS_TOKEN"

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 · apis/developer.md (reported line 254)May include surrounding context.

md
## Gotchas
- **OAuth only** — no API keys for server-to-server auth
- Access tokens expire in 2 hours — use refresh tokens
- `orgId` in token response identifies the customer's organization
- Contact attributes are flexible key-value pairs
- Conversation `status`: `open`, `closed`, `pending`

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 · apis/developer.md (reported line 255)May include surrounding context.

md
## Gotchas
- **OAuth only** — no API keys for server-to-server auth
- Access tokens expire in 2 hours — use refresh tokens
- `orgId` in token response identifies the customer's organization
- Contact attributes are flexible key-value pairs
- Conversation `status`: `open`, `closed`, `pending`

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 · apis/developer.md (reported line 1157)May include surrounding context.

md
## Gotchas
- **OAuth only** — no API keys for server-to-server auth
- Access tokens expire in 2 hours — use refresh tokens
- `orgId` in token response identifies the customer's organization
- Contact attributes are flexible key-value pairs
- Conversation `status`: `open`, `closed`, `pending`

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 · apis/geo.md (reported line 123)May include surrounding context.

md
## Gotchas
- **OAuth only** — no API keys for server-to-server auth
- Access tokens expire in 2 hours — use refresh tokens
- `orgId` in token response identifies the customer's organization
- Contact attributes are flexible key-value pairs
- Conversation `status`: `open`, `closed`, `pending`

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 · apis/marketing.md (reported line 98)May include surrounding context.

md
## Gotchas
- **OAuth only** — no API keys for server-to-server auth
- Access tokens expire in 2 hours — use refresh tokens
- `orgId` in token response identifies the customer's organization
- Contact attributes are flexible key-value pairs
- Conversation `status`: `open`, `closed`, `pending`

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 · apis/media.md (reported line 593)May include surrounding context.

md
## Gotchas
- **OAuth only** — no API keys for server-to-server auth
- Access tokens expire in 2 hours — use refresh tokens
- `orgId` in token response identifies the customer's organization
- Contact attributes are flexible key-value pairs
- Conversation `status`: `open`, `closed`, `pending`

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 · apis/media.md (reported line 756)May include surrounding context.

md
## Gotchas
- **OAuth only** — no API keys for server-to-server auth
- Access tokens expire in 2 hours — use refresh tokens
- `orgId` in token response identifies the customer's organization
- Contact attributes are flexible key-value pairs
- Conversation `status`: `open`, `closed`, `pending`

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The Coinbase send-crypto example performs an asset transfer and lacks an explicit warning that blockchain transfers are often irreversible and may incur permanent loss if misused. In a skill consumed by agents or copy-paste automation, presenting a ready-to-run send request without safety framing materially increases the risk of accidental asset transfer.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
89% confidence
Finding

The Reddit example demonstrates the OAuth password grant with inline username and password submission plus client credentials, which encourages handling end-user passwords directly. In a modern agent or integration context, this materially increases the risk of credential collection, unsafe storage, accidental logging, or normalization of anti-pattern auth flows.

Content

Scanner excerpt · apis/social.md (reported line 396)May include surrounding context.

OAuth 2.0. Supports "script" (personal use), "web app", and "installed app" types.

bash
# Get access token
curl -X POST "https://www.reddit.com/api/v1/access_token" \
  -u "CLIENT_ID:CLIENT_SECRET" \
  -d "grant_type=password&username=USER&password=PASS"

Context Leakage

High
Category
Data Exfiltration
Confidence
85% confidence
Finding

Code or instructions that leak agent conversation context to external services, potentially exposing sensitive user interactions.

Content

Scanner excerpt · apis/social.md (reported line 517)May include surrounding context.

-H "Client-Id: {CLIENT_ID}"

text

### Send Chat Message
```bash
curl -X POST "https://api.twitch.tv/helix/chat/messages" \
  -H "Authorization: Bearer {USER_ACCESS_TOKEN}" \

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 · apis/developer.md (reported line 1103)May include surrounding context.

md
- `state` parameter ignorado = vulnerable a CSRF — siempre validar
- Token refresh sin mutex = race condition, múltiples refreshes simultáneos
- Access token expirado + refresh token expirado = usuario debe re-login (no solo refresh)
- `offline_access` scope olvidado = no hay refresh token

## JWT

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 · apis/payments.md (reported line 190)May include surrounding context.

md
- `state` parameter ignorado = vulnerable a CSRF — siempre validar
- Token refresh sin mutex = race condition, múltiples refreshes simultáneos
- Access token expirado + refresh token expirado = usuario debe re-login (no solo refresh)
- `offline_access` scope olvidado = no hay refresh token

## JWT

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 · auth.md (reported line 14)May include surrounding context.

md
- `state` parameter ignorado = vulnerable a CSRF — siempre validar
- Token refresh sin mutex = race condition, múltiples refreshes simultáneos
- Access token expirado + refresh token expirado = usuario debe re-login (no solo refresh)
- `offline_access` scope olvidado = no hay refresh token

## JWT

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
apis/media.md:207

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
apis/payments.md:423