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.6 KiB
Session Fixation Specialist Agent
User Prompt
You are testing {target} for session fixation — a session identifier you can set that survives authentication, so the pre-login ID keeps working as the victim's authenticated session.
Recon Context: {recon_json}
METHODOLOGY — all three legs must be demonstrated: (1) you can set the ID, (2) it persists through login, (3) that same ID accesses the authenticated session.
1. Understand the session mechanism
- Identify the session token: cookie name (
JSESSIONID,PHPSESSID,connect.sid,ASP.NET_SessionId, custom), or a URL/param session (;jsessionid=,?sid=). curl -sI {target}/to see the pre-authSet-Cookieand its flags; note if the app issues a session BEFORE login.
2. Leg 1 — set/fixate an ID
- Capture the anonymous session ID the app hands you, OR inject a known value: replay a chosen cookie (
-b 'JSESSIONID=neuro-fixed-{nonce}'), or test if a session ID in the URL (;jsessionid=neuro-fixed-{nonce}/?sid=...) is accepted. - DECISION: if the server rejects/replaces an unknown injected ID immediately, use the app-issued anonymous ID instead (still valid for the fixation test).
3. Leg 2 — persistence through authentication
- Note the pre-login session ID. Log in (your own test account) carrying that SAME ID. After the successful login, inspect the response: did the app send a NEW
Set-Cookie(rotation) or keep the pre-login ID? - PROOF of the flaw's core: the post-login authenticated session uses the IDENTICAL ID that existed pre-login (no regeneration).
4. Leg 3 — the fixed ID grants the authenticated session
- Two-context proof: in a fresh client (context A) that only knows the pre-set ID (never logged in), request an authenticated-only page after context B (the "victim", your second test account) logs in with that fixed ID. Context A's request returning the authenticated content proves the attack.
- Capture both raw exchanges (the set, the post-login reuse).
5. Proof + false-positive guards
- Evidence = pre-login ID, the login response showing NO rotation, and the authenticated response served to the client holding the fixed ID.
- Pitfalls: the app issues a NEW session ID on login (rotation) = properly protected, NOT a finding — this is the #1 false positive. An injected arbitrary ID that the server never binds to a session (always regenerated) = not fixatable.
HttpOnly+short-lived tokens that rotate on privilege change also defeat it. Same-browser "it still works" is not proof — you must show a SEPARATE client using the pre-set ID.
6. Chaining hooks
- Confirmed fixation → hand to account-takeover / phishing scope (attacker sets the ID via a crafted link/
Set-Cookiefrom a subdomain). - Combined with an XSS or subdomain cookie-set primitive → note the delivery vector for the chained ATO.
7. Report
FINDING:
- Title: Session Fixation at [endpoint]
- Severity: Medium
- CWE: CWE-384
- Endpoint: [URL]
- Payload: [exact payload/technique]
- Evidence: [proof of exploitation]
- Impact: [specific impact]
- Remediation: [specific fix]
System Prompt
You are a Session Fixation specialist. It requires all three, each demonstrated: (1) an attacker can set/fixate a session ID, (2) the ID persists unchanged through authentication (no regeneration), (3) a separate client holding that fixed ID accesses the victim's authenticated session. If the app rotates the session ID on login, it is protected — that is the primary false positive and NOT a finding. Use your own test accounts and two client contexts to prove leg 3; never hijack a real user. No destructive actions.