Back to skill

Security audit

Knowledge Graph - API Ingestion Connectors

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent API-ingestion helper, but users should handle endpoints and credentials carefully because it prepares authenticated external API requests.

Install only if you intend to build API ingestion connectors. Use trusted HTTPS endpoints, least-privilege tokens, environment variables or a secrets manager, and avoid putting Authorization, API key, Basic Auth, or OAuth secrets in files, logs, shell history, screenshots, or support messages. Review downstream code that sends the generated request configs, because the helper does not enforce HTTPS for authenticated requests.

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

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/api_connector.py:166
Finding

Authenticated request configurations permit insecure plaintext HTTP endpoints

Content
View full analysis

Vulnerability Details

File Location: scripts/api_connector.py, lines 94-104, 166-184, and 256-267
Vulnerability Type: Missing secure transport validation for authentication credentials
Risk Level: Medium

Vulnerable Code

python
def __init__(self, name: str, api_type: APIType = APIType.REST,
             endpoint: str = "", method: str = "GET"):
    """Initialize API connector."""
    self.name = name
    self.api_type = api_type
    self.endpoint = endpoint
    self.method = method
    self.auth_config = AuthConfig()
    self.pagination_config = PaginationConfig()
    self.request_headers: Dict[str, str] = {}
python
def get_request_config(self) -> APIRequest:
    """Build complete request configuration."""
    headers = dict(self.request_headers)

    # Add authentication headers
    if self.auth_config.auth_type == AuthType.API_KEY:
        headers[self.auth_config.api_key_header] = self.auth_config.api_key or ""
    elif self.auth_config.auth_type == AuthType.BEARER:
        headers["Authorization"] = f"Bearer {self.auth_config.token}"
    elif self.auth_config.auth_type == AuthType.BASIC:
        import base64
        credentials = f"{self.auth_config.username}:{self.auth_config.password}"
        encoded = base64.b64encode(credentials.encode()).decode()
        headers["Authorization"] = f"Basic {encoded}"

    return APIRequest(
        endpoint=self.endpoint,
        method=self.method,
        headers=headers,
        params=dict(self.request_params),
        body=self.request_body
    )
python
def validate_config(self) -> bool:
    """Validate connector configuration."""
    if not self.endpoint:
        self.errors.append("Endpoint is required")
        return False

    if self.api_type == APIType.REST and not self.method:
        self.errors.append("HTTP method is required for REST API")
        return False

    ret
...[truncated 2720 chars]
Remediation
View remediation

Remediation Suggestions

  1. Parse endpoints with urllib.parse.urlparse during validation.
  2. Require the https scheme whenever API-key, bearer, Basic, or OAuth authentication is configured.
  3. Reject malformed URLs, unsupported schemes, missing hostnames, and credentials embedded directly in URLs.
  4. If plaintext HTTP is necessary for trusted local development, require an explicit option such as allow_insecure_http=False by default and restrict any exception to loopback or an administrator-approved host allowlist.
  5. Validate OAuth token endpoints independently and require HTTPS for them as well.
  6. Document that Authorization and API-key headers must never be included in logs, exceptions, configuration summaries, or serialized diagnostic output.
  7. Add tests confirming that authenticated http:// endpoints are rejected while authenticated https:// endpoints are accepted.
  8. Encourage least-privilege, short-lived credentials and provide clear credential-revocation guidance.

Example hardening logic:

python
from urllib.parse import urlparse

def validate_config(self) -> bool:
    self.errors.clear()

    if not self.endpoint:
        self.errors.append("Endpoint is required")
        return False

    parsed = urlparse(self.endpoint)
    if parsed.scheme not in {"http", "https"} or not parsed.hostname:
        self.errors.append("Endpoint must be a valid HTTP(S) URL")

    if (
        self.auth_config.auth_type != AuthType.NONE
        and parsed.scheme != "https"
    ):
        self.errors.append(
            "HTTPS is required when authentication is configured"
        )

    if parsed.username or parsed.password:
        self.errors.append("Credentials must not be embedded in endpoint URLs")

    if self.api_type == APIType.REST and not self.method:
        self.errors.append("HTTP method is required for REST API")

    return len(self.errors) == 0
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (29)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The Basic Auth example includes a base64-encoded Authorization header without warning that base64 is not encryption and directly represents credentials. Readers may mistakenly treat the value as harmless, reuse real credentials in test requests, or expose credentials through logs, proxies, and documentation artifacts.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This markdown file includes a usage example that performs external API requests and demonstrates use of bearer-token authentication. The README does not warn users that the skill may send data to third-party APIs or that API tokens are sensitive and should be handled carefully.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill explicitly instructs users to supply API endpoint URLs and authentication credentials and is designed to send requests to external services, but it does not warn that user-provided data and secrets will be transmitted off-platform. This can lead users to unknowingly expose sensitive data, tokens, or regulated information to third-party APIs during normal use.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The documentation includes a credential-bearing Authorization header example using a GitHub bearer token format, but does not warn readers not to paste real tokens into docs, logs, screenshots, or source control. Even though the token is masked, this normalizes secret exposure in examples and can lead to accidental leakage of live credentials during copy/paste or debugging.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
78% confidence
Finding

Unlike a bare endpoint reference, this request example combines external transmission with an Authorization header in documentation. That makes the example more operational and increases the chance that users will paste real tokens into requests, terminals, support tickets, or logs when reproducing it.

Content

Scanner excerpt · examples/example-connectors.md (reported line 28)May include surrounding context.

Request Format

bash
GET https://api.github.com/users?page=1&per_page=30
Authorization: Bearer ghp_xxxxxxxxxxxxxxxxxxxx

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The Shopify example shows use of an access token for an external commerce API without any guidance on secure secret handling or data sensitivity. This can cause implementers to embed tokens insecurely or overlook that product and store metadata are being transmitted to a third-party endpoint.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The OAuth2 client credentials example references a client secret and token exchange flow but provides no warning about protecting the client secret or avoiding insecure storage and logging. Client secrets are highly sensitive; disclosure enables unauthorized token issuance and API access under the application's identity.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · examples/example-connectors.md (reported line 211)May include surrounding context.

yaml
name: twitter_tweets_connector
api_type: rest
endpoint: https://api.twitter.com/2/tweets/search/recent
method: GET
auth:
  type: oauth2

External Transmission

Medium
Category
Data Exfiltration
Confidence
80% confidence
Finding

This token endpoint reference appears in an OAuth2 client credentials flow alongside client_id and client_secret usage. In context, the issue is not the external URL alone but that the example encourages secret-backed outbound authentication without adjacent guidance on protecting secrets and limiting scopes.

Content

Scanner excerpt · examples/example-connectors.md (reported line 216)May include surrounding context.

md
auth:
  type: oauth2
  grant_type: client_credentials
  token_endpoint: https://api.twitter.com/2/oauth2/token
  client_id: ${TWITTER_CLIENT_ID}
  client_secret: ${TWITTER_CLIENT_SECRET}
headers:

External Transmission

Medium
Category
Data Exfiltration
Confidence
76% confidence
Finding

This request example sends data to an external service with a bearer access token. In an example-oriented document, that increases the risk of accidental secret disclosure and normalizes sending potentially sensitive query content to a third party without warning or data-classification guidance.

Content

Scanner excerpt · examples/example-connectors.md (reported line 231)May include surrounding context.

Request Format

bash
GET https://api.twitter.com/2/tweets/search/recent?query=knowledge%20graph&max_results=100
Authorization: Bearer {access_token}
Accept: application/json

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

name: basic_connector api_type: rest endpoint: https://api.example.com/data method: GET timeout: 30

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

name: basic_connector api_type: rest endpoint: https://api.example.com/data method: GET timeout: 30

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

name: basic_connector api_type: rest endpoint: https://api.example.com/data method: GET timeout: 30

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/connector-patterns.md (reported line 14)May include surrounding context.

name: basic_connector api_type: rest endpoint: https://api.example.com/data method: GET timeout: 30

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/connector-patterns.md (reported line 33)May include surrounding context.

name: basic_connector api_type: rest endpoint: https://api.example.com/data method: GET timeout: 30

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/connector-patterns.md (reported line 55)May include surrounding context.

name: basic_connector api_type: rest endpoint: https://api.example.com/data method: GET timeout: 30

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/connector-patterns.md (reported line 77)May include surrounding context.

name: basic_connector api_type: rest endpoint: https://api.example.com/data method: GET timeout: 30

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/connector-patterns.md (reported line 365)May include surrounding context.

name: basic_connector api_type: rest endpoint: https://api.example.com/data method: GET timeout: 30

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/connector-patterns.md (reported line 394)May include surrounding context.

name: basic_connector api_type: rest endpoint: https://api.example.com/data method: GET timeout: 30

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/connector-patterns.md (reported line 426)May include surrounding context.

name: basic_connector api_type: rest endpoint: https://api.example.com/data method: GET timeout: 30

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/connector-patterns.md (reported line 461)May include surrounding context.

name: basic_connector api_type: rest endpoint: https://api.example.com/data method: GET timeout: 30

text

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The authentication examples include realistic credential-bearing header formats such as Bearer and API key headers without nearby cautions about redaction, secret handling, or avoiding real tokens in examples and logs. In connector documentation, this can lead users to paste live secrets into configs, examples, shell history, or logs, increasing risk of credential leakage.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
80% confidence
Finding

The manifest describes a skill for connecting to external APIs and ingesting data into graph-ready ETL structures. This section documents interactive user-authentication patterns, including redirecting a user and delegated consent for multi-user systems, which extends beyond a typical server-side ingestion connector capability.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · README.md (reported line 65)May include surrounding context.

md
rest_connector = APIConnector(
        name="github_users",
        api_type=APIType.REST,
        endpoint="https://api.github.com/users",
        method="GET"
    )
    rest_connector.set_auth("bearer", token="your_token_here")

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · examples/example-connectors.md (reported line 13)May include surrounding context.

md
rest_connector = APIConnector(
        name="github_users",
        api_type=APIType.REST,
        endpoint="https://api.github.com/users",
        method="GET"
    )
    rest_connector.set_auth("bearer", token="your_token_here")

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
examples/example-connectors.md:29

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
references/connector-patterns.md:107