Back to skill

Security audit

Amazon Product Top Reviews API

Security checks for vulnerabilities and agentic risk

Overview

The skill is narrowly focused, but it handles the JustOneAPI token in ways that can expose it through command lines or URL logs.

Install only if you are comfortable using a JustOneAPI token for this endpoint. Prefer a narrowly scoped, revocable token, avoid sharing logs or process traces from runs, and rotate the token if it may have appeared in command history, process telemetry, proxy logs, or API 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:219
Finding

API Token Exposed Through Command-Line 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 query parameters, including the token, are appended to the request 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); } } 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)); } ``` The URL containing the credential is then transmitted to the fixed JustOneAPI endpoint: ```js const params = parseParams(args.paramsJson); applyDefaults(operation, params); injectToken(operation, params, args.token); valida ...[truncated 3260 chars]
Remediation
View remediation
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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (4)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill invokes a networked helper (node {baseDir}/bin/run.mjs calling a remote API) but does not declare any explicit tool scope such as permissions or allowed-tools. This weakens policy enforcement and user visibility, making it easier for a skill to perform outbound requests without clear sandboxing or least-privilege constraints.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill defines the authentication token as a query parameter and automatically injects it into the request URL. Query-string secrets are commonly exposed via logs, browser/history systems, proxy infrastructure, monitoring tools, and error reporting, making accidental credential disclosure more likely even when HTTPS is used.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The operation requires a token query parameter for an external third-party API, but the spec provides no warning that user- or developer-supplied credentials will be transmitted off-platform. Passing secrets in the query string also increases exposure through logs, browser history, intermediary systems, and telemetry compared with using an authorization header.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

This JSON file is a manifest-style definition, so vague-trigger checks apply. The top-level description and display name describe capability but provide no explicit invocation phrases, scope limits, or exclusion conditions, which can make activation criteria ambiguous if downstream systems infer triggers from this metadata.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.