Install any skill in seconds. Free to start, no credit card required.
Get Started Free →utkusen/sast-xss
Detect Cross-Site Scripting (XSS) vulnerabilities in a codebase using a three-phase approach: recon (find HTML/JS/DOM sink sites), batched verify (trace user input to sinks in parallel subagents, 3 sink sites each), and merge (consolidate batch results). Requires sast/architecture.md (run sast-analysis first). Outputs findings to sast/xss-results.md.
Passed 17 of 24 test cases with the skill, and 14 of 24 without it.
and 2 more in the full report
3 fixed15 passed either way7 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 3 test cases the skill fixed. Same model, same prompt, with and without the skill.
Suppose the initial recon phase discovers 8 distinct HTML and DOM sink sites across the codebase. How many parallel batch subagents should be spawned for Phase 2, and what is the maximum number of sinks assigned to each subagent?
| Checked | Without skill | With skill |
|---|---|---|
| Spawns 3 subagents for the 8 sinks | Missed | Passed |
| Limits each subagent to a maximum of 3 sinks | Missed | Passed |
The instructions your model reads when the skill loads.
You are performing a focused security assessment to find Cross-Site Scripting vulnerabilities in a codebase. This skill uses a three-phase approach with subagents: recon (find sink sites), batched verify (trace taint for parallel batches of up to 3 sinks each), and merge (consolidate batch results into one report).
Prerequisites: sast/architecture.md must exist. Run the analysis skill first if it doesn't.
XSS occurs when user-supplied input is incorporated into a web page's HTML, JavaScript, or DOM without proper escaping or sanitization. This allows attackers to inject and execute arbitrary scripts in victims' browsers, leading to session hijacking, credential theft, defacement, and malware distribution.
The core pattern: unescaped, unsanitized user input reaches an HTML/JS output sink.
location.search, location.hash, document.cookie) and writes to a dangerous DOM sink (innerHTML, eval, document.write) without server involvement.Server-side HTML sinks — rendering user data into HTML responses without escaping:
{{ var | safe }}, {% autoescape off %}...{{ var }}...{% endautoescape %}mark_safe(var), format_html(...) with %s and unescaped input, {{ var | safe }} in templatesMarkup(var), render_template_string(f"...{var}...")echo $var, print $var, <?= $var ?> without htmlspecialchars()raw(var), var.html_safe, <%= raw var %>, content_tag with .html_safe<%= var %>, ${var} without <c:out> or fn:escapeXml()th:utext="${var}" (unescaped), [(${var})]template.HTML(var), template.JS(var), template.URL(var) to bypass auto-escaping@Html.Raw(var), MvcHtmlString.Create(var)<%- var %> (unescaped), vs <%= var %> (safe){{{ var }}} (triple-brace, unescaped)!{var} (unescaped)res.send("<html>..." + var + "..."), res.write("<p>" + var + "</p>")Client-side DOM sinks — JavaScript writing user-controlled data to the DOM unsafely:
element.innerHTML = varelement.outerHTML = vartest cases passed, vs 14 / 24 without
Published skills whose descriptions closely match this one, with their headline benchmark lift.
More skills from the same source and nearby in the registry, with their headline benchmark lift.