Back to skill

Security audit

IQ Skill

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its puzzle-generation purpose, but its interactive HTML template can run unsanitized quiz or answer content as browser code.

Review before installing if you plan to create or host interactive HTML tests. Use only trusted question content, avoid embedding user-provided HTML, and do not host generated tests under an authenticated or sensitive web origin unless the template is fixed to render all quiz and answer text safely.

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

Error
Location
assets/iq_test_template.html:385
Finding

DOM-Based Cross-Site Scripting Through Unsanitized Quiz Content

Content
View full analysis
Question ${index + 1} ${q.category}
${q.question}
`; if (q.type === 'multiple_choice' && q.options) { html += '
'; q.options.forEach((opt, i) => { const letter = String.fromCharCode(65 + i); const selected = userAnswers[index] === opt ? 'selected' : ''; html += `
${letter} ${opt}
`; }); html += '
'; } else { const value = userAnswers[index] || ''; html += ``; } html += `
Explanation: ${q.explanation}
`; container.innerHTML = html; } ``` The results view contains the same underlying issue: ```javascript breakdownHtml += `
${cat}
${data.correct}/${data.total} (${catPct}%)
Remediation
View remediation
`, `&`, and ``. 7. Add a restrictive Content Security Policy where the generated test is hosted. Avoid `unsafe-inline` by removing inline handlers. A suitable baseline should restrict scripts to trusted same-origin resources and block object embedding. 8. Add automated tests using payloads in every rendered field, including question text, categories, options, explanations, correct answers, and typed answers. Verify that payloads appear only as literal text and never create executable DOM elements. ]]>
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • 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
Findings (8)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
2. Use the template in `assets/iq_test_template.html` as the foundation.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
2. Use the template in `assets/iq_test_template.html` as the foundation.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding

The skill instructs the agent to save a generated HTML file and references file-producing assets/scripts, which implies file-write behavior, but it does not declare any tool scope such as permissions or allowed-tools. This creates a capability/authorization mismatch: an agent or reviewer cannot reliably tell that disk writes are intended, increasing the risk of unauthorized file creation or unsafe output handling.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The verbal reasoning section hardcodes English vocabulary and grammar questions such as synonyms and grammatical correctness, which makes the skill inherently English-specific. Because the file does not offer a language choice or document that the skill is intentionally limited to English, it can violate language/locale policy requirements.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill tells the agent to save the final HTML file and provide it to the user, but it does not disclose or warn that it will write user-facing output to disk. While the content is not inherently dangerous in this skill context, undisclosed file creation can surprise users, clutter workspaces, or enable unsafe handling of generated HTML if later opened or shared without review.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The HTML root sets lang="en", which hard-codes English as the document language. Under the policy rules, a forced language/locale without user opt-in or a documented region-specific justification is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The script accepts a user-controlled --output path and writes generated content directly to that location. While the written data is only puzzle text, this still enables arbitrary file write behavior beyond the core puzzle-generation role and could overwrite local files if the skill is executed with access to sensitive paths.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The manifest describes an IQ/puzzle generation skill for creating challenges, but this script also persists generated content to a user-specified filesystem path via the --output option. File writing is not mentioned in the manifest and goes beyond pure challenge generation, even though the written content is related to the stated purpose.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.