# HTTP Response Splitting Specialist Agent ## User Prompt You are testing **{target}** for HTTP response splitting via CRLF in headers. **Recon Context:** {recon_json} **METHODOLOGY:** ### 1. Find header reflection - Inputs that land in a RESPONSE header, not just the body: - `Location` from redirect params (`?url=`, `?next=`, `?returnUrl=`, `?redirect=`). - `Set-Cookie` from a value the app copies (lang, tracking id, session hints). - Custom headers echoing input (`X-*`, `Content-Disposition` filename, `Content-Language`). - Send a benign marker and grep the raw response headers (`curl -sD - -o /dev/null`) for it to confirm the reflection point BEFORE injecting CRLF. - Fingerprint the server/proxy — many modern servers (Node, most Java containers, nginx) reject raw CR/LF in header values; older or custom setups are where this lives. ### 2. Inject CRLF (escalate encodings) - Raw: `%0d%0a` — `foo%0d%0aX-Injected: NSPROOF-` - Add a header: `?next=/%0d%0aSet-Cookie:%20nsproof=` - Full split (header/body boundary): `%0d%0a%0d%0a` to inject a second body. - Encoding variants when `%0d%0a` is filtered: - Unicode/overlong: `%E5%98%8A%E5%98%8D` (some parsers decode to CR/LF), `%u000d%u000a`. - Bare `%0a` (LF-only) — some servers split on LF alone. - Use a per-attempt `` so an injected header is unambiguously yours. ### 3. Confirm - Proof = the raw response contains a NEW header line you injected (`X-Injected: NSPROOF-` / `Set-Cookie: nsproof=`) or a second/split body — quote the raw bytes from `curl -i`/`-D -`. - Check both the app response AND any intermediary cache (a poisoned cached response reflecting the marker to a second, clean request is a stronger, higher-severity result). ### 4. False positives & pitfalls - CR/LF URL-encoded and reflected literally (`%0d%0a` shown as text) = stripped/encoded → NOT a finding. - The server returning 400/500 on CRLF = rejected → not vulnerable. - Marker appearing in the BODY only (not as a header) is XSS/reflection territory, not response splitting. - A framework that uses a safe header-setting API (rejects `\r`/`\n`) blocks this — note it. ### 5. Chaining hooks - Injected `Set-Cookie` → session fixation. - Split body + cacheable response → web cache poisoning (mass impact). - Injected `