Back to skill

Security audit

IMDb Awards Summary API

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent JustOneAPI IMDb lookup wrapper, but it handles the API token in exposed places that users should review before installing.

Review this skill before installing if your JustOneAPI token has paid quota or broad account access. Prefer a version that reads the token from the environment and sends it in an authorization header, or use a narrowly scoped token you can rotate; avoid sharing command logs, process listings, URLs, or error reports from runs of this helper.

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
bin/run.mjs:18
Finding

API Credential Exposed Through Process Arguments and URL Query Parameters

Content
View full analysis
parameter.name === "token"); if (!tokenParam || params.token !== undefined) { return; } if (!cliToken) { fail("--token is required for this operation.", { operationId: operation.operationId, }); } params.token = cliToken; } ``` All parameters marked as query parameters, including the token, are appended to the URL: ```js function applyQueryParams(operation, params, url) { for (const parameter of operation.parameters.filter((item) => item.location === "query")) { const value = params[parameter.name]; if (value === undefined) { continue; } appendValue(url.searchParams, parameter.name, value); } } ``` The resulting URL is transmitted to the fixed JustOneAPI endpoint: ```js applyQueryParams(operation, params, url); const requestInit = { headers: { "accept": "application/json", }, method: operation.method, }; let response; try { response = await fetch(url, requestInit); ``` The documented invocation also passes the token through the process command line: ```bash node {baseDir}/bin/run.mjs --operation "titleAwardsSummaryQuery" --token "$JUST_ONE_API_TOKEN" --params-json ...[truncated 2628 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (4)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill sends the authentication token as a query parameter, which places the secret in the full request URL. URLs are commonly logged by client tooling, proxies, gateways, browser/history equivalents, monitoring systems, and error messages, so the token can be exposed beyond its intended destination even when HTTPS is used.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The API design requires the authentication token to be sent in the URL query string, which is commonly logged by browsers, proxies, gateways, server access logs, and observability tooling. This increases the chance of credential leakage and replay by anyone who can access those logs or captured URLs, even though the endpoint is only retrieving IMDb data.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The markdown lists a specific set of languageCountry values and presents them as the available options, but does not explicitly say the user should choose among them or that a default locale should only be used with user intent. This can create a language/locale policy concern because the skill defines locale behavior without an explicit opt-in statement.

Content

No source excerpt is available for this finding.