Back to skill

Security audit

IMDb User Reviews Summary API

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to be a legitimate single-endpoint API wrapper, but it handles the required API token in exposure-prone ways that users should review before installing.

Install only if you are comfortable giving this skill a JustOneAPI token. Prefer a narrowly scoped or disposable token if the provider supports it, avoid running it in environments that log command lines or full request URLs, and rotate the token if you suspect it was exposed.

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

Error
Location
bin/run.mjs:164
Finding

API Credential Exposed Through Command-Line Arguments and URL Query Parameters

Content
View full analysis
"}' ``` ```markdown - Required: `JUST_ONE_API_TOKEN` - Pass the token with `--token "$JUST_ONE_API_TOKEN"`; do not paste token values into chat messages, screenshots, or logs. ``` `bin/run.mjs:164-167`: ```js if (flag === "--token") { parsed.token = value; index += 1; continue; } ``` `bin/run.mjs:196-206`: ```js function injectToken(operation, params, cliToken) { const tokenParam = operation.parameters.find((parameter) => parameter.name === "token"); if (!tokenParam || params.token !== undefined) { return; } if (!cliToken) { fail("--token is required for this operation.", { operationId: operation.operationId, }); } params.token = cliToken; } ``` `bin/run.mjs:239-260`: ```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); } } function appendValue(searchParams, name, value) { if (Array.isArray(value)) { for (const item of value) { appendValue(searchParams, name, item); } return; } if (value && typeof value === "object") { searchParams.append(name, JSON.stringify(value)); return; } searchParams.append(name, String(value)); } ``` `bin/run.mjs:87-109`: ```js injectToken(operation, params, args.tok ...[truncated 3261 chars]
Remediation
View remediation
"}' ``` - Warn users that query-string authentication may be logged by net ...[truncated 51 chars]
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (5)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill invokes a network-capable helper (node .../bin/run.mjs) and requires an API token, but it does not declare an explicit tool scope such as permissions or allowed-tools. This creates an authorization and review gap: an agent or platform may permit broader execution/network behavior than intended, making outbound requests less transparent and harder to constrain.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The API authentication token is sent as a URL query parameter, which commonly leaks via logs, browser history, proxy caches, monitoring systems, and referrer-like telemetry. In this skill, the token is explicitly modeled as a query parameter and automatically injected, so every request exposes the credential more broadly than an Authorization header would.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The skill documentation limits languageCountry to a fixed set of locales and presents them as the available values, but it does not state that locale selection is optional, user-chosen, or justified by a region-specific purpose. This can be a natural-language locale policy issue because it constrains language behavior without documenting user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The languageCountry parameter automatically defaults to en_US, which imposes a specific language/locale choice unless the user overrides it. The file lists alternative locales, but it does not explicitly ask the user to choose or document that English (US) will be assumed by default.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

This manifest file describes a required token parameter only as "User's authentication token" and provides no specificity about format, source, or scoping. In manifest-style interface definitions, underspecified inputs can create ambiguous invocation or wiring behavior around which credential should be supplied.

Content

No source excerpt is available for this finding.