OAuth to Account takeover

Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Taarifa Msingi

OAuth inatoa toleo mbalimbali, na ufahamu wa msingi unapatikana kwenye hati ya OAuth 2.0. Mjadala huu unazingatia sana aina ya idhini ya nambari ya utoaji wa OAuth 2.0, ikitoa mtaala wa idhini unaowezesha programu kupata au kutekeleza vitendo kwenye akaunti ya mtumiaji kwenye programu nyingine (seva ya idhini).

Fikiria tovuti ya dhana https://mfano.com, iliyoundwa kuonyesha machapisho yako ya mitandao ya kijamii, pamoja na yale ya faragha. Ili kufanikisha hili, OAuth 2.0 inatumika. https://mfano.com itaomba idhini yako ya kupata machapisho yako ya mitandao ya kijamii. Kwa hivyo, skrini ya idhini itaonekana kwenye https://mitandaojamii.com, ikielezea idhini inayotakiwa na mwandishi wa ombi. Baada ya idhini yako, https://mfano.com inapata uwezo wa kupata machapisho yako kwa niaba yako.

Ni muhimu kuelewa vipengele vifuatavyo ndani ya mfumo wa OAuth 2.0:

  • mmiliki wa rasilimali: Wewe, kama mtumiaji/kitu, unaidhinisha upatikanaji wa rasilimali yako, kama machapisho ya akaunti yako ya mitandao ya kijamii.

  • seva ya rasilimali: Seva inayosimamia maombi yaliyothibitishwa baada ya programu kupata access token kwa niaba ya mmiliki wa rasilimali, k.m., https://mitandaojamii.com.

  • programu ya mteja: Programu inayotafuta idhini kutoka kwa mmiliki wa rasilimali, kama vile https://mfano.com.

  • seva ya idhini: Seva inayotoa access token kwa programu ya mteja baada ya uthibitishaji mafanikio wa mmiliki wa rasilimali na kupata idhini, k.m., https://mitandaojamii.com.

  • client_id: Kitambulisho cha umma, cha kipekee kwa programu.

  • client_secret: Neno la siri, linalojulikana tu kwa programu na seva ya idhini, hutumiwa kuzalisha access_tokens.

  • response_type: Thamani inayoeleza aina ya token inayotakiwa, kama code.

  • scope: Kiwango cha upatikanaji ambacho programu ya mteja inaomba kutoka kwa mmiliki wa rasilimali.

  • redirect_uri: URL ambayo mtumiaji anaelekezwa baada ya idhini. Kawaida hii lazima ifanane na URL ya kuhamisha iliyosajiliwa mapema.

  • state: Parameta ya kuhifadhi data wakati wa kuhamisha mtumiaji kwenye na kutoka kwa seva ya idhini. Upekee wake ni muhimu kama muhimili wa ulinzi wa CSRF.

  • grant_type: Parameta inayoonyesha aina ya idhini na aina ya token itakayorudishwa.

  • code: Nambari ya idhini kutoka kwa seva ya idhini, hutumiwa pamoja na client_id na client_secret na programu ya mteja kupata access_token.

  • access_token: Token ambao programu ya mteja hutumia kwa maombi ya API kwa niaba ya mmiliki wa rasilimali.

  • refresh_token: Inawezesha programu kupata access_token mpya bila kumwuliza tena mtumiaji.

Mzunguko

Mzunguko halisi wa OAuth unaendelea kama ifuatavyo:

  1. Nenda kwenye https://mfano.com na chagua kitufe cha "Integrate with Social Media".

  2. Tovuti hiyo kisha itatuma ombi kwa https://mitandaojamii.com kuomba idhini yako kuruhusu programu ya https://mfano.com kupata machapisho yako. Ombi hilo limeundwa kama:

https://socialmedia.com/auth
?response_type=code
&client_id=example_clientId
&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback
&scope=readPosts
&state=randomString123
  1. Kisha utaletewa ukurasa wa idhini.

  2. Baada ya idhini yako, Mitandao ya Kijamii inatuma jibu kwa redirect_uri na vigezo vya code na state:

https://example.com?code=uniqueCode123&state=randomString123
  1. https://example.com inatumia hii code, pamoja na client_id na client_secret yake, kufanya ombi upande wa server kupata access_token kwa niaba yako, kuruhusu ufikiaji wa ruhusa ulizoidhinisha:

POST /oauth/access_token
Host: socialmedia.com
...{"client_id": "example_clientId", "client_secret": "example_clientSecret", "code": "uniqueCode123", "grant_type": "authorization_code"}
  1. Hatimaye, mchakato unamalizika kama https://example.com inatumia access_token yako kufanya wito wa API kwa Mitandao ya Kijamii ili kupata

Madoa ya Usalama

Uelekezaji wazi_uri

redirect_uri ni muhimu kwa usalama katika OAuth na utekelezaji wa OpenID, kwani inaelekeza wapi data nyeti, kama nambari za idhini, zinatumwa baada ya idhini. Ikiwa imepangwa vibaya, inaweza kuruhusu wachawi kuuelekeza maombi haya kwa seva zenye nia mbaya, kuruhusu utekaji wa akaunti.

Mbinu za kutumia zinatofautiana kulingana na mantiki ya uthibitishaji wa seva ya idhini. Wanaweza kutofautiana kutoka kwa kulinganisha njia kwa umakini hadi kukubali URL yoyote ndani ya kikoa au folda iliyotajwa. Mbinu za kawaida za kutumia ni pamoja na uelekezaji wazi, upitishaji wa njia, kutumia regex dhaifu, na kuingiza HTML kwa wizi wa alama.

Mbali na redirect_uri, vigezo vingine vya OAuth na OpenID kama client_uri, policy_uri, tos_uri, na initiate_login_uri pia wanaweza kuwa hatarini kwa mashambulizi ya uelekezaji. Vigezo hivi sio lazima na msaada wao hutofautiana kati ya seva.

Kwa wale wanaolenga seva ya OpenID, kipande cha ugunduzi (**.well-known/openid-configuration**) mara nyingi hupata maelezo muhimu ya usanidi kama vile registration_endpoint, request_uri_parameter_supported, na "require_request_uri_registration. Maelezo haya yanaweza kusaidia katika kutambua kipande cha usajili na maelezo mengine ya usanidi wa seva.

XSS katika utekelezaji wa uelekezaji

Kama ilivyotajwa katika ripoti hii ya tuzo ya mdudu https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html inaweza kuwa inawezekana kwamba URL ya uelekezaji inaonyeshwa katika majibu ya seva baada ya mtumiaji kujithibitisha, ikiwa inavuliwa kwa XSS. Payload inayowezekana kwa majaribio:

https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>

CSRF - Kukosea kushughulikia parameter ya hali

Katika utekelezaji wa OAuth, matumizi mabaya au kutokuwepo kwa parameter ya state inaweza kuongeza hatari kubwa ya mashambulizi ya Cross-Site Request Forgery (CSRF). Udhaifu huu unatokea wakati parameter ya state inatumika kwa njia isiyo sahihi, kutumika kama thamani ya statiki, au kutokuwa na uthibitisho sahihi, kuruhusu wachawi kupita kinga za CSRF.

Wachawi wanaweza kutumia hili kwa kuingilia mchakato wa idhini ili kuunganisha akaunti yao na akaunti ya muathiriwa, ikisababisha uchukuzi wa akaunti. Hii ni muhimu sana katika programu ambapo OAuth inatumika kwa madhumuni ya uthibitisho.

Mifano halisi ya udhaifu huu imerekodiwa katika changamoto mbalimbali za CTF na majukwaa ya udukuzi, ikionyesha athari zake za vitendo. Tatizo hili pia linahusiana na uingizaji wa huduma za tatu kama Slack, Stripe, na PayPal, ambapo wachawi wanaweza kuelekeza arifa au malipo kwa akaunti zao.

Kushughulikia na kuthibitisha parameter ya state kwa usahihi ni muhimu kwa kulinda dhidi ya CSRF na kusimamia mchakato wa OAuth.

Kabla ya Uchukuzi wa Akaunti

  1. Bila Uthibitishaji wa Barua pepe Wakati wa Uundaji wa Akaunti: Wachawi wanaweza kuunda akaunti kwa kujitayarisha kwa kutumia barua pepe ya muathiriwa. Ikiwa muathiriwa baadaye anatumia huduma ya tatu kwa kuingia, programu inaweza kwa bahati mbaya kuunganisha akaunti hii ya tatu ya muathiriwa na akaunti iliyoundwa mapema ya mshambuliaji, ikisababisha ufikiaji usioidhinishwa.

  2. Kutumia Uthibitishaji wa Barua pepe wa Lax OAuth: Wachawi wanaweza kutumia huduma za OAuth ambazo hazithibitishi barua pepe kwa kusajili na huduma yao na kisha kubadilisha barua pepe ya akaunti kuwa ya muathiriwa. Mbinu hii ina hatari sawa ya ufikiaji usioidhinishwa wa akaunti, kama kwenye kisa cha kwanza lakini kupitia vector tofauti wa shambulizi.

Kufichua Siri

Kutambua na kulinda paramita za siri za OAuth ni muhimu. Ingawa client_id inaweza kufichuliwa salama, kufunua client_secret kunaweza kuleta hatari kubwa. Ikiwa client_secret itafichuliwa, wachawi wanaweza kutumia kitambulisho na imani ya programu kuiba access_tokens za watumiaji na habari za kibinafsi.

Udhaifu wa kawaida unatokea wakati programu zinashughulikia kwa makosa kubadilishana code ya idhini kwa access_token upande wa mteja badala ya upande wa seva. Kosa hili husababisha kufichuliwa kwa client_secret, kuruhusu wachawi kuzalisha access_tokens chini ya kivuli cha programu. Zaidi ya hayo, kupitia uhandisi wa kijamii, wachawi wanaweza kuongeza mamlaka kwa kuongeza skopesi zaidi kwa idhini ya OAuth, wakiendelea kutumia hadhi ya kuaminika ya programu.

Kuvunja Neno la Siri la Mteja

Unaweza kujaribu kuvunja neno la siri la mteja wa mtoa huduma na mtoa huduma wa kitambulisho ili kujaribu kuiba akaunti. Ombi la BF linaweza kuonekana kama:

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]

Kichwa cha Referer kuvuja Msimbo + Hali

Mara tu mteja anapopata msimbo na hali, ikiwa inajitokeza ndani ya kichwa cha Referer anapobofya ukurasa tofauti, basi ni hatarishi.

Funguo la Kufikia Lililohifadhiwa katika Historia ya Kivinjari

Nenda kwenye historia ya kivinjari na angalia ikiwa funguo la kufikia limehifadhiwa humo.

Msimbo wa Kibali wa Milele

Msimbo wa kibali unapaswa kuishi kwa muda fulani tu ili kupunguza dirisha la muda ambapo mshambuliaji anaweza kuiba na kutumia.

Msimbo wa Kibali/Msimbo wa Kufufua usiofungwa kwa mteja

Ikiwa unaweza kupata msimbo wa kibali na kutumia na mteja tofauti basi unaweza kuchukua akaunti za wengine.

Njia za Furaha, XSS, Iframes & Ujumbe wa Kuchapisha kufichua msimbo & thamani za hali

Angalia chapisho hili

AWS Cognito

Katika ripoti ya tuzo ya mdudu huyu: https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/ unaweza kuona kwamba msimbo ambao AWS Cognito inamrudishia mtumiaji huenda ukawa na idhini za kutosha za kubadilisha data ya mtumiaji. Kwa hivyo, ikiwa unaweza kubadilisha barua pepe ya mtumiaji kwa barua pepe tofauti ya mtumiaji, unaweza kuchukua 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"
}
]
}

Kudanganya Vyeti vya Programu Nyingine

Kama ilivyotajwa katika makala hii, Mifumo ya OAuth ambayo inatarajia kupokea vibali (na sio nambari) inaweza kuwa hatarini ikiwa haitathibitisha kuwa kibali kinamilikiwa na programu.

Hii ni kwa sababu mshambuliaji anaweza kuunda programu inayounga mkono OAuth na kuingia kwa kutumia Facebook (kwa mfano) katika programu yake mwenyewe. Kisha, mara tu muathiriwa anapoingia kwa kutumia Facebook katika programu ya mshambuliaji, mshambuliaji anaweza kupata vibali vya OAuth vya mtumiaji vilivyotolewa kwa programu yake, na kuvitumia kuingia katika programu ya OAuth ya muathiriwa kwa kutumia kibali cha mtumiaji wa muathiriwa.

Hivyo, ikiwa mshambuliaji anafanikiwa kupata mtumiaji kumruhusu kutumia programu yake ya OAuth, ataweza kuchukua udhibiti wa akaunti za waathiriwa katika programu ambazo zinatarajia kibali na hazithibitishi ikiwa kibali kilipewa kitambulisho cha programu yao.

Viungo viwili & kuki

Kulingana na makala hii, ilikuwa inawezekana kufanya muathiriwa afungue ukurasa na returnUrl inayoashiria kwenye mwenyeji wa mshambuliaji. Taarifa hii ingehifadhiwa katika kuki (RU) na katika hatua inayofuata prompt itauliza mtumiaji ikiwa anataka kutoa ruhusa kwa mwenyeji huyo wa mshambuliaji.

Ili kuepuka prompt hii, ilikuwa inawezekana kufungua kichupo kuanzisha mtiririko wa Oauth ambao ungehakikisha kuki hii ya RU kwa kutumia returnUrl, kufunga kichupo kabla ya prompt kuonyeshwa, na kufungua kichupo kipya bila thamani hiyo. Kisha, prompt haitaonyesha kuhusu mwenyeji wa mshambuliaji, lakini kuki itahifadhiwa kwake, hivyo kibali kitatumwa kwa mwenyeji wa mshambuliaji katika uendeshaji.

Vigezo vya SSRFs

Angalia utafiti huu kwa maelezo zaidi kuhusu mbinu hii.

Usajili wa Mteja wa Kudumu katika OAuth unatumika kama vector ya usalama usio wazi lakini muhimu kwa ajili ya udhaifu wa usalama, hasa kwa mashambulizi ya Server-Side Request Forgery (SSRF). Kipengele hiki huruhusu seva za OAuth kupokea maelezo kuhusu programu za wateja, ikiwa ni pamoja na URL nyeti ambazo zinaweza kutumiwa vibaya.

Muhimu:

  • Usajili wa Mteja wa Kudumu mara nyingi unahusishwa na /register na hukubali maelezo kama vile client_name, client_secret, redirect_uris, na URLs kwa ajili ya nembo au Seti za Kijeti za JSON (JWKs) kupitia maombi ya POST.

  • Kipengele hiki kinazingatia maelekezo yaliyowekwa katika RFC7591 na Usajili wa OpenID Connect 1.0, ambayo ni pamoja na vigezo vinavyoweza kuwa hatarini kwa SSRF.

  • Mchakato wa usajili unaweza kwa bahati mbaya kufunua seva kwa SSRF kwa njia kadhaa:

  • logo_uri: URL kwa nembo ya programu ya mteja ambayo inaweza kupakuliwa na seva, ikichochea SSRF au kusababisha XSS ikiwa URL itashughulikiwa vibaya.

  • jwks_uri: URL kwa hati ya JWK ya mteja, ambayo ikipangwa kwa udanganyifu, inaweza kusababisha seva kufanya maombi ya kutoka kwa seva inayodhibitiwa na mshambuliaji.

  • sector_identifier_uri: Inahusisha safu ya JSON ya redirect_uris, ambayo seva inaweza kupakua, ikiumba fursa ya SSRF.

  • request_uris: Inaorodhesha URIs zilizoruhusiwa za ombi kwa mteja, ambazo zinaweza kutumiwa vibaya ikiwa seva itapakua URIs hizi mwanzoni mwa mchakato wa idhini.

Mbinu ya Utekaji:

  • SSRF inaweza kuanzishwa kwa kusajili mteja mpya na URLs zenye nia mbaya katika vigezo kama logo_uri, jwks_uri, au sector_identifier_uri.

  • Ingawa utekelezaji wa moja kwa moja kupitia request_uris unaweza kupunguzwa na udhibiti wa orodha nyeupe, kutoa request_uri iliyosajiliwa mapema, inayodhibitiwa na mshambuliaji, inaweza kurahisisha SSRF wakati wa hatua ya idhini.

Mashindano ya Watoa Huduma za OAuth

Ikiwa jukwaa unalolipima ni mtoa huduma wa OAuth soma hii ili kujaribu Mashindano ya Watoa Huduma.

Marejeo

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Last updated