exploiting-client-side-path-traversal

Exploit client-side path traversal in SPAs to chain CSRF, cache deception, and XSS attacks.

954|172|Updated Mar 13, 2026
One-click install
npx skills add https://github.com/xalgord/xalgorix --skill exploiting-client-side-path-traversal
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: exploiting-client-side-path-traversal
Source: https://github.com/xalgord/xalgorix/tree/main/internal/tools/skills/data/web-application-security/exploiting-client-side-path-traversal
Command: npx skills add https://github.com/xalgord/xalgorix --skill exploiting-client-side-path-traversal

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Client-Side Path Traversal (CSPT/OSRF) is frequently dismissed as a low-impact redirect issue, causing testers to miss serious chains like CSPT-to-CSRF, CDN cache deception, and open-redirect-to-XSS/SSRF. This Skill provides a structured methodology to identify, confirm, and escalate traversal primitives in single-page applications during authorized penetration tests.

Core Features & Use Cases

  • Source-to-Sink Mapping: Instrument fetch, XHR, routers, and storage in DevTools to surface where attacker-controlled input is concatenated into same-origin request paths carrying credentials.
  • Exploitation Chains: Step-by-step payloads for CSPT-to-CSRF, extension-based CDN cache deception (e.g., token exfiltration via a cached .css path), and open-redirect-to-XSS/SSRF as seen in Grafana CVE-2025-4123.
  • Encoding Variant Coverage: Dot-segment bypasses including %2e%2e/, ..;/ matrix params, and double URL-encoding (%252e%252e) to defeat naive normalization.
  • Use Case: During an authorized test of a React SPA, you find a profile slug interpolated into /api/${slug} with credentials included; this Skill walks you through traversing to /v1/token.css, getting the CDN to cache the authenticated JSON publicly, and reading it back anonymously for account takeover.

Quick Start

Use this skill to test the target SPA for client-side path traversal by mapping fetch sinks and trying dot-segment payloads against authenticated API paths.

Frequently Asked Questions about exploiting-client-side-path-traversal

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

FAQPage Schema
How do I test for client-side path traversal in a single-page application?

Map sources to sinks by wrapping fetch, XMLHttpRequest, and the framework router in DevTools to log URLs containing ../ sequences. Then inject dot-segment payloads into route params or stored slugs and confirm the dispatched request re-targets a different same-origin endpoint with credentials included.

What is the difference between CSPT and server-side path traversal?

CSPT lands the traversal on the same origin in the victim's authenticated browser context, not on the server filesystem. The impact comes from re-targeting credentialed requests to destructive endpoints, cacheable paths, or redirects rather than reading server files.

How does client-side path traversal lead to account takeover?

A traversal like ../../v1/token.css makes the authenticated fetch hit a static-looking path, so the CDN caches the JSON token under a public key. The attacker then requests that URL anonymously and recovers the token, taking over the account.

Which tools help detect CSPT vulnerabilities?

The Doyensec CSPT Burp extension clusters parameters reflected into other requests' paths, Eval Villain monitors sources and sinks in Firefox, and browser DevTools can wrap fetch/XHR to catch dispatched traversals. Burp or ZAP history helps spot double-encoded %252e%252e patterns.

Why do CSPT payloads fail against some frontends?

Naive normalization strips plain ../ sequences, so you need encoded variants like %2e%2e/, ..;/ matrix params, or double URL-encoding (%252e%252e) that the frontend decodes before dispatch. Also verify the request uses credentials: include, since uncredentialed traversals are rarely impactful.

When is client-side path traversal not exploitable?

CSPT has little impact when the dispatched request does not carry credentials or auth headers, when the path is strictly allow-listed to fixed identifiers, or when the CDN varies on auth headers and never caches authenticated responses.