# OAuth hadi Uchukuzi wa Akaunti
Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)! Njia nyingine za kusaidia HackTricks: * Ikiwa unataka kuona **kampuni yako ikionekana kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)! * Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com) * Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family) * **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
{% embed url="https://websec.nl/" %} ## Taarifa Msingi OAuth inatoa toleo mbalimbali, na ufahamu wa msingi unapatikana kwenye [hati ya OAuth 2.0](https://oauth.net/2/). Mjadala huu unazingatia sana [aina ya idhini ya nambari ya utoaji wa OAuth 2.0](https://oauth.net/2/grant-types/authorization-code/), 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](https://mfano.com) na chagua kitufe cha "Integrate with Social Media". 2. Tovuti hiyo kisha itatuma ombi kwa [https://mitandaojamii.com](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 ``` 3. Kisha utaletewa ukurasa wa idhini. 4. 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 ``` 5. 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"} ``` 6. 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](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

test

``` ### 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](https://labs.detectify.com/writeups/account-hijacking-using-dirty-dancing-in-sign-in-oauth-flows/#gadget-2-xss-on-sandbox-third-party-domain-that-gets-the-url)** ### AWS Cognito Katika ripoti ya tuzo ya mdudu huyu: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](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. ```bash # 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**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), 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**. {% hint style="danger" %} 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. {% endhint %} ### Viungo viwili & kuki Kulingana na [**makala hii**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), 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](https://portswigger.net/research/hidden-oauth-attack-vectors) 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**](race-condition.md). ## Marejeo * [**https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1**](https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1) * [**https://portswigger.net/research/hidden-oauth-attack-vectors**](https://portswigger.net/research/hidden-oauth-attack-vectors)
{% embed url="https://websec.nl/" %}
Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)! Njia nyingine za kusaidia HackTricks: * Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)! * Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com) * Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee * **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.