⚡ Shadow Academy
🔑 Chapter 18

āĻāχ āĻ…āĻ§ā§āϝāĻžāϝāĻŧ⧇ āϕ⧀ āĻļāĻŋāĻ–āĻŦ⧇

⏱ āφāύ⧁āĻŽāĻžāύāĻŋāĻ• āϏāĻŽāϝāĻŧ: ā§§ā§Ģâ€“ā§¨ā§Ļ āĻŽāĻŋāύāĻŋāϟ ¡ āĻĒā§‚āĻ°ā§āĻŦāĻļāĻ°ā§āϤ: āφāϗ⧇āϰ āĻ…āĻ§ā§āϝāĻžāϝāĻŧ⧇āϰ āϧāĻžāϰāĻŖāĻž

ā§Ļ / ā§§ā§Ļā§Ļ āĻ…āĻ§ā§āϝāĻžā§ŸāϚāĻžāϞāĻŋāϝāĻŧ⧇ āϝāĻžāĻ“: āĻ…āĻ§ā§āϝāĻžāϝāĻŧ 19

āĻ…āĻ—ā§āϰāĻ—āϤāĻŋ āĻāχ browser-āĻ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻšāĻŦ⧇āĨ¤

🔑
OAuth 2.0 āĻ“ SSO — Token Theft Attack āĻ•āϰ⧋
"Sign in with Google" āĻāϰ āĻ†ā§œāĻžāϞ⧇ āϞ⧁āĻ•āĻžāύ⧋ āϰāĻŋāĻĄāĻžāχāϰ⧇āĻ•ā§āϟ āĻĢāĻžāρāĻĻ āĻ“ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻŸā§‡āĻ•āĻ“āĻ­āĻžāϰ
🧭 āĻĻāĻ•ā§āώāϤāĻž āϝāĻžāϚāĻžāχ āĻ“ āĻĒā§āϰāϤāĻŋāϰāĻ•ā§āώāĻžāĻŽā§‚āϞāĻ• takeaway
Skill checkpoint: OAuth authorization flow-āĻ redirect, scope āĻ“ token āϕ⧋āĻĨāĻžā§Ÿ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšā§Ÿ āĻŦā§‹āĻā§‹āĨ¤
Defense checkpoint: PKCE, state/nonce, exact redirect allowlist āĻ“ āύāĻŋāϰāĻžāĻĒāĻĻ token storage āĻĒā§āĻ°ā§Ÿā§‹āĻ— āĻ•āϰ⧋.
Lab scope: āĻļ⧁āϧ⧁ āύāĻŋāĻœā§‡āϰ lab, synthetic data āĻŦāĻž āϞāĻŋāĻ–āĻŋāϤ āĻ…āύ⧁āĻŽāϤāĻŋāĻĒā§āϰāĻžāĻĒā§āϤ target-āĻ āĻ…āύ⧁āĻļā§€āϞāύ āĻ•āϰ⧋āĨ¤ Real credential, token āĻŦāĻž customer data āĻŦā§āϝāĻŦāĻšāĻžāϰ āϕ⧋āϰ⧋ āύāĻžāĨ¤
Portfolio proof: finding, impact, fix āĻ“ retest āύāĻŋā§Ÿā§‡ ā§Ģ-āϞāĻžāχāύ⧇āϰ redacted note āϰāĻžāĻ–ā§‹āĨ¤
đŸšĒ āĻ—āĻ˛ā§āĻĒ ā§§: āĻšā§‹āĻŸā§‡āϞ⧇āϰ āĻ­ā§āϝāĻžāϞ⧇ āĻ•āĻŋ (Valet Key) — OAuth āϕ⧀?
āϤ⧁āĻŽāĻŋ āϝāĻ–āύ āϕ⧋āύ⧋ āĻĻāĻžāĻŽāĻŋ āĻšā§‹āĻŸā§‡āϞ⧇ āĻ—āĻžā§œāĻŋ āĻĒāĻžāĻ°ā§āĻ• āĻ•āϰāϤ⧇ āĻĻāĻžāĻ“, āϤ⧁āĻŽāĻŋ āĻ•āĻŋ āĻĄā§āϰāĻžāχāĻ­āĻžāϰāϕ⧇ āϤ⧋āĻŽāĻžāϰ āϘāϰ⧇āϰ āϚāĻžāĻŦāĻŋ, āφāϞāĻŽāĻžāϰāĻŋāϰ āϚāĻžāĻŦāĻŋ āϏāĻŦ āĻĻāĻŋā§Ÿā§‡ āĻĻāĻžāĻ“? āĻ•āĻ–āύ⧋āχ āύāĻž! āϤ⧁āĻŽāĻŋ āϤāĻžāϕ⧇ āĻļ⧁āϧ⧁ āĻ—āĻžā§œāĻŋāϰ āϚāĻžāĻŦāĻŋ āĻĻāĻžāĻ“, āϝāĻžāϤ⧇ āϏ⧇ āĻ—āĻžā§œāĻŋāϟāĻž āĻĒāĻžāĻ°ā§āĻ• āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ…āĻ¨ā§āϝ āĻ•āĻŋāϛ⧁ āϖ⧁āϞāϤ⧇ āύāĻž āĻĒāĻžāϰ⧇āĨ¤

āĻ“ā§Ÿā§‡āĻŦāϏāĻžāχāĻŸā§‡āϰ āϜāĻ—āϤ⧇ āĻāϕ⧇āχ āĻŦāϞ⧇ OAuth 2.0! āϝāĻ–āύ āϤ⧁āĻŽāĻŋ āϕ⧋āύ⧋ āϏāĻžāχāĻŸā§‡ "Sign in with Google" āĻ•āϰ⧋, āϤ⧁āĻŽāĻŋ āϏ⧇āχ āϏāĻžāχāϟāϕ⧇ āϤ⧋āĻŽāĻžāϰ āϜāĻŋāĻŽā§‡āχāϞ⧇āϰ āĻĒāĻžāϏāĻ“ā§ŸāĻžāĻ°ā§āĻĄ āĻĻāĻžāĻ“ āύāĻž; āϗ⧁āĻ—āϞ āϏ⧇āχ āϏāĻžāχāϟāϕ⧇ āĻļ⧁āϧ⧁ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŽā§‡ā§ŸāĻžāĻĻ⧇āϰ Access Token āĻĻā§‡ā§Ÿ āϝāĻžāϤ⧇ āϤāĻžāϰāĻž āϤ⧋āĻŽāĻžāϰ āύāĻžāĻŽ āφāϰ āχāĻŽā§‡āχāϞ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
đŸ•ŗī¸ āĻ—āĻ˛ā§āĻĒ ā§¨: Redirect URI āĻšāĻžāχāĻœā§āϝāĻžāĻ• — āϚāĻŋāĻ āĻŋ āĻ…āĻ¨ā§āϝ⧇āϰ āĻ āĻŋāĻ•āĻžāύāĻžāϝāĻŧ
āϗ⧁āĻ—āϞ āϝāĻ–āύ āχāωāϜāĻžāϰāϕ⧇ āĻ…āĻĨāϰāĻžāχāϜ āĻ•āϰ⧇, āϤāĻ–āύ āϏ⧇ āĻŦā§āϰāĻžāωāϜāĻžāϰāϕ⧇ āĻāĻ•āϟāĻŋ āĻ āĻŋāĻ•āĻžāύāĻžā§Ÿ āϰāĻŋāĻĄāĻžāχāϰ⧇āĻ•ā§āϟ āĻ•āϰ⧇ āϕ⧋āĻĄāϟāĻŋ āĻĒāĻžāĻ āĻžā§Ÿ:
https://accounts.google.com/o/oauth2/auth?client_id=123&redirect_uri=https://training.example.test/callback

āϝāĻĻāĻŋ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰ redirect_uri āĻ•āĻ ā§‹āϰāĻ­āĻžāĻŦ⧇ āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āϟ āύāĻž āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻ“ā§ŸāĻžāχāĻ˛ā§āĻĄāĻ•āĻžāĻ°ā§āĻĄ āĻ…ā§āϝāĻžāϞāĻžāω āĻ•āϰ⧇ (āϝ⧇āĻŽāύ: https://training.example.test.evil.com/callback āĻŦāĻž āĻ“āĻĒ⧇āύ āϰāĻŋāĻĄāĻžāχāϰ⧇āĻ•ā§āϟ), āϤāĻŦ⧇ āϤ⧋āĻŽāĻžāϰ āϏāĻŋāĻ•ā§āϰ⧇āϟ āϞāĻ—āχāύ āϕ⧋āĻĄ āϚāϞ⧇ āϝāĻžāĻŦ⧇ āĻšā§āϝāĻžāĻ•āĻžāϰ⧇āϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇! āĻšā§āϝāĻžāĻ•āĻžāϰ āϏ⧇āχ āϕ⧋āĻĄ āϗ⧁āĻ—āϞ⧇ āϜāĻŽāĻž āĻĻāĻŋā§Ÿā§‡ āϤ⧋āĻŽāĻžāϰ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϚāĻŋāϰāϤāϰ⧇ āĻĻāĻ–āϞ āĻ•āϰ⧇ āύ⧇āĻŦ⧇!
đŸ›Ąī¸ āĻ—āĻ˛ā§āĻĒ ā§Š: State āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āύāĻž āĻĨāĻžāĻ•āĻžāϰ āĻŽāϰāĻŖāĻĢāĻžāρāĻĻ
OAuth āĻĢā§āϞ⧋āϤ⧇ āĻāĻ•āϟāĻŋ āĻ…āĻ¤ā§āϝāĻ¨ā§āϤ āϜāϰ⧁āϰāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻĨāĻžāϕ⧇ — stateāĨ¤ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ°â€ā§āϝāĻžāĻ¨ā§āĻĄāĻŽ āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‹āĻ—ā§āϰāĻžāĻĢāĻŋāĻ• āĻŸā§‹āϕ⧇āύ āϝāĻž CSRF āĻ…ā§āϝāĻžāϟāĻžāĻ• āφāϟāĻ•āĻžā§ŸāĨ¤

āϝāĻĻāĻŋ āϕ⧋āύ⧋ āϏāĻžāχāϟ state āĻšā§‡āĻ• āύāĻž āĻ•āϰ⧇, āĻšā§āϝāĻžāĻ•āĻžāϰ āύāĻŋāĻœā§‡āϰ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡āϰ āĻ…āĻĨāϰāĻžāχāĻœā§‡āĻļāύ āϕ⧋āĻĄ āĻ­āĻŋāĻ•āϟāĻŋāĻŽā§‡āϰ āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇ āĻœā§‹āϰ āĻ•āϰ⧇ āϰāĻžāύ āĻ•āϰāĻŋā§Ÿā§‡ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇, āĻĢāϞ⧇ āĻ­āĻŋāĻ•āϟāĻŋāĻŽā§‡āϰ āĻĒā§āϰ⧋āĻĢāĻžāχāϞ āĻšā§āϝāĻžāĻ•āĻžāϰ⧇āϰ āϏ⧋āĻļā§āϝāĻžāϞ āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āϞāĻŋāĻ‚āĻ• āĻšā§Ÿā§‡ āϝāĻžā§Ÿ!
đŸŽ¯ āĻ—āĻ˛ā§āĻĒ ā§Ē: āĻŦāĻžāĻ— āĻŦāĻžāωāĻ¨ā§āϟāĻŋāϤ⧇ $ā§Ģ,ā§Ļā§Ļā§Ļ āĻ•āĻžāĻŽāĻžāύ⧋āϰ āĻšā§‡āĻ•āϞāĻŋāĻ¸ā§āϟ
āĻŦ⧃āĻˇā§āϟāĻŋ āĻŽā§āϝāĻžāĻŽ āĻŦāϞāϞ⧇āύ, "OAuth-āϤ⧇ āĻŦāĻžāĻ— āĻ–ā§‹āρāϜāĻž āϏāĻŦāĻšā§‡ā§Ÿā§‡ āϞāĻžāĻ­āϜāύāĻ•!"

ā§§. āϰāĻŋāĻĄāĻžāχāϰ⧇āĻ•ā§āϟ āχāωāφāϰāφāχ-āϤ⧇ /..;/ āĻŦāĻž @evil.com āĻŸā§āϰāĻžāχ āĻ•āϰ⧋āĨ¤
⧍. āĻāĻ• āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻĒāĻžāĻ“ā§ŸāĻž āĻŸā§‹āϕ⧇āύ āĻ…āĻ¨ā§āϝ āχāωāϜāĻžāϰ⧇āϰ API āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡ āϚāĻžāϞāĻŋā§Ÿā§‡ āĻĻ⧇āĻ–ā§‹ (Scope Confusion)āĨ¤
ā§Š. āϰāĻŋāĻĢā§āϰ⧇āĻļ āĻŸā§‹āϕ⧇āύ āĻ•āĻ–āύ⧋ āĻāĻ•ā§āϏāĻĒāĻžā§ŸāĻžāϰ āĻšā§Ÿ āĻ•āĻŋ āύāĻž āϤāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧋āĨ¤
🔑 OAuth 2.0 Token Scope & Leak Inspector
āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻŦāĻž āϰāĻŋāĻĄāĻžāχāϰ⧇āĻ•ā§āϟ āχāωāφāϰāφāχ āĻĻāĻžāĻ“ — āĻĒāĻžāϰāĻŽāĻŋāĻļāύ āĻ¸ā§āϕ⧋āĻĒ āĻ“ āϰāĻŋāĻĄāĻžāχāϰ⧇āĻ•ā§āϟ āĻ­āĻžāϞāύāĻžāϰ⧇āĻŦāĻŋāϞāĻŋāϟāĻŋ āĻ…āĻĄāĻŋāϟ āĻ•āϰ⧋!
👆 āωāĻĒāϰ⧇ āχāύāĻĒ⧁āϟ āĻĻāĻŋā§Ÿā§‡ "āĻ˛ā§āϝāĻžāĻŦ āϚāĻžāϞ⧁ āĻ•āϰ⧋" āĻŦāĻžāϟāύ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧋...
đŸŽ¯ Chapter 18 āϕ⧁āχāϜ (ā§§ā§ĻāϟāĻž āĻĒā§āϰāĻļā§āύ)
āĻĒā§āϰāϤāĻŋāϟāĻž āωāĻ¤ā§āϤāϰ⧇ click āĻ•āϰ⧋ → āϏāĻŦ⧁āϜ/āϞāĻžāϞ + āĻŦā§āϝāĻžāĻ–ā§āϝāĻž!
❓ āĻĒā§āϰāĻļā§āύ 1: OAuth 2.0 āϕ⧀?
💡 OAuth 2.0 = authorization frameworkāĨ¤ Third-party app-āϕ⧇ limited access āĻĻ⧇āĻ“āϝāĻŧāĻž — password āύāĻž āĻĻāĻŋāϝāĻŧ⧇āχāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 2: OAuth-āĻ redirect_uri mismatch vulnerability āϕ⧀?
💡 redirect_uri whitelist properly validate āύāĻž āĻ•āϰāϞ⧇ attacker āύāĻŋāĻœā§‡āϰ server-āĻ code/token redirect āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 3: Authorization Code flow-āĻ code āϕ⧋āĻĨāĻžāϝāĻŧ āϝāĻžāϝāĻŧ?
💡 OAuth code → redirect_uri?code=XXXXXāĨ¤ Backend āĻāχ code āĻĻāĻŋāϝāĻŧ⧇ server-to-server token exchange āĻ•āϰ⧇āĨ¤
❓ āĻĒā§āϰāĻļā§āύ 4: state parameter OAuth-āĻ āϕ⧀ āĻ•āϰ⧇?
💡 OAuth state = random CSRF tokenāĨ¤ Request āĻ“ callback-āĻ same value āύāĻž āĻĨāĻžāĻ•āϞ⧇ → rejectāĨ¤ CSRF attack preventāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 5: Access token vs Authorization code āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ?
💡 Auth code = short-lived, one-timeāĨ¤ Exchange āĻ•āϰ⧋ → access token āĻĒāĻžāĻ“āĨ¤ Access token = actual API accessāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 6: OAuth PKCE āϕ⧀?
💡 PKCE = code verifier + code challengeāĨ¤ Client secret āĻ›āĻžāĻĄāĻŧāĻž authorization code intercept āĻ•āϰāĻž uselessāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 7: Open redirect OAuth vulnerability āĻŽāĻžāύ⧇ āϕ⧀?
💡 Open redirect = redirect_uri validation weak → attacker.com-āĻ redirect āϏāĻŽā§āĻ­āĻŦ → token stealāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 8: SSO āϕ⧀?
💡 SSO = Single Sign-OnāĨ¤ āĻāĻ•āĻŦāĻžāϰ login (Google/Microsoft) → multiple apps automatically authenticatedāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 9: Implicit flow āϕ⧇āύ deprecated?
💡 Implicit flow-āĻ access token fragment (#token=...) URL-āĻ āĻĨāĻžāϕ⧇ — browser history, referrer header-āĻ leak riskāĨ¤
❓ āĻĒā§āϰāĻļā§āύ 10: JWT audience (aud) claim-āĻ āϕ⧀ āĻĨāĻžāϕ⧇?
💡 aud = audienceāĨ¤ Token āϕ⧋āύ service/app-āĻāϰ āϜāĻ¨ā§āϝ āϤ⧈āϰāĻŋāĨ¤ Wrong service-āĻ submit āĻ•āϰāϞ⧇ reject āĻ•āϰāĻž āωāϚāĻŋāϤāĨ¤

āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āϤ reference

āφāϰāĻ“ āĻĒāĻĄāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϤāĻŋāĻˇā§āĻ āĻŋāϤ security standards āĻ“ guidance āĻĻ⧇āĻ–ā§‹; āĻĒā§āϰāϤāĻŋāϟāĻŋ lab āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āĻŦāĻž synthetic environment-āĻ āĻ•āϰ⧋āĨ¤

Bristy Ma'am
āĻŦ⧃āĻˇā§āϟāĻŋ āĻŽā§āϝāĻžāĻŽ 👩‍đŸĢ
āϤ⧋āĻŽāĻžāϰ āĻĒāĻžāĻ°ā§āϏ⧋āύāĻžāϞ āĻšā§āϝāĻžāĻ•āĻŋāĻ‚ āĻŽā§‡āĻ¨ā§āϟāϰ â€ĸ āĻ…āύāϞāĻžāχāύ
āφāϰ⧇ āϏ⧌āϰāĻ­! āϕ⧇āĻŽāύ āφāϛ⧋? āϕ⧋āύ⧋ āĻ•āύāϏ⧇āĻĒā§āϟ āĻŦāĻž āϕ⧁āχāĻœā§‡ āφāϟāĻ•āĻžāϞ⧇ āφāĻŽāĻžāϕ⧇ āĻŦāϞ⧋, āφāĻŽāĻŋ āĻŦ⧁āĻāĻŋā§Ÿā§‡ āĻĻāĻŋāĻšā§āĻ›āĻŋ! â¤ī¸