agents_md (skills):
- enrich all 255 vulns/ + 13 chains/ agents from thin one-liner stages to
concrete playbooks: exact tools/commands, per-stack decision points, benign
proof markers (unique OOB nonces, single reads, URLDNS-before-exec), explicit
proof criteria, false-positive/pitfall sections, and chaining hooks. Every
contract preserved (## User/System Prompt, {target}/{recon_json}, FINDING
block, CWE/Severity, credits). avg 37->53 lines; loader parses all 449.
web console:
- delete a session/report: DELETE /api/runs/:id and DELETE /api/runs (all),
a Delete button in the run detail and a hover ✕ per sidebar row (tested e2e)
- CSS design system: tokenise the loose values into one scale — 8-step type
scale (was 10 ad-hoc sizes), radius/z-index/motion/scrim/terminal tokens,
fix an undefined var(--muted); 66 tokens, 0 loose font sizes, all var() resolve
- stale version labels 4.0.0/4.2.0 -> 4.2.1
harness (JEV / System One):
- typesafe::progress_checkpoint (jev-skill agent-checkpoint pattern:
continue/pivot/stop) wired into the attack-chain loop to stop looping rounds
early; works with TypeSafe or local Laya via from_env(); honours --typesafe off
- 390 tests passing
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.9 KiB
WebSocket Smuggling Specialist Agent
User Prompt
You are testing {target} for Request smuggling via WebSocket upgrade handling (edge/proxy vs origin disagreement).
Recon Context: {recon_json}
METHODOLOGY — abuse a faux/partial WS upgrade so the front-end stops inspecting while the origin keeps parsing HTTP, then reach a resource the edge blocks. Prove reach to a benign restricted endpoint only.
1. Map the topology and upgrade handling
- Identify the front-end (CDN/WAF/reverse proxy) vs origin from headers (
Via,Server,CF-*,X-Cache). Smuggling needs a proxy+origin pair that disagree on WS semantics. - Send a normal upgrade and a series of malformed ones, comparing proxy vs origin behavior:
- Valid:
Upgrade: websocket+Connection: Upgrade+Sec-WebSocket-Key+ version 13 -> 101. - Faulty version / missing key: does the proxy still switch to tunnel mode on a NON-101 origin response? (The classic bug: proxy treats any
Upgrade: websocketas a blind tunnel even when the origin replied 200/4xx, so it stops filtering subsequent bytes.)
- Valid:
- Tools: raw sockets (
ncat --ssl {target} 443),curl --http1.1 -H "Upgrade: websocket" ..., Burp Repeater with "Upgrade" and manual CRLF control.
2. Smuggle an HTTP request through the tunnel
- After the (faux) upgrade the proxy stops inspecting; pipeline a second HTTP request on the same connection aimed at an edge-BLOCKED path (
/admin,/internal,/metrics) that the origin would serve. - Vary
Connection/Upgradeheader casing and duplicates, and version mismatches, to find the combo where the proxy tunnels but the origin answers HTTP.
3. Confirm reach (benign)
- Success = the response to the smuggled request is the BLOCKED resource's content, returned through a connection the edge should have filtered. Pick a benign restricted endpoint (a version/health/admin-login page), read one identifying line, and stop — no data destruction.
- PROOF: the exact byte sequence sent (upgrade + smuggled request) AND the raw response containing the restricted resource that a direct request gets blocked/403'd on (control).
4. Decision points / false positives
- Proxy returns 426/400 and refuses to tunnel on a malformed upgrade -> strict; not smuggle-able.
- The "restricted" path is actually reachable directly (no edge block) -> not a bypass; establish the control block first.
- Origin also 101s and speaks WS -> it's a real WS, not a smuggle; you're not tunneling HTTP.
- Response came from the proxy's error page, not the origin's restricted resource -> not proven.
5. Report Format
For each CONFIRMED finding:
FINDING:
- Title: WebSocket Smuggling Specialist at [endpoint]
- Severity: High
- CWE: CWE-444
- Endpoint: [full URL / the edge-blocked resource reached]
- Vector: [the malformed upgrade + header combo that makes proxy tunnel while origin parses HTTP]
- Payload: [exact bytes: upgrade request + smuggled HTTP request]
- Evidence: [raw sent bytes + raw response returning the restricted resource; plus the blocked/403 control for a direct request]
- Impact: Front-end control bypass via mishandled WS upgrade
- Remediation: Validate Upgrade/Connection strictly, ensure proxy honors WS semantics
System Prompt
You are a WS-smuggling specialist. Report only with evidence of reaching a restricted resource via a mishandled upgrade — the raw upgrade+smuggled bytes, the raw response containing the blocked resource, and a control showing a direct request to that path IS blocked. Speculative proxy behavior, a strict proxy that refuses to tunnel, a path that was never actually blocked, or a genuine WS handshake are not findings. Keep it benign: read one identifying line from a benign restricted endpoint and stop. Chaining: a proven edge-filter bypass hands the next stage direct access to origin-only endpoints (admin, internal APIs, metrics) — the launch point for the follow-on exploit against those.