← All skills
cspt-xss
92 / 100 · Low risk
Fine to try. Some of what it can do is expected: a security skill usually runs scanners and checks websites.
By dreadnode/capabilities (GitHub) · security · 22 stars · scanned at commit 3ceeb34
Client-Side Path Traversal — exploit CSR/SSR apps where URL parameters control fetch/XHR paths to inject cross-origin responses, achieve XSS, CSRF, or SSRF. Covers all 8 major frameworks with source-code-level decoding pipeline analysis, query param universality, secondary context (server-side) traversal, and per-framework XSS sinks. Use when any SPA/hybrid app fetches API data using URL-derived path segments.
Works with any agent that supports SKILL.md skills.
What this skill can do
Sends data to these websites: internal-service.local
This is disclosed by the author in the skill's SKILL.md or README. Expected for a security skill.
Found in 23 places.
Show 17 more
- capabilities/web-security/skills/cspt-xss/SKILL.md, line 214
const doc = await fetch(`http://internal-service.local/data/${dataId}`); - capabilities/web-security/skills/cspt-xss/SKILL.md, line 252
When `this.store.findRecord('user', params.user_id)` is called, the decoded param flows through the adapter URL builder. Developer never calls `fetch()` directl - capabilities/web-security/skills/cspt-xss/SKILL.md, line 266
const res = await fetch(`http://internal-service.local/data/${dataId}`); - capabilities/web-security/skills/cspt-xss/SKILL.md, line 285
The WHATWG URL spec (used by `fetch()`, `new URL()`, and browser navigation) strips three characters during URL parsing: - capabilities/web-security/skills/cspt-xss/SKILL.md, line 303
Step 3: App constructs fetch URL: fetch("/api/" + param) - capabilities/web-security/skills/cspt-xss/SKILL.md, line 304
Input to fetch(): "/api/..\t/admin" - capabilities/web-security/skills/cspt-xss/SKILL.md, line 345
fetch(`/api/page/${pageId}`) // pageId from useParams() - capabilities/web-security/skills/cspt-xss/SKILL.md, line 346
fetch(`/api/content?slug=${params.slug}`) // slug from route params - capabilities/web-security/skills/cspt-xss/SKILL.md, line 347
axios.get(`/api/v1/${resource}/${id}`) // resource + id from URL - capabilities/web-security/skills/cspt-xss/SKILL.md, line 355
rg 'axios\.(get|post|put)\s*\(`[^`]*\$\{' --type js - capabilities/web-security/skills/cspt-xss/SKILL.md, line 379
7. Assess impact: DOM insertion (XSS), state-change (CSRF), or server fetch (SSRF) - capabilities/web-security/skills/cspt-xss/SKILL.md, line 431
Hybrid frameworks create a second, higher-impact attack surface when server components pass decoded params into internal `fetch()` calls. The server often has a - capabilities/web-security/skills/cspt-xss/SKILL.md, line 435
| Next.js | Route handler `await params` -> `fetch()` | YES (auto-decoded, no opt-in) | Depends on middleware config | SSRF to internal services | - capabilities/web-security/skills/cspt-xss/SKILL.md, line 436
| Nuxt | `getRouterParam(event, 'id', { decode: true })` -> `$fetch()` | YES (opt-in) | Depends | SSRF to internal services | - capabilities/web-security/skills/cspt-xss/SKILL.md, line 437
| SvelteKit | `+page.server.ts` / `+server.ts` params -> `fetch()` | YES (`decode_params()`) | **YES** -- bypasses `hooks.server.ts` | SSRF, auth bypass | - capabilities/web-security/skills/cspt-xss/SKILL.md, line 438
| SolidStart | `query("use server")` args -> `fetch()` | Passthrough (exact client string) | Depends | SSRF if input already decoded | - capabilities/web-security/skills/cspt-xss/SKILL.md, line 492
nuxtApp.payload.data[key] ||= $fetch(`/__nuxt_island/${key}.json`, { responseType: "json" });
and 3 more places
Runs commands on your computer
The author does not mention this. Expected for a security skill.
Found in 2 places.
Install
Paste this into your terminal. It downloads exactly the version we scanned, not whatever is newest.
if [ -e ~/.agents/skills/'cspt-xss' ] || [ -L ~/.agents/skills/'cspt-xss' ]; then echo 'A skill folder named cspt-xss already exists — not replacing it' >&2; false; else d=$(mktemp -d) && git clone --quiet --filter=blob:none --no-checkout 'https://github.com/dreadnode/capabilities' "$d" && git -C "$d" checkout --quiet '3ceeb34c0c33dc36738cf0d4ec86e38b53d98216' -- 'capabilities/web-security/skills/cspt-xss' && mkdir -p ~/.agents/skills && cp -R "$d"/'capabilities/web-security/skills/cspt-xss' ~/.agents/skills/'cspt-xss' && rm -rf "$d"; fi
Codex reads ~/.agents/skills directly. For Claude Code, Cursor, Copilot, Gemini CLI, Antigravity or OpenCode, also link it. For Claude Code: ln -s ~/.agents/skills/'cspt-xss' ~/.claude/skills/'cspt-xss' (other agents: ~/.cursor/skills, ~/.copilot/skills, ~/.gemini/skills, ~/.gemini/config/skills, ~/.config/opencode/skills). Or install through the finder skill, which does both.
Badge for your README
The badge for dreadnode/capabilities shows the score of its lowest-scoring skill.

[](https://zalavijaysinh.github.io/skilltrust/repos/dreadnode/capabilities/)
Score history
| Date | Version | Score |
|---|
| 2026-11-11 | 3ceeb34 | 92 |