Back to skill

Security audit

IMDb API

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent IMDb data wrapper, but it needs review because it passes the user's API token through command-line arguments and URL query parameters, which can expose it in process or URL logs.

Review before installing if your JustOneAPI token has billing, quota, or account impact. Use a dedicated low-privilege token if available, avoid sharing logs or process listings from runs, monitor usage, and rotate the token if it may have appeared in command history, process telemetry, or URL logs.

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:1146
Finding

API Token Exposed Through Process Arguments and URL Query Parameters

Content
View full analysis
" --token "$JUST_ONE_API_TOKEN" --params-json '{"key":"value"}' ``` The manifest defines the token as an HTTP query parameter: ```js { "defaultValue": null, "description": "User's authentication token.", "enumValues": [], "location": "query", "name": "token", "required": true, "schemaType": "string" } ``` The runtime accepts the secret from the command line, injects it into the parameter object, appends all query parameters to the URL, and sends the resulting request: ```js const params = parseParams(args.paramsJson); applyDefaults(operation, params); injectToken(operation, params, args.token); validateRequired(operation, params); const baseUrl = manifest.baseUrl; const url = new URL(operation.path, ensureBaseUrl(baseUrl)); applyPathParams(operation, params, url); applyQueryParams(operation, params, url); const requestInit = { headers: { "accept": "application/json", }, method: operation.method, }; let response; try { response = await fetch(url, requestInit); } catch (error) { fail("Network request failed.", { cause: error instanceof Error ? error.message : String(error), operationId: operation.operationId, }); } ``` Command-line parsing and token injection are implemented as follows: ```js function parseArgs(argv) { const parsed = { operation: null, params ...[truncated 4470 chars]
Remediation
View remediation
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • System Prompt LeakageDirect Leakage, Indirect Extraction, Tool-Based Exfiltration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (13)

Direct Prompt Extraction

High
Category
System Prompt Leakage
Confidence
85% confidence
Finding

Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.

Content

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

md
- Get a token from [Just One API Dashboard](https://dashboard.justoneapi.com/en/login?utm_source=clawhub.ai&utm_medium=referral&utm_campaign=justoneapi_imdb&utm_content=project_link).
- Authentication details: [Just One API Usage Guide](https://docs.justoneapi.com/en/?utm_source=clawhub.ai&utm_medium=referral&utm_campaign=justoneapi_imdb&utm_content=project_link).

## Output Rules

- Start with a plain-language answer tied to the IMDb task the user asked for.
- Include the most decision-relevant fields from the selected endpoint before dumping raw JSON.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill invokes a Node helper that performs authenticated external API requests, but the manifest does not declare an explicit tool scope such as allowed network access or permissions. This creates a policy gap: an agent may execute network-capable code without a clear least-privilege declaration, making review and runtime enforcement weaker.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The manifest description highlights a narrow subset of capabilities, but the embedded operation list includes broader functionality such as keyword search, news retrieval, streaming picks, awards, box office, chart rankings, reviews, recommendations, and more. This creates a semantic mismatch between the advertised purpose and the actual behavior surface of the skill.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This code performs outbound HTTP requests and includes a required token query parameter in the URL, which means the user's authentication token is transmitted to an external service. The file contains no confirmation prompt, user-facing disclosure, or explanatory comment/docstring warning that credentials will be sent off-box.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description at L0003 highlights release expectation, extended details, and top cast and crew, implying a relatively focused workflow scope. However, the operations list also includes keyword search, news, streaming picks, awards, box office, chart rankings, critics reviews, recommendations, plot, user reviews, and other endpoints, which materially broadens the skill beyond the described subset.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This manifest repeatedly sets languageCountry to en_US by default, which imposes a specific language/locale preference unless the caller overrides it. Under the policy, forcing a specific locale without user opt-in can be a natural-language policy violation even when alternative locales are listed.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest says the skill analyzes IMDb workflows 'including release Expectation, extended Details, and top Cast and Crew across 19 operations,' which implies emphasis on a narrow set of title-detail workflows. However, the file defines a much broader surface including keyword search, news, streaming picks, awards, box office, chart rankings, recommendations, reviews, and contribution-related endpoints. This is a semantic mismatch between the advertised purpose and the actual operation set.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

Passing an authentication token in the query string is dangerous because URLs are commonly logged by clients, proxies, gateways, browser history, and observability systems. That increases the chance of credential leakage and replay by anyone with access to those logs, even if transport uses HTTPS.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
84% confidence
Finding

The manifest frames the skill as analyzing IMDb workflows and highlights read-oriented title information like release expectation and cast/crew. The titleContributionQuestions operation is described as supporting 'data maintenance workflows and title metadata review,' which shifts into IMDb contribution/governance functionality rather than pure analysis or research. Even though the endpoint is read-only, the documented purpose expands beyond the manifest's stated analytical scope.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

Multiple operations set languageCountry to en_US by default, causing the skill to prefer a specific language/locale when the user does not choose one. This can violate language/locale policy because the file does not present the default as an opt-in choice or otherwise justify enforcing English (US).

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The operation is named and summarized as a plot-summary endpoint, but its description says it returns core metrics, trend signals, and performance indicators, which are inconsistent with storyline summaries. This is an active documentation contradiction rather than mere incompleteness.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The wording at L0003 suggests analysis-focused workflows, but the file defines only direct GET retrieval operations against many IMDb endpoints rather than analysis-specific behavior. This makes the skill functionally a broad data-access wrapper, not a narrowly scoped analysis workflow tool.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
89% confidence
Finding

SQP-3 applies to all file types, and this documentation repeatedly sets languageCountry to en_US by default rather than presenting language choice as user-driven. That establishes a locale preference implicitly, which can conflict with organizational policies requiring language or locale selection to be based on user choice.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.