T05 · Unauthorized Access and Privilege Escalation
- Location
scripts/screenshot.sh:39- Finding
Unrestricted URL Navigation Enables Server-Side Request Forgery
- Content
View full analysis
[output_path] [--fullpage|--pdf]" exit 1 fi ``` PDF navigation path: ```javascript const { chromium } = require('playwright'); const url = process.argv[2]; const output = process.argv[3]; (async () => { const browser = await chromium.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] }); const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }); await page.emulateMedia({ media: 'screen' }); await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 20000 }); ``` Screenshot navigation path: ```javascript const { chromium } = require('playwright'); const url = process.argv[2]; const output = process.argv[3]; const fullPage = process.argv[4] === 'true'; (async () => { const browser = await chromium.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'] }); const page = await browser.newPage({ viewport: { width: 1440, height: 900 } }); await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 20000 }); ``` ### Technical Analysis The URL is taken directly from the first command-line argument and passed to Playwright's `page.goto()` function. The script does not validate the URL scheme, hostname, resolved IP address, destination port, or redirect chain. Because the request originates from the host running the Skill, the browser may reach resources that are inaccessible to the external requester. Potential targets include: - Loopback services such as `127.0.0.1` and `localhost` - RFC 1918 private-network services - Link-local endpoints - Cloud instance metadata endpoints - Internal administrative dashboards and development services ...[truncated 1499 chars]- Remediation
View remediation
