hacktricks/pentesting-web/oauth-to-account-takeover.md
2024-02-11 02:13:58 +00:00

18 KiB

OAuth hadi Kuchukua Udhibiti wa Akaunti

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Taarifa Msingi

OAuth inatoa toleo mbalimbali, na ufahamu wa msingi unapatikana kwenye hati ya OAuth 2.0. Majadiliano haya yanazingatia sana aina ya idhini ya nambari ya utoaji wa OAuth 2.0, ambayo hutoa mfumo wa idhini unaoruhusu programu kupata au kutekeleza hatua kwenye akaunti ya mtumiaji kwenye programu nyingine (seva ya idhini).

Fikiria tovuti ya kufikirika https://example.com, iliyoundwa kuonyesha machapisho yako ya media ya kijamii, pamoja na yale ya faragha. Ili kufanikisha hili, OAuth 2.0 hutumiwa. https://example.com itaomba idhini yako ya kupata machapisho yako ya media ya kijamii. Kwa hiyo, skrini ya idhini itaonekana kwenye https://socialmedia.com, ikielezea idhini inayotakiwa na msanidi programu anayefanya ombi. Baada ya idhini yako, https://example.com inapata uwezo wa kupata machapisho yako kwa niaba yako.

Ni muhimu kuelewa sehemu zifuatazo ndani ya mfumo wa OAuth 2.0:

  • mmiliki wa rasilimali: Wewe, kama mtumiaji/kifaa, unaidhinisha upatikanaji wa rasilimali yako, kama vile machapisho ya akaunti yako ya media ya kijamii.
  • seva ya rasilimali: Seva inayosimamia maombi yaliyothibitishwa baada ya programu kupata access token kwa niaba ya mmiliki wa rasilimali, kwa mfano, https://socialmedia.com.
  • programu ya mteja: Programu inayotafuta idhini kutoka kwa mmiliki wa rasilimali, kama vile https://example.com.
  • seva ya idhini: Seva inayotoa access token kwa programu ya mteja baada ya kuthibitisha kwa mafanikio mmiliki wa rasilimali na kupata idhini, kwa mfano, https://socialmedia.com.
  • client_id: Kitambulisho cha umma na cha kipekee kwa programu.
  • client_secret: Neno la siri la siri, linalojulikana tu kwa programu na seva ya idhini, linalotumiwa kuzalisha access_token.
  • response_type: Thamani inayoelezea aina ya token inayohitajika, kama vile 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 kuongoza iliyosajiliwa mapema.
  • state: Parameta ya kudumisha data wakati mtumiaji anaelekezwa na kurudi kutoka kwa seva ya idhini. Unyenyekevu 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, inayotumiwa pamoja na client_id na client_secret na programu ya mteja kupata access_token.
  • access_token: Token ambayo programu ya mteja hutumia kwa maombi ya API kwa niaba ya mmiliki wa rasilimali.
  • refresh_token: Inawezesha programu kupata access_token mpya bila kumwomba tena mtumiaji.

Mchakato

Mchakato halisi wa OAuth unafuata hatua zifuatazo:

  1. Nenda kwenye https://example.com na chagua kifungo "Integrate with Social Media".
  2. Tovuti hiyo kisha itatuma ombi kwa https://socialmedia.com kuomba idhini yako kuruhusu programu ya https://example.com kupata machapisho yako. Ombi linajengwa 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
  1. Kisha utapewa ukurasa wa idhini.

  2. Baada ya idhini yako, Mtandao wa Kijamii utatuma jibu kwa redirect_uri na vigezo vya code na state:

https://example.com?code=uniqueCode123&state=randomString123
  1. https://example.com hutumia code hii, pamoja na client_id na client_secret yake, kufanya ombi la upande wa seva ili kupata access_token kwa niaba yako, kuruhusu ufikiaji wa ruhusa ulizokubali:
POST /oauth/access_token
Host: socialmedia.com
...{"client_id": "example_clientId", "client_secret": "example_clientSecret", "code": "uniqueCode123", "grant_type": "authorization_code"}
  1. Hatimaye, mchakato unakamilika kwa https://example.com kutumia access_token yako kufanya wito wa API kwa Mitandao ya Kijamii ili kupata ufikiaji.

Mianya

Open redirect_uri

redirect_uri ni muhimu kwa usalama katika utekelezaji wa OAuth na OpenID, kwani inaelekeza wapi data nyeti, kama nambari za idhini, zinatumwa baada ya idhini. Ikiwa imepangwa vibaya, inaweza kuruhusu wadukuzi kupelekeza maombi haya kwa seva mbaya, kuruhusu kuchukua udhibiti wa akaunti.

Teknolojia za kudukua hutofautiana kulingana na mantiki ya ukaguzi wa seva ya idhini. Zinaweza kutofautiana kutoka kwa kulinganisha njia kwa kukubali URL yoyote ndani ya kikoa au kwenye saraka iliyotajwa. Njia za kawaida za kudukua ni pamoja na kupelekeza wazi, kuvuka njia, kudukua 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 ni rahisi kudukuliwa kwa mashambulizi ya kupelekeza. Vigezo hivi ni hiari na msaada wao hutofautiana kati ya seva.

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

XSS katika utekelezaji wa kupelekeza

Kama ilivyotajwa katika ripoti hii ya zawadi ya mdudu https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html inaweza kuwa inawezekana kuwa URL ya kupelekeza inaonyeshwa katika jibu la seva baada ya mtumiaji kuthibitisha, ikiwa inavuja kwa XSS. Payload inayowezekana kujaribu:

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

CSRF - Kukosa kushughulikia kwa usahihi kipengele cha hali

Katika utekelezaji wa OAuth, matumizi mabaya au kutotumia kipengele cha hali kinaweza kuongeza hatari kubwa ya mashambulizi ya Cross-Site Request Forgery (CSRF). Udhaifu huu unatokea wakati kipengele cha hali kinapotumiwa kwa njia isiyofaa, kutumiwa kama thamani ya tuli, au kutokushughulikiwa kwa usahihi, kuruhusu wadukuzi kukiuka ulinzi wa CSRF.

Wadukuzi wanaweza kutumia hili kwa kuvuruga mchakato wa idhini ili kuunganisha akaunti yao na akaunti ya muathirika, hivyo kusababisha uchukuzi wa akaunti. Hii ni hatari hasa katika programu ambapo OAuth hutumiwa kwa madhumuni ya uwakilishi.

Mifano halisi ya udhaifu huu imeandikwa katika changamoto mbalimbali za CTF na jukwaa za udukuzi, ikionyesha athari zake za vitendo. Tatizo hili pia linahusisha ujumuishaji na huduma za tatu kama vile Slack, Stripe, na PayPal, ambapo wadukuzi wanaweza kuhamisha arifa au malipo kwenye akaunti zao.

Kushughulikia na kuthibitisha kwa usahihi kipengele cha hali ni muhimu kwa kulinda dhidi ya CSRF na kusimamia mchakato wa OAuth.

Kabla ya Uchukuzi wa Akaunti

  1. Bila Uthibitisho wa Barua pepe Wakati wa Kuunda Akaunti: Wadukuzi wanaweza kuunda akaunti mapema kwa kutumia barua pepe ya muathirika. Ikiwa muathirika baadaye anatumia huduma ya tatu kwa kuingia, programu inaweza kwa bahati mbaya kuunganisha akaunti hii ya tatu na akaunti iliyoundwa mapema na muhalifu, hivyo kusababisha ufikiaji usiohalali.

  2. Kudukua Uthibitisho Mdogo wa Barua pepe wa OAuth: Wadukuzi wanaweza kutumia huduma za OAuth ambazo hazithibitishi barua pepe kwa kujisajili na huduma hiyo na kisha kubadilisha barua pepe ya akaunti kuwa ya muathirika. Njia hii ina hatari sawa ya ufikiaji usiohalali wa akaunti, kama ilivyo kwa kisa cha kwanza lakini kupitia njia tofauti ya shambulio.

Kufichua Siri

Kutambua na kulinda vigezo vya siri vya OAuth ni muhimu. Ingawa client_id inaweza kufichuliwa salama, kufichua client_secret kunasababisha hatari kubwa. Ikiwa client_secret inaingiliwa, wadukuzi wanaweza kutumia utambulisho na imani ya programu kuiba access_tokens za watumiaji na habari za kibinafsi.

Udhaifu wa kawaida unatokea wakati programu inashughulikia ubadilishaji wa code ya idhini kwa access_token upande wa mteja badala ya upande wa seva. Kosa hili husababisha kufichuliwa kwa client_secret, kuruhusu wadukuzi kuzalisha access_tokens kwa udanganyifu wa programu. Zaidi ya hayo, kupitia uhandisi wa kijamii, wadukuzi wanaweza kuongeza mamlaka kwa kuongeza wigo zaidi kwa idhini ya OAuth, hivyo kudhoofisha hadhi ya programu.

Kuvunja Nguvu ya Siri ya Mteja

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

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 habari cha Referer kinachovuja Kanuni + Hali

Mara tu mteja anapopata kanuni na hali, ikiwa ina reflected ndani ya kichwa cha habari cha Referer wakati anapata ukurasa tofauti, basi ina udhaifu.

Kitufe cha Kufikia Kimehifadhiwa kwenye Historia ya Kivinjari

Nenda kwenye historia ya kivinjari na angalia ikiwa kitufe cha kufikia kimehifadhiwa hapo.

Kanuni ya Idhini Isiyokoma

Kanuni ya idhini inapaswa kuishi kwa muda fulani ili kupunguza dirisha la wakati ambapo mshambuliaji anaweza kuiba na kuitumia.

Kitufe cha Idhini / Kiboreshaji kisichounganishwa na mteja

Ikiwa unaweza kupata kanuni ya idhini na kuitumia na mteja tofauti basi unaweza kuchukua udhibiti wa akaunti nyingine.

Njia za Furaha, XSS, Iframes & Ujumbe wa Post kuvuja kanuni & hali

Angalia chapisho hili

AWS Cognito

Katika ripoti hii ya tuzo ya mdudu: https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/ unaweza kuona kuwa kitufe ambacho AWS Cognito inarudisha kwa mtumiaji kinaweza kuwa na mamlaka ya kutosha ya kuandika tena data ya mtumiaji. Kwa hivyo, ikiwa unaweza kubadilisha barua pepe ya mtumiaji kwa barua pepe tofauti ya mtumiaji, huenda uka chukua udhibiti wa 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"
}
]
}

Kwa habari zaidi kuhusu jinsi ya kutumia AWS Cognito angalia:

{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum" %}

Kutumia vibaya vitufe vya programu nyingine

Kama ilivyotajwa katika nakala hii, mifumo ya OAuth ambayo inatarajia kupokea kitufe (na sio nambari) inaweza kuwa na udhaifu ikiwa haitathibitishi kwamba kitufe 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 baada ya muathirika kuingia kwa kutumia Facebook katika programu ya mshambuliaji, mshambuliaji anaweza kupata kitufe cha OAuth cha mtumiaji kilichotolewa kwa programu yake, na kukitumia kuingia katika programu ya OAuth ya muathirika kwa kutumia kitufe cha mtumiaji cha muathirika.

{% hint style="danger" %} Kwa hiyo, ikiwa mshambuliaji anafanikiwa kupata mtumiaji kufikia programu yake ya OAuth, ataweza kuchukua udhibiti wa akaunti ya muathirika katika programu ambazo zinatarajia kitufe na hazithibitishi ikiwa kitufe kilipewa ID yao ya programu. {% endhint %}

Viungo viwili na kuki

Kulingana na nakala hii, ilikuwa inawezekana kufanya muathirika afungue ukurasa na returnUrl inayoelekeza kwenye mwenyeji wa mshambuliaji. Habari hii ingehifadhiwa katika kuki (RU) na katika hatua ya baadaye, kielekezi kitauliza mtumiaji ikiwa anataka kutoa ufikiaji kwa mwenyeji huyo wa mshambuliaji.

Ili kuepuka kielekezi hiki, ilikuwa inawezekana kufungua kichupo ili kuanzisha mtiririko wa OAuth ambao ungehifadhi kuki hii ya RU kwa kutumia returnUrl, kufunga kichupo kabla ya kielekezi kuonyeshwa, na kufungua kichupo kipya bila thamani hiyo. Kwa hiyo, kielekezi hakitatoa habari kuhusu mwenyeji wa mshambuliaji, lakini kuki itakuwa imewekwa kwake, hivyo kitufe kitatumwa kwa mwenyeji wa mshambuliaji katika uhamishaji.

Parameta za SSRF

Angalia utafiti huu kwa maelezo zaidi kuhusu mbinu hii.

Usajili wa Mteja wa Kudumu katika OAuth unatumika kama njia isiyoeleweka lakini muhimu kwa udhaifu wa usalama, hasa kwa mashambulizi ya Server-Side Request Forgery (SSRF). Kipengele hiki kinawezesha seva za OAuth kupokea maelezo kuhusu programu za wateja, ikiwa ni pamoja na URL nyeti ambazo zinaweza kudukuliwa.

Mambo muhimu:

  • Usajili wa Mteja wa Kudumu mara nyingi unahusishwa na /register na unakubali maelezo kama vile client_name, client_secret, redirect_uris, na URL kwa ajili ya nembo au JSON Web Key Sets (JWKs) kupitia maombi ya POST.
  • Kipengele hiki kinazingatia maelekezo yaliyowekwa katika RFC7591 na OpenID Connect Registration 1.0, ambayo ni pamoja na parameta ambazo zinaweza kuwa na udhaifu wa SSRF.
  • Mchakato wa usajili unaweza kusababisha seva kuwa wazi kwa SSRF kwa njia kadhaa:
  • logo_uri: URL kwa nembo ya programu ya mteja ambayo inaweza kupatikana na seva, ikisababisha SSRF au kusababisha XSS ikiwa URL haikushughulikiwa vizuri.
  • jwks_uri: URL kwa hati ya JWK ya mteja, ambayo ikiwa imeundwa kwa nia mbaya, inaweza kusababisha seva kufanya maombi ya kutoka kwa seva inayodhibitiwa na mshambuliaji.
  • sector_identifier_uri: Inahusisha orodha ya JSON ya redirect_uris, ambayo seva inaweza kupata, ikiumba fursa ya SSRF.
  • request_uris: Inaorodhesha URI za maombi zilizoruhusiwa kwa mteja, ambazo zinaweza kudukuliwa ikiwa seva inapata URI hizi mwanzoni mwa mchakato wa idhini.

Mbinu ya Udukuzi:

  • SSRF inaweza kusababishwa kwa kusajili mteja mpya na URL mbaya katika parameta kama vile logo_uri, jwks_uri, au sector_identifier_uri.
  • Ingawa udukuzi wa moja kwa moja kupitia request_uris unaweza kudhibitiwa na udhibiti wa orodha nyeupe, kutoa request_uri iliyosajiliwa mapema na inayodhibitiwa na mshambuliaji kunaweza kurahisisha SSRF wakati wa hatua ya idhini.

Masharti ya OAuth ya Masharti ya Mashindano

Ikiwa jukwaa unayopima ni mtoa huduma wa OAuth soma hii ili kujaribu Masharti ya Mashindano yanayowezekana.

Marejeo

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

Njia nyingine za kusaidia HackTricks: