Back to skill

Security audit

Amazon Review Checker

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly matches its review-analysis purpose, but its report generator can execute unsafe injected HTML/JavaScript and loads unpinned remote JavaScript, so it needs review before use.

Install only from a pinned, reviewed version if possible. Treat the analysis scores as heuristic, and avoid generating or opening HTML reports from untrusted review data until the report generator escapes all fields, avoids innerHTML for untrusted content, and pins or vendors its JavaScript dependency.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/report_html.py:347
Finding

Stored HTML and JavaScript Injection in Generated Reports

Content
View full analysis
Review Analysis Report - {asin} ``` ```python

📊 Review Authenticity Analysis

ASIN: {asin}
Summary: {summary}
``` ```python
{d.get('status', '❓')}
{d.get('name', d.get('name_zh', ''))}
{d.get('score', 0):.0f}/100
``` ```python
{d.get('detail', d.get('detail_zh', ''))}
``` ```javascript const suspicious = {suspicious_json}; const container = document.getElementById('suspiciousReviews'); if (suspicious.length === 0) { container.innerHTML = '

No highly suspicious reviews detected.

'; } else { suspicious.slice(0, 5).forEach((review, index) => { container.innerHTML += `
#${index + 1} Risk: ${review.risk_score?.toFixed(0) || 'N/A'}%
"${review.content}"
Reasons ...[truncated 2589 chars]
Remediation
View remediation
`, `&`, U+2028, and U+2029 safely encoded. 3. Replace `innerHTML` and template-based markup assembly with DOM APIs that assign untrusted values through `textContent`: ```javascript const content = document.createElement('div'); content.className = 'suspicious-content'; content.textContent = `"${review.content}"`; item.appendChild(content); ``` 4. Validate structured fields before rendering: - Restrict `risk_level` and status values to explicit allowlists. - Require scores and review counts to be numeric and within expected ranges. - Apply maximum lengths to textual report fields. 5. Add a restrictive Content Security Policy to generated reports. Avoid inline scripts where practical and disallow unneeded remote origins. 6. Add regression tests containing HTML elements, event-handler attributes, quotes, backticks, ``, Unicode separators, and malformed JSON strings. ]]>

T08 · Insecure Dependencies

Warning
Location
SKILL.md:13
Finding

Unpinned Global Installation from a Third-Party Skill Source

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
scripts/report_html.py:56
Finding

Generated Reports Execute Unpinned JavaScript from a Remote CDN

Content
View full analysis
``` ### Technical Analysis Every generated report includes Chart.js from jsDelivr without an exact package version or Subresource Integrity hash. When the report is opened with network connectivity, the browser retrieves and executes JavaScript selected by the CDN and package resolution state at that time. The effective code executed by the report can therefore change after the Skill itself has been audited. HTTPS protects transport integrity but does not ensure that the returned library is the specific version reviewed by the project. This behavior also introduces an external network request whenever a report is opened, although the Skill description presents the analysis as requiring no API key and does not clearly disclose this runtime dependency. ### Attack Path 1. The Skill generates an HTML report containing the remote script reference. 2. A user opens the report while connected to the network. 3. The browser requests the unresolved Chart.js package URL from jsDelivr. 4. If the upstream package, package-owner account, CDN, or dependency-resolution result is compromised, modified JavaScript is returned. 5. The browser executes that JavaScript in the report's context. ### Impact Assessment A compromised remote script could: - Read and modify all data displayed in the report. - Falsify charts, scores, and suspicious-review results. - Send report data or browser metadata to external systems. - Redirect the viewer or load additional remote resources. - Execute any action available to JavaScript within the report's browser sandbox. The impact is constrained by browser security boundaries, but the confidentiality and integrity of generated reports would be compromised. ...[truncated 4 chars]
Remediation
View remediation
``` 4. Apply a Content Security Policy that permits scripts only from explicitly required sources. 5. Document the remote dependency and the network access performed when generated reports are opened. 6. Include the pinned library version and integrity hash in dependency-review and update procedures. ]]>
Vulnerability Patterns
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (5)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill advertises extensive fake-review detection capabilities that static analysis says are not actually implemented. This is dangerous because users may rely on incorrect or fabricated security-style assessments, leading to bad business decisions, false accusations, or missed coordinated review manipulation.

Content

No source excerpt is available for this finding.

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.

Rp1

Medium
Category
MCP Rug Pull
Confidence
90% confidence
Finding

Using npx skills add ... without pinning a specific version introduces supply-chain risk because users may fetch and execute whatever package version is current at install time. A compromised or maliciously updated package could run unintended code during installation or skill setup.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The manifest description limits the skill to analyzing review authenticity using review-centric signals such as timing, similarity, ratings, and verified purchase status. The output example suggests adding reviewer information to unlock 'Account Profile Analysis,' which introduces a broader reviewer-profile capability not described in the manifest.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

This code performs a filesystem write by creating or overwriting the path given in output_path. While it prints a success message afterward, there is no prior warning, confirmation, or explanatory comment/docstring about the side effect of writing to disk, which matches the missing-disclosure criterion for code files.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.