Back to skill

Security audit

Nuclei Analysis

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent Nuclei report generator with expected local file reading and report writing, but users should treat generated Markdown as untrusted scan-derived content.

Install only if you intend to process local Nuclei output files. Review the output path before running, avoid overwriting important files, and treat generated Markdown as untrusted if the scan data came from third parties or attacker-controlled targets.

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
scripts/nuclei_analyzer.py:139
Finding
Unsanitized Nuclei Fields Allow Markdown Report Content Injection<![CDATA[ ## Vulnerability Details **File Location**: `scripts/nuclei_analyzer.py`, lines 139–181 **Vulnerability Type**: Unsanitized Markdown generation **Risk Level**: Medium ### Vulnerable Code ```python lines = [] lines.append(f'# Nuclei Scan Analysis Report') lines.append(f'') lines.append(f'**Target:** {target}') lines.append(f'**Analyzed:** {timestamp}') lines.append(f'**Total findings (post-filter):** {len(findings)}') lines.append(f'') lines.append(f'## Summary by Severity') lines.append(f'') lines.append(f'| Severity | Count |') lines.append(f'|----------|-------:|') total = 0 for sev in ['critical', 'high', 'medium', 'low', 'info']: if sev in groups: count = len(groups[sev]) total += count emoji = {'critical': '🔴', 'high': '🟠', 'medium': '🟡', 'low': '🟢', 'info': '⚪'}.get(sev, '⚪') lines.append(f'| {emoji} {sev.upper()} | {count} |') lines.append(f'| **TOTAL** | **{total}** |') lines.append(f'') # High+ detailed findings for sev in ['critical', 'high']: if sev not in groups: continue lines.append(f'## {sev.upper()} Severity Findings') lines.append(f'') for f in groups[sev]: lines.append(f'### {f["name"]}') lines.append(f'') lines.append(f'- **Template:** `{f["template"]}`') lines.append(f'- **URL:** {f.get("url", "unknown")}') if f.get('description'): lines.append(f'- **Description:** {f["description"]}') if f.get('matched_at'): lines.append(f'- **Matched at:** {f["matched_at"]}') # Attack scenario lines.append(f'') lines.append(f'**Attack Scenario:**') lines.append(f'An attacker could exploit this finding to {f["description"].lower() if f.get("description") else "impact the target"}.') lines.append(f'') ...[truncated 3158 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Treat every value parsed from Nuclei output as untrusted. 2. Implement contextual Markdown escaping for headings, prose, inline-code spans, and table cells. Escape or neutralize backslashes, backticks, asterisks, underscores, brackets, angle brackets, pipes, carriage returns, and newlines as appropriate for each context. 3. Reject or normalize embedded carriage returns and newlines when fields are expected to occupy a single report line. 4. Validate report URLs with a URL parser and permit only expected schemes such as `http` and `https`. Do not render arbitrary schemes as active links. 5. Escape raw HTML or configure the Markdown renderer to disable raw HTML. 6. Configure report-viewing environments to block automatic loading of remote images and other external resources. 7. Avoid constructing attack-scenario prose directly from an untrusted description. Render the description as escaped evidence instead. 8. Add regression tests covering injected headings, fenced code blocks, inline-code termination, Markdown links, image beacons, raw HTML, pipes, and multiline values. ]]>
Vulnerability Patterns
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (5)

Lp3

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding
The skill advertises behavior that reads input files, invokes local scripts, and writes reports to disk, but it does not declare any explicit tool scope or permission boundary. In an agent ecosystem, that ambiguity can allow broader-than-expected shell or file access during invocation, increasing the risk of unintended file reads/writes or command execution beyond the user’s intent.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The activation phrases like "analyze nuclei results" or "review scan" are broad enough to overlap with common security-analysis requests, which can cause the skill to trigger in contexts the user did not specifically intend. If auto-invoked, it could read local files or generate output as a side effect when the user was only asking for general advice or interpretation.

Missing User Warnings

Low
Confidence
84% confidence
Finding
The workflow indicates that the skill reads a scan output file and generates a Markdown report, but the description does not clearly warn users about these filesystem side effects. Lack of disclosure reduces informed consent and can lead to unexpected handling of potentially sensitive scan data or unwanted report creation on disk.

Vague Triggers

Low
Confidence
80% confidence
Finding
Example prompts such as "Review scan findings and prioritize" are too generic to form a strong activation boundary, making accidental invocation more likely. While this is less severe than hidden code execution, it still increases the chance that the skill performs file-processing actions in response to ambiguous user requests.

Missing User Warnings

Low
Confidence
83% confidence
Finding
This code performs a filesystem write by creating parent directories and writing a Markdown report, but there is no confirmation prompt or explicit user-facing warning about the write side effect beyond the generic CLI option description. For a code file, file writes are in scope for missing-warning review when there is no disclosure of the operation's effect on user data or filesystem state.

Static analysis

No suspicious patterns detected.