Back to skill

Security audit

Remix Agent Publish

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent Remix game-publishing guide, but users should handle the Remix API key carefully and be aware that the sample REST client performs live account actions.

Install only if you intend to let an agent work with your Remix publishing account. Use a scoped/test Remix API key where possible, keep it in server-side secrets or environment variables, review before running the REST snippet because it creates and updates live Remix drafts, and avoid sending Authorization headers to public documentation endpoints such as /docs/json.

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
snippets/rest-client.md:12
Finding

Bearer API Key Unnecessarily Sent to the Public OpenAPI Endpoint

Content
View full analysis

Vulnerability Details

File Location: snippets/rest-client.md:12-20
Vulnerability Type: Unnecessary credential transmission
Risk Level: Medium

Vulnerable Code

ts
const headers = {
  Authorization: `Bearer ${process.env.REMIX_API_KEY!}`,
  'Content-Type': 'application/json',
}

const openApiSpec = await fetch(`${baseUrl}/docs/json`, {
  method: 'GET',
  headers,
}).then((r) => r.json())

Technical Analysis

The example creates one shared header object containing the REMIX_API_KEY and uses it to retrieve the OpenAPI document from /docs/json. The project presents this endpoint as public documentation, so schema discovery does not require the bearer credential.

Attaching the API key to an unauthenticated request violates least privilege and expands the secret's exposure surface. The credential may become visible to request logging, tracing systems, reverse proxies, middleware, or future redirect handling associated with the documentation endpoint. Although the reviewed code sends the key only to the declared first-party domain and no attacker-controlled recipient was identified, the credential is still disclosed to infrastructure that does not need it.

Attack Path

  1. A user stores a valid publishing credential in REMIX_API_KEY.
  2. An agent or developer copies the documented REST client pattern.
  3. The shared headers object inserts the credential into every illustrated request.
  4. The client requests https://api.remix.gg/docs/json with the bearer key.
  5. Documentation-endpoint middleware, proxies, logs, or tracing systems receive or record a credential that was not needed for the operation.
  6. If such infrastructure is compromised or its logs are exposed, an unauthorized party could recover and reuse the key.

No evidence in the audited project demonstrates that this infrastructure is currently compromised; the final step describes the applicable exploitation condition.

Impact Assessment

Exposure of a valid A ...[truncated 505 chars]

Remediation
View remediation

Remediation Suggestions

Use separate headers for public and authenticated requests. Fetch the OpenAPI document without an authorization header:

ts
const openApiSpec = await fetch(`${baseUrl}/docs/json`, {
  method: 'GET',
}).then((r) => r.json())

const authenticatedHeaders = {
  Authorization: `Bearer ${process.env.REMIX_API_KEY!}`,
  'Content-Type': 'application/json',
}

Apply authenticatedHeaders only to endpoints that explicitly require authentication. Additionally:

  • Avoid globally shared credential-bearing header objects.
  • Permit credentials only for an explicit allowlist of HTTPS origins and authenticated paths.
  • Disable automatic redirects for authenticated requests, or validate that every redirect remains on the approved origin before resending credentials.
  • Ensure application, proxy, and tracing systems redact Authorization headers.
  • Rotate the API key if logs may already have captured it.
  • Update api/reference.md to state explicitly that /docs/json must be fetched without authentication.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (11)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This markdown file explicitly instructs the use of a Bearer API key in request headers, which is a privacy- and security-relevant behavior. Under the markdown variant of SQP-2, the description should warn users about protecting credentials and avoiding accidental exposure, but no such warning appears nearby or elsewhere in the file.

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

md
Base URL: `https://api.remix.gg`

1. Fetch OpenAPI JSON from `https://api.remix.gg/docs/json`.
2. Resolve exact methods/paths/schemas from the spec.
3. `GET /v1/agents/metadata/categories` to fetch valid category enums.
4. `POST /v1/agents/games`

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 29)May include surrounding context.

md
Base URL: `https://api.remix.gg`

1. Fetch OpenAPI JSON from `https://api.remix.gg/docs/json`.
2. Resolve exact methods/paths/schemas from the spec.
3. `GET /v1/agents/metadata/categories` to fetch valid category enums.
4. `POST /v1/agents/games`

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 30)May include surrounding context.

md
Base URL: `https://api.remix.gg`

1. Fetch OpenAPI JSON from `https://api.remix.gg/docs/json`.
2. Resolve exact methods/paths/schemas from the spec.
3. `GET /v1/agents/metadata/categories` to fetch valid category enums.
4. `POST /v1/agents/games`

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 · api/authentication.md (reported line 47)May include surrounding context.

md
Base URL: `https://api.remix.gg`

1. Fetch OpenAPI JSON from `https://api.remix.gg/docs/json`.
2. Resolve exact methods/paths/schemas from the spec.
3. `GET /v1/agents/metadata/categories` to fetch valid category enums.
4. `POST /v1/agents/games`

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 · api/reference.md (reported line 12)May include surrounding context.

md
Base URL: `https://api.remix.gg`

1. Fetch OpenAPI JSON from `https://api.remix.gg/docs/json`.
2. Resolve exact methods/paths/schemas from the spec.
3. `GET /v1/agents/metadata/categories` to fetch valid category enums.
4. `POST /v1/agents/games`

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 · api/reference.md (reported line 29)May include surrounding context.

md
Base URL: `https://api.remix.gg`

1. Fetch OpenAPI JSON from `https://api.remix.gg/docs/json`.
2. Resolve exact methods/paths/schemas from the spec.
3. `GET /v1/agents/metadata/categories` to fetch valid category enums.
4. `POST /v1/agents/games`

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 · mcp/quickstart.md (reported line 12)May include surrounding context.

md
Base URL: `https://api.remix.gg`

1. Fetch OpenAPI JSON from `https://api.remix.gg/docs/json`.
2. Resolve exact methods/paths/schemas from the spec.
3. `GET /v1/agents/metadata/categories` to fetch valid category enums.
4. `POST /v1/agents/games`

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 · mcp/quickstart.md (reported line 47)May include surrounding context.

md
Base URL: `https://api.remix.gg`

1. Fetch OpenAPI JSON from `https://api.remix.gg/docs/json`.
2. Resolve exact methods/paths/schemas from the spec.
3. `GET /v1/agents/metadata/categories` to fetch valid category enums.
4. `POST /v1/agents/games`

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The snippet reads an API credential from an environment variable and immediately uses it to make authenticated POST and GET requests that create and modify remote resources, but it provides no warning that executing the sample has real side effects. In an agent-skill context, code snippets are often copied or run directly, so omission of disclosure increases the risk of unintended authenticated actions against a user's account or production environment.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
81% confidence
Finding

The document uses absolute language such as 'Build for portrait orientation only' and 'Do not use landscape layouts or controls.' This imposes a fixed interaction format without indicating any user choice or justified regional/device constraint, which fits the policy category for forced mode preferences expressed in natural language.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.