T05 · Unauthorized Access and Privilege Escalation
- Location
prompts/diff-review.md:25- Finding
Unrestricted Collection of Agent Memory and Conversation History
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a real visual HTML generator, but it should be reviewed carefully because it can read broad project context, write persistent reports, open browser-rendered HTML, use external services/scripts, and manage local servers/processes without tight safeguards.
Install only if you are comfortable with persistent local HTML reports, browser execution of generated pages, and broad project analysis. Avoid using it on private or sensitive repositories unless external generation is disabled, CDN scripts are removed or vendored, generated reports are reviewed before sharing, and server/cleanup scripts are not used on machines with important services on ports 8080-8089.
prompts/diff-review.md:25Unrestricted Collection of Agent Memory and Conversation History
SKILL.md:91Project Context May Be Disclosed to an External Gemini Service
templates/mermaid-flowchart.html:342Generated Reports Execute Mutable JavaScript from External CDNs
commands/_visual-explainer-serve.md:36Unpinned Package Download and Execution Through npx
scripts/clean-server.sh:10Cleanup Scripts Can Terminate Unrelated Processes by Port Number
scripts/serve-report.sh:17Report Servers Listen on All Network Interfaces by Default
The declared description says this skill creates styled HTML pages for visual explanations of technical content. The actual code does not generate HTML or any visual output. Instead, it performs system cleanup actions: removing a saved port file and killing processes bound to ports 8080 through 8089. These are materially different capabilities and involve local file/process manipulation that is undeclared in the description. This is a clear description-behavior mismatch.
The declared description says the skill generates self-contained HTML pages for visual explanations. The provided code does not generate HTML or explain technical concepts; instead, it operationally serves existing files via a Python HTTP server. While hosting generated HTML could be a supporting function in a broader visual-explainer tool, this specific code chunk's primary behavior is server orchestration and port selection, which is materially different from the declared end-user purpose. It also performs undeclared capabilities such as network service exposure, filesystem writes, process management, and port inspection. Therefore this code chunk does not accurately match the declared description.
The declared purpose is content generation: producing styled HTML pages that visually explain technical information. The actual code chunk does not generate or render any HTML at all. Instead, it performs operational hosting tasks: finding an open port, persisting that port number, starting a Python web server, and advertising local/network URLs. Serving previously generated reports could be a supporting deployment detail, but as a standalone code chunk its primary behavior is network service orchestration, which is materially different from the declared purpose and includes undeclared capabilities such as port scanning and server startup.
The declared description says this skill generates styled HTML visual explanations for technical content. The actual code does not generate HTML, render diagrams, explain systems, or format data visually. Instead, it performs operational server-management actions: locating local processes, terminating them, and removing a tracking file. This is a materially different primary purpose and includes undeclared capabilities that affect local system processes and files. Therefore, the description does not accurately represent the code's behavior.
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
rm /tmp/ve-img.png
See `./references/css-patterns.md` for image container styles (hero banners, inline illustrations, captions).
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).
To completely remove saved port and PID:
rm visual-explainer/scripts/server-port.txt
The prompt materially exceeds the stated purpose of the visual-explainer skill. Instead of generating visual HTML explanations, it instructs the agent to inspect arbitrary files, query git history, validate claims against the codebase, and rewrite documents in place, which creates a capability mismatch that can be used to smuggle broad repo-analysis and editing powers through an unrelated skill.
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
<svg class="connectors" style="position:absolute;inset:0;width:100%;height:100%;pointer-events:none;">
<path d="M 150,100 C 150,200 350,100 350,200" fill="none" stroke="var(--accent)" stroke-width="1.5" stroke-dasharray="4 3"/>
<!-- Arrowhead -->
<polygon points="348,195 352,205 356,195" fill="var(--accent)"/>
</svg>
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
</ul>
</div>
<div class="slide__aside reveal">
<!-- optional: illustration, icon, mini-diagram, accent SVG -->
</div>
</div>
</section>
The explicit cleanup command rm /tmp/ve-slide-title.png normalizes shell-based file deletion as part of the skill workflow. Even though the example path is fixed, embedding destructive shell operations in a content-generation skill conditions the agent toward unnecessary filesystem modification and becomes more dangerous if later generalized with variable paths or prompt-derived filenames.
rm /tmp/ve-slide-title.png
**Prompt craft for slides:** Be specific about style, dominant colors, and mood. Pull colors from the preset's CSS variables. Examples:
The script deletes a local state file and kills processes, but the skill metadata describes only generation of self-contained visual HTML explanations. This undeclared operational behavior broadens the skill's capabilities beyond user expectations and creates risk of unauthorized local interference, especially because the actions are destructive and not obviously tied to rendering HTML.
The script enumerates fixed local ports and forcefully kills any process bound to them, regardless of ownership or whether the process belongs to this skill. In a visual HTML explainer skill, that capability is unrelated to the declared purpose and can disrupt other developer workflows or local services, making the mismatch especially suspicious and dangerous.
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Service Dependency Mapping — Reference Template</title>
<!--
Reference template for the visual-explainer skill: service dependency mapping.
Terracotta/salmon palette — distinctly different from teal (mermaid)
and rose (data-table) templates so agents absorb variety.
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
</div>
</div>
<!-- Mermaid Network Graph -->
<div class="diagram-section animate" style="--i:4">
<div class="diagram-label">Dependency Network</div>
<div class="mermaid-wrap">
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Architecture Diagram — Reference Template</title>
<!--
Reference template for the visual-explainer skill: CSS Grid architecture layout.
Warm terracotta/sage palette — distinctly different from the teal (mermaid)
and rose (data-table) templates so agents absorb variety, not a single palette.
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CI/CD Pipeline — Reference Template</title>
<!--
Reference template for the visual-explainer skill: Mermaid diagrams.
Teal/cyan palette — distinctly different from terracotta (architecture)
and rose (data-table) templates so agents absorb variety.
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>API Gateway Redesign — Reference Slide Deck</title>
<!--
Reference template for the visual-explainer skill: slide decks.
Midnight Editorial preset — deep navy, serif display, warm gold accents.
Distinctly different from the terracotta (architecture), teal (mermaid),
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
</div>
</section>
<!-- SLIDE 7: DASHBOARD -->
<section class="slide slide--dashboard" style="background-image:radial-gradient(ellipse at 70% 30%, var(--accent-dim) 0%, transparent 40%);">
<h2 class="slide__heading reveal">Performance Impact</h2>
<div class="slide__kpis">
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
<cite class="reveal">— Edge Computing Principle</cite>
</section>
<!-- SLIDE 11: FULL-BLEED -->
<section class="slide slide--bleed">
<div class="slide__bg slide__bg--gradient"></div>
<div class="slide__scrim"></div>
The page imports Mermaid as a live ES module from jsDelivr at runtime, so simply viewing the deck executes third-party code from the network. This breaks the self-contained guarantee and introduces both privacy exposure and a direct supply-chain risk because compromised or changed CDN content would run in the viewer's browser.
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
A <code>visual-explainer</code> agent skill that transforms complex terminal output into styled HTML pages. <strong>Replaces ASCII art</strong> and box-drawing tables with professional diagrams, interactive Mermaid charts, and readable typography.
</p>
<!-- Overview Diagram -->
<div class="mermaid-wrap animate" style="--i:3">
<div class="zoom-controls">
<button onclick="zoomDiagram(this, 1.2)" title="Zoom in">+</button>
The README explicitly says the skill generates a self-contained HTML page and opens it in the browser, but it does not warn users that local file creation and browser execution-like rendering will occur. Even if intended for visualization, opening generated HTML can expose users to script execution, external resource loading, or deceptive rendered content if the generated page includes unsafe dynamic content.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
Claude Code:
git clone https://github.com/nicobailon/visual-explainer.git ~/.claude/skills/visual-explainer
mkdir -p ~/.claude/commands
cp ~/.claude/skills/visual-explainer/prompts/*.md ~/.claude/commands/
The README states the skill activates automatically when an agent is about to emit a complex table, which is a broad trigger that can fire during routine work without an explicit user request. In the context of a skill that writes HTML files and opens them in a browser, this increases the chance of unprompted file creation and browser launching, expanding the action surface beyond clearly user-initiated operations.