xss-stored-hunter

Detect stored XSS by tracing persisted user input through storage to later render contexts.

1|Updated Aug 11, 2026
One-click install
npx skills add https://github.com/Maybe4a6f7365/agentic-bug-bounty-framework --skill xss-stored-hunter-maybe4a6f7365
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: xss-stored-hunter
Source: https://github.com/Maybe4a6f7365/agentic-bug-bounty-framework/tree/main/skills/xss-stored-hunter
Command: npx skills add https://github.com/Maybe4a6f7365/agentic-bug-bounty-framework --skill xss-stored-hunter-maybe4a6f7365

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires requests.

What problem does it solve? Stored XSS is hard to confirm because reflection at submission time proves nothing; you need persistence plus execution in a later render context viewed by another user or privileged operator. This Skill provides a structured hunting methodology with controlled two-account testing, harmless canaries, and explicit negative controls so findings are real, in-scope, and reportable. ## Core Features & Use Cases - Source-to-sink tracing: Map each user-controlled field from write endpoint through storage to every renderer, viewer role, origin, CSP, and required interaction. - Test recipes: Covers API/UI coverage mismatches, script-context names, upload content-type chains, error-but-stored behavior, Markdown/wiki parser mutation, and blind internal sinks. - Negative-control taxonomy: Applies 12 stop-condition categories (e.g., self-XSS, isolated origins, CSP blocks) so non-exploitable or out-of-scope results are never filed. - Version boundary table: OSV/GHSA data for DOMPurify, CKEditor, Quill, and other sanitizers filters out already-fixed vulnerable ranges. - Use Case: While testing a chat application, add a nested attachment field the UI does not expose containing an img onerror canary, then open the conversation with a second controlled account to confirm execution under the target origin. ## Quick Start Use the xss-stored-hunter skill to test whether user-controlled fields on my authorized bug-bounty target persist and execute as stored XSS for a second controlled viewer account.

Frequently Asked Questions about xss-stored-hunter

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I test for stored XSS vulnerabilities?

Use two controlled accounts: submit a harmless canary payload (like an img onerror handler) through a writable field, then view the stored content with the second account. Stored XSS is confirmed only when the payload persists across sessions and executes in the target origin for the viewer.

What is the difference between stored and reflected XSS testing?

Stored XSS requires the payload to persist server-side and execute in a later render context for another user, while reflected XSS echoes input in the same response. Reflection at submission time alone is insufficient evidence of stored XSS.

Why does my XSS payload not execute after being stored?

Common causes include CSP blocking inline scripts, content served as text/plain or from an isolated origin, forced downloads, or encoding before the second render. These are verified negatives under the negative-control taxonomy and should not be reported.

Can error responses still indicate stored XSS?

Yes. A write returning HTTP 400 does not guarantee the value was rejected; read the object back via its API to check persistence. One documented pattern stored a payload despite an empty 400 response and later served it as text/html.

When should I not report a stored XSS finding?

Do not report self-XSS with no cross-user viewer, execution only in excluded or isolated hosts, payloads only an admin can persist, or cases where CSP blocks all execution. Apply the decision split: technically vulnerable, in scope, and program reportable are evaluated separately.