18 KiB
OAuth za preuzimanje naloga
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite svoju kompaniju reklamiranu na HackTricks-u ili da preuzmete HackTricks u PDF formatu proverite PLANOVE ZA PRIJAVU!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte Porodičnu PEASS, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitteru 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
{% embed url="https://websec.nl/" %}
Osnovne informacije
OAuth nudi različite verzije, sa osnovnim informacijama dostupnim na OAuth 2.0 dokumentaciji. Ova diskusija se uglavnom fokusira na široko korišćeni OAuth 2.0 tip dozvole autorizacije, pružajući okvir za autorizaciju koji omogućava aplikaciji pristup ili izvršavanje radnji na korisničkom nalogu u drugoj aplikaciji (autorizacioni server).
Pretpostavimo hipotetički sajt https://primer.com, dizajniran da prikaže sve vaše postove na društvenim mrežama, uključujući privatne. Da bi se to postiglo, koristi se OAuth 2.0. https://primer.com će zatražiti vašu dozvolu da pristupi vašim postovima na društvenim mrežama. Kao rezultat toga, pojaviće se ekran saglasnosti na https://društvenamreža.com, koji opisuje dozvole koje se traže i razvojni programer koji traži dozvolu. Nakon vaše autorizacije, https://primer.com dobija mogućnost da pristupi vašim postovima u vaše ime.
Važno je razumeti sledeće komponente unutar OAuth 2.0 okvira:
- vlasnik resursa: Vi, kao korisnik/entitet, autorizujete pristup vašem resursu, poput vaših postova na društvenim mrežama.
- server resursa: Server koji upravlja autentifikovanim zahtevima nakon što je aplikacija obezbedila
pristupni token
u imevlasnika resursa
, npr. https://društvenamreža.com. - klijentska aplikacija: Aplikacija koja traži autorizaciju od
vlasnika resursa
, poput https://primer.com. - autorizacioni server: Server koji izdaje
pristupne tokene
klijentskoj aplikaciji
nakon uspešne autentifikacijevlasnika resursa
i obezbeđivanja autorizacije, npr. https://društvenamreža.com. - client_id: Javni, jedinstveni identifikator aplikacije.
- client_secret: Poverljiv ključ, poznat samo aplikaciji i autorizacionom serveru, korišćen za generisanje
pristupnih tokena
. - response_type: Vrednost koja specificira tip tokena koji se zahteva, poput
koda
. - scope: Nivo pristupa koji
klijentska aplikacija
zahteva odvlasnika resursa
. - redirect_uri: URL na koji se korisnik preusmerava nakon autorizacije. Ovo obično mora biti usklađeno sa unapred registrovanim URL-om za preusmeravanje.
- state: Parametar za održavanje podataka tokom preusmeravanja korisnika ka i od autorizacionog servera. Njegova jedinstvenost je ključna za služenje kao mehanizam zaštite od CSRF-a.
- grant_type: Parametar koji ukazuje tip dozvole i tip tokena koji će biti vraćen.
- code: Kod autorizacije od
autorizacionog servera
, korišćen zajedno saclient_id
iclient_secret
od strane klijentske aplikacije za dobijanjepristupnog tokena
. - access_token: Token koji klijentska aplikacija koristi za API zahteve u ime
vlasnika resursa
. - refresh_token: Omogućava aplikaciji da dobije novi
pristupni token
bez ponovnog traženja od korisnika.
Tok
Stvarni OAuth tok odvija se na sledeći način:
- Idete na https://primer.com i izaberete dugme "Integriši sa društvenim mrežama".
- Sajt zatim šalje zahtev na https://društvenamreža.com tražeći vašu autorizaciju da dozvolite aplikaciji https://primer.com pristup vašim postovima. Zahtev je struktuiran kao:
https://socialmedia.com/auth
?response_type=code
&client_id=example_clientId
&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback
&scope=readPosts
&state=randomString123
-
Zatim vam se prikazuje stranica saglasnosti.
-
Nakon vašeg odobrenja, društveni medijum šalje odgovor na
redirect_uri
sa parametrimacode
istate
:
https://example.com?code=uniqueCode123&state=randomString123
- https://example.com koristi ovaj
code
, zajedno sa svojimclient_id
iclient_secret
, kako bi napravio serverski zahtev za dobijanjeaccess_token
u vaše ime, omogućavajući pristup dozvolama koje ste odobrili:
POST /oauth/access_token
Host: socialmedia.com
...{"client_id": "example_clientId", "client_secret": "example_clientSecret", "code": "uniqueCode123", "grant_type": "authorization_code"}
- Na kraju, proces se završava kada https://example.com koristi vaš
access_token
da bi napravio API poziv ka društvenim medijima kako bi pristupio
Ranjivosti
Otvoreni redirect_uri
redirect_uri
je ključan za sigurnost u OAuth i OpenID implementacijama, jer usmerava gde se šalju osetljivi podaci, poput autorizacionih kodova, nakon autorizacije. Ako nije ispravno konfigurisan, može omogućiti napadačima da preusmere ove zahteve ka zlonamernim serverima, omogućavajući preuzimanje naloga.
Tehnike eksploatacije variraju na osnovu logike validacije autorizacionog servera. Mogu se kretati od stroge provere putanje do prihvatanja bilo kog URL-a unutar određene domene ili poddirektorijuma. Česte metode eksploatacije uključuju otvorene redirekcije, prolazak kroz putanje, eksploataciju slabe regexe i HTML ubacivanje radi krađe tokena.
Pored redirect_uri
, i drugi OAuth i OpenID parametri poput client_uri
, policy_uri
, tos_uri
i initiate_login_uri
su podložni napadima preusmeravanja. Ovi parametri su opcioni i podrška za njih varira među serverima.
Za one koji ciljaju OpenID server, endpoint otkrića (**.well-known/openid-configuration**
) često navodi važne detalje konfiguracije poput registration_endpoint
, request_uri_parameter_supported
i "require_request_uri_registration
. Ovi detalji mogu pomoći u identifikaciji endpointa za registraciju i drugih specifičnosti konfiguracije servera.
XSS u implementaciji redirekcije
Kako je navedeno u ovom izveštaju o nagradama za otkrivanje grešaka https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html moguće je da se URL redirekcije odražava u odgovoru servera nakon što korisnik autentifikuje, što ga čini ranjivim na XSS. Mogući payload za testiranje:
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
CSRF - Nepravilno rukovanje stanjem parametra
U implementacijama OAuth-a, zloupotreba ili izostavljanje state
parametra može značajno povećati rizik od napada Cross-Site Request Forgery (CSRF). Ova ranjivost se javlja kada se state
parametar ili ne koristi, koristi kao statička vrednost ili nije pravilno validiran, omogućavajući napadačima da zaobiđu zaštitu od CSRF napada.
Napadači mogu iskoristiti ovo presretanjem procesa autorizacije kako bi povezali svoj nalog sa žrtvinim nalogom, što može dovesti do potencijalnog preuzimanja naloga. Ovo je posebno kritično u aplikacijama gde se OAuth koristi u svrhe autentikacije.
Primeri ove ranjivosti su dokumentovani u različitim CTF izazovima i platformama za hakovanje, ističući njene praktične implikacije. Problem se takođe proširuje na integracije sa uslugama trećih strana poput Slack, Stripe i PayPal, gde napadači mogu preusmeriti obaveštenja ili uplate na svoje naloge.
Pravilno rukovanje i validacija state
parametra su ključni za zaštitu od CSRF napada i obezbeđivanje sigurnosti OAuth protoka.
Pre Preuzimanja Naloga
-
Bez Verifikacije Emaila Prilikom Kreiranja Naloga: Napadači mogu preventivno kreirati nalog koristeći email žrtve. Ako žrtva kasnije koristi uslugu treće strane za prijavu, aplikacija može nenamerno povezati ovaj nalog treće strane sa prethodno kreiranim nalogom napadača, što dovodi do neovlašćenog pristupa.
-
Iskorišćavanje Blage Verifikacije Emaila u OAuth-u: Napadači mogu iskoristiti OAuth usluge koje ne verifikuju emaile registracijom na njihovoj usluzi, a zatim promeniti email naloga u email žrtve. Ovaj metod takođe nosi rizik neovlašćenog pristupa nalogu, slično kao u prvom scenariju, ali kroz drugi vektor napada.
Otkrivanje Tajni
Identifikacija i zaštita tajnih OAuth parametara su ključni. Dok se client_id
može bezbedno otkriti, otkrivanje client_secret
predstavlja značajne rizike. Ako je client_secret
kompromitovan, napadači mogu iskoristiti identitet i poverenje aplikacije da ukradu korisničke access_token
-e i privatne informacije.
Česta ranjivost se javlja kada aplikacije greškom rukuju razmenom autorizacionog koda
za access_token
na strani klijenta umesto na serverskoj strani. Ova greška dovodi do izlaganja client_secret
, omogućavajući napadačima da generišu access_token
-e pod maskom aplikacije. Osim toga, kroz socijalno inženjerstvo, napadači bi mogli da eskaliraju privilegije dodavanjem dodatnih opsega autorizacije u OAuth autorizaciju, dalje iskorišćavajući poveren statusa aplikacije.
Bruteforce Tajnog Klijenta
Možete pokušati bruteforce-ovati tajni_klijent pružaoca usluge sa identitet provajderom kako biste pokušali da ukradete naloge.
Zahtev za BF može izgledati slično:
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 otkriva kod + stanje
Kada klijent dobije kod i stanje, ako je reflektovan unutar Referer zaglavlja prilikom prelaska na drugu stranicu, onda je ranjiv.
Pristupni token sačuvan u istoriji pretraživača
Idite na istoriju pretraživača i proverite da li je pristupni token sačuvan tamo.
Večni autorizacioni kod
Autorizacioni kod bi trebao da živi samo neko vreme kako bi se ograničio prozor vremena u kojem napadač može da ga ukrade i koristi.
Autorizacioni/Osvježavajući token nije vezan za klijenta
Ako možete dobiti autorizacioni kod i koristiti ga sa drugim klijentom, onda možete preuzeti kontrolu nad drugim nalozima.
Srećni putovi, XSS, Iframe-ovi & Post poruke za otkrivanje koda & vrednosti stanja
AWS Cognito
U ovom izveštaju o otkrivanju grešaka: https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/ možete videti da token koji AWS Cognito vraća korisniku može imati dovoljno dozvola da prepiše korisničke podatke. Stoga, ako možete promeniti korisnički email za drugi korisnički email, možda ćete moći preuzeti druge naloge.
# 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"
}
]
}
Za više detalja o tome kako zloupotrebiti AWS Cognito proverite:
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum" %}
Zloupotreba tokena drugih aplikacija
Kao što je pomenuto u ovom tekstu, OAuth protoci koji očekuju da prime token (a ne kod) mogu biti ranjivi ako ne provere da li token pripada aplikaciji.
To je zato što bi napadač mogao kreirati aplikaciju koja podržava OAuth i prijaviti se putem Facebook-a (na primer) u svojoj sopstvenoj aplikaciji. Zatim, kada se žrtva prijavi putem Facebook-a u napadačevu aplikaciju, napadač bi mogao dobiti OAuth token korisnika dat njegovoj aplikaciji i koristiti ga za prijavu u OAuth aplikaciju žrtve koristeći token korisnika žrtve.
{% hint style="danger" %} Stoga, ako napadač uspe da natera korisnika da pristupi svojoj OAuth aplikaciji, biće u mogućnosti da preuzme kontrolu nad nalogom žrtve u aplikacijama koje očekuju token i ne proveravaju da li je token dodeljen njihovom app ID-u. {% endhint %}
Dva linka & kolačić
Prema ovom tekstu, bilo je moguće naterati žrtvu da otvori stranicu sa returnUrl koja vodi ka napadačevom hostu. Ove informacije bi bile sačuvane u kolačiću (RU) i u kasnijem koraku prompt će pitati korisnika da li želi da dozvoli pristup tom napadačevom hostu.
Da bi se zaobišao ovaj prompt, bilo je moguće otvoriti karticu kako bi se pokrenuo Oauth protokol koji bi postavio ovaj RU kolačić koristeći returnUrl, zatvoriti karticu pre nego što se pokaže prompt, i otvoriti novu karticu bez te vrednosti. Tada, prompt neće obavestiti o napadačevom hostu, ali će kolačić biti postavljen na njega, tako da će token biti poslat napadačevom hostu u preusmeravanju.
Parametri SSRF-a
Proverite ovaj istraživački rad za dalje detalje o ovoj tehnici.
Dinamička registracija klijenata u OAuth-u služi kao manje očigledan, ali ključan vektor za ranjivosti bezbednosti, posebno za Server-Side Request Forgery (SSRF) napade. Ovaj endpoint omogućava OAuth serverima da primaju detalje o klijentskim aplikacijama, uključujući osetljive URL-ove koji bi mogli biti iskorišćeni.
Ključne tačke:
- Dinamička registracija klijenata često je mapirana na
/register
i prihvata detalje poputclient_name
,client_secret
,redirect_uris
, i URL-ove za logoe ili JSON Web Key Sets (JWKs) putem POST zahteva. - Ova funkcionalnost se pridržava specifikacija navedenih u RFC7591 i OpenID Connect Registration 1.0, koje uključuju parametre koji su potencijalno ranjivi na SSRF.
- Proces registracije može nenamerno izložiti servere SSRF-u na nekoliko načina:
logo_uri
: URL za logo klijentske aplikacije koji može biti preuzet od strane servera, pokrećući SSRF ili dovodeći do XSS-a ako se URL nepravilno obradi.jwks_uri
: URL do JWK dokumenta klijenta, koji ako je zlonamerno oblikovan, može naterati server da vrši odlazne zahteve ka serveru pod kontrolom napadača.sector_identifier_uri
: Referenca na JSON nizredirect_uris
, koje server može preuzeti, stvarajući priliku za SSRF.request_uris
: Navodi dozvoljene URI-je zahteva za klijenta, koje mogu biti iskorišćene ako server preuzme ove URI-je na početku procesa autorizacije.
Strategija eksploatacije:
- SSRF može biti pokrenut registracijom novog klijenta sa zlonamernim URL-ovima u parametrima poput
logo_uri
,jwks_uri
, ilisector_identifier_uri
. - Iako direktna eksploatacija putem
request_uris
može biti umanjena kontrolama bele liste, obezbeđivanje prethodno registrovanog, napadačem kontrolisanogrequest_uri
-ja može olakšati SSRF tokom faze autorizacije.
Trke uslova pružalaca OAuth-a
Ako je platforma koju testirate pružalac OAuth-a pročitajte ovo da biste testirali moguće trke uslova.
Reference
- https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1
- https://portswigger.net/research/hidden-oauth-attack-vectors
{% embed url="https://websec.nl/" %}
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite svoju kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite PLANOVE ZA PRETPLATU!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.