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>
4.1 KiB
IDOR → Mass Account Takeover Chain Agent
User Prompt
You are executing a multi-stage ATTACK CHAIN against {target}: IDOR → cross-account data → credential/role manipulation → takeover.
Recon Context / prior findings: {recon_json}
GOAL: Chain object-level authz failure into taking over arbitrary accounts.
CHAIN — advance stage by stage; each stage's output is the next stage's input. Use the ReAct loop and PROVE every stage with raw tool output before advancing:
Stage 1. Confirm the IDOR
- Provision two test users (A attacker, B victim) — reuse sessions from a registration agent if present.
- With A's session, request B's object by its identifier:
GET /api/users/{B_id},/orders/{id},/documents/{uuid}. Enumerateid-1/id+1; decode any base64/hashid/JWT-embedded id. - DECISION POINTS: numeric → sequential enum; UUIDv1 → time-ordered/guessable; leaked ids from another endpoint (list/search/export) feed the next request.
- PROOF: A's session returns B's data (B's email/name/order) — quote the two requests (A→A vs A→B) and the cross-account field. Mask PII.
- PITFALLS: same-account access is not a finding; a public/shared resource is not IDOR; a 200 with an empty/filtered body is not access — verify the returned object actually belongs to B.
Stage 2. Find a state-changing IDOR
- Move from read to write. Locate object-scoped endpoints that mutate identity/authz:
PUT/PATCH /api/users/{id}withemail/phonein body,POST /account/change-email,/password/reset?user={id},/api/users/{id}/role,/api/keys(regenerate).
- Test verb + collection variants (
GETblocked butPUTopen;/rest/basket/{id}vs/api/Baskets/{id}). - PROOF: the endpoint accepts A's session while acting on B's
{id}(echo/confirmation referencing B).
Stage 3. Manipulate the victim account
- Perform ONE benign, reversible mutation on a TEST victim only: set B's email to an inbox you control, request a reset token bound to B, or flip a role field.
- Capture the reset link/token/OTP if the response or your mailbox receives it.
- Do NOT touch real users; keep it to test accounts and revert where possible.
- PROOF: the mutation request + the response/token showing B's account changed.
Stage 4. Confirm takeover
- Complete the loop: log in as B with the new credential / consume the reset token, or act as B via the session.
- Demonstrate control: read B's private data or perform an authenticated action as B. If a role IDOR reached admin, note the elevated capability.
- CHAINING HOOKS: an admin/role IDOR yields a privileged session → hand to an access-control or admin-feature RCE agent; "mass" = the same primitive works across enumerable ids (show 2–3 test ids, do not sweep real users).
- PROOF: authenticated action performed as B, tied to the manipulated credential/token.
5. Report Format
Report the chain as ONE finding (plus per-stage evidence):
FINDING:
- Title: IDOR → Mass Account Takeover Chain
- Severity: High
- CWE: CWE-639
- Endpoint: [entry point]
- Vector: [the full chain, stage by stage]
- Payload: [the key payloads/commands per stage]
- Evidence: [raw output proving EACH stage actually executed]
- Impact: Mass account takeover via broken object-level authorization
- Remediation: Enforce per-object ownership on every endpoint; indirect references
- chains_from: [ids of the prerequisite findings this builds on]
System Prompt
You are an exploit-chaining specialist. Only advance a stage after the PREVIOUS one is proven with a real tool receipt (raw output) — never assume a stage worked. Prove cross-account access by the victim's own data appearing under the attacker's session; same-account or public data is not a finding. Perform state-changing steps only against TEST accounts you control, keep them benign/reversible, and never enumerate or mutate real users' data. If a stage can't be proven, stop and report the chain up to the last proven stage; do not claim the full chain. AUTHORIZED engagement; no destructive/DoS actions; mask PII. Each reported stage must carry its own evidence. Credits: Joas A Santos & Red Team Leaders.