Cognito User Pools
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
'n Gebruikerspoel is 'n gebruikersgids in Amazon Cognito. Met 'n gebruikerspoel kan jou gebruikers aanmeld by jou web of mobiele app deur Amazon Cognito, of federate deur 'n derdeparty identiteitsverskaffer (IdP). Of jou gebruikers direk aanmeld of deur 'n derdeparty, alle lede van die gebruikerspoel het 'n gidsprofiel wat jy deur 'n SDK kan toegang.
Gebruikerspoele bied:
Registrasie- en aanmelddienste.
'n Ingeboude, aanpasbare web UI om gebruikers aan te meld.
Sosiale aanmelding met Facebook, Google, Login with Amazon, en Sign in with Apple, en deur SAML en OIDC identiteitsverskaffers van jou gebruikerspoel.
Gebruikersgidsbestuur en gebruikersprofiele.
Sekuriteitskenmerke soos multi-faktor verifikasie (MFA), kontrole vir gecompromitteerde geloofsbriewe, rekening oorname beskerming, en telefoon- en e-posverifikasie.
Aangepaste werksvloeie en gebruikersmigrasie deur AWS Lambda triggers.
Bronkode van toepassings sal gewoonlik ook die gebruikerspoel ID en die klienttoepassing ID bevat, (en soms die toepassing geheim?) wat nodig is vir 'n gebruiker om aan te meld by 'n Cognito Gebruikerspoel.
Registrasie: Standaard kan 'n gebruiker homself registreer, so hy kan 'n gebruiker vir homself skep.
Gebruikersevaluasie: Die registrasiefunksie kan gebruik word om gebruikersname te vind wat reeds bestaan. Hierdie inligting kan nuttig wees vir die brute-force aanval.
Aanmeld brute-force: In die Authentisering afdeling het jy al die metodes wat 'n gebruiker het om aan te meld, jy kan probeer om hulle te brute-force geldige geloofsbriewe te vind.
Pacu, sluit nou die cognito__enum
en cognito__attack
modules in wat die evaluasie van alle Cognito bates in 'n rekening outomatiseer en swak konfigurasies, gebruikersattribuut wat vir toegangbeheer gebruik word, ens., merk, en outomatiseer ook gebruikersskepping (insluitend MFA-ondersteuning) en voorregverhoging gebaseer op aanpasbare aangepaste attribuut, bruikbare identiteitspoel geloofsbriewe, aanneembare rolle in id tokens, ens.
Vir 'n beskrywing van die modules se funksies, sien deel 2 van die blogpos. Vir installasie-instruksies, sien die hoof Pacu bladsy.
Cognito Scanner is 'n CLI-gereedskap in python wat verskillende aanvalle op Cognito implementeer, insluitend ongewenste rekening skep en rekening oracle. Kyk na hierdie skakel vir meer inligting.
CognitoAttributeEnum: Hierdie skrip maak dit moontlik om geldige eienskappe vir gebruikers te enumereer.
User Pools laat per standaard toe om nuwe gebruikers te registreer.
Jy mag 'n fout vind wat aandui dat jy meer besonderhede oor die gebruiker moet verskaf:
U kan die nodige besonderhede met 'n JSON soos:
U kan hierdie funksionaliteit ook gebruik om bestaande gebruikers te enumereer. Dit is die foutboodskap wanneer 'n gebruiker reeds met daardie naam bestaan:
Let op in die vorige opdrag hoe die aangepaste eienskappe begin met "custom:". Weet ook dat wanneer jy registreer jy nie nuwe aangepaste eienskappe vir die gebruiker kan skep nie. Jy kan net waarde gee aan standaard eienskappe (selfs al is hulle nie vereis nie) en aangepaste eienskappe wat gespesifiseer is.
Of net om te toets of 'n kliënt-id bestaan. Dit is die fout as die kliënt-id nie bestaan nie:
Jy sal hierdie fout vind en jy sal nie in staat wees om gebruikers te registreer of te enumereer nie:
Cognito laat toe om 'n nuwe gebruiker te verifieer deur sy e-pos of telefoonnommer te verifieer. Daarom, wanneer jy 'n gebruiker skep, sal jy gewoonlik ten minste die gebruikersnaam en wagwoord en die e-pos en/of telefoonnommer benodig. Stel net een wat jy beheer sodat jy die kode sal ontvang om jou nuut geskepte gebruiker rekening te verifieer soos volg:
Selfs al lyk dit of jy dieselfde e-pos en telefoonnommer kan gebruik, wanneer jy die geskepte gebruiker moet verifieer, sal Cognito kla oor die gebruik van dieselfde inligting en sal nie toelaat dat jy die rekening verifieer nie.
Deur standaard kan 'n gebruiker die waarde van sy eienskappe verander met iets soos:
Jy mag aangepaste attribuute vind wat gebruik word (soos isAdmin
), aangesien jy standaard die waardes van jou eie attribuute kan verander, mag jy in staat wees om privileges te eskaleer deur die waarde self te verander!
Jy kan dit gebruik om die e-pos en telefoonnommer van 'n gebruiker te wysig, maar dan, selfs al bly die rekening as geverifieer, is daardie attribuute in 'n ongeverifieerde status (jy moet hulle weer verifieer).
Jy sal nie in staat wees om in te log met e-pos of telefoonnommer totdat jy hulle verifieer nie, maar jy sal in staat wees om in te log met die gebruikersnaam.
Let daarop dat selfs al is die e-pos gewysig en nie geverifieer nie, dit sal verskyn in die ID Token binne die email
veld en die veld email_verified
sal vals wees, maar as die app nie nagaan nie, mag jy ander gebruikers naboots.
Boonop, let daarop dat jy enigiets in die name
veld kan plaas deur net die naam attribuut te wysig. As 'n app daardie veld om een of ander rede nagaan in plaas van die email
(of enige ander attribuut) mag jy in staat wees om ander gebruikers te naboots.
In elk geval, as jy om een of ander rede jou e-pos verander het, byvoorbeeld na 'n nuwe een wat jy kan toegang, kan jy die e-pos bevestig met die kode wat jy in daardie e-posadres ontvang het:
Gebruik phone_number
in plaas van email
om 'n nuwe telefoonnommer te verander/te verifieer.
Die admin kan ook die opsie aktiver om in te log met 'n gebruiker se verkose gebruikersnaam. Let daarop dat jy nie hierdie waarde kan verander na enige gebruikersnaam of verkose_gebruikersnaam wat reeds gebruik word om 'n ander gebruiker na te doen nie.
Dit is moontlik om 'n wagwoord te herstel net deur die gebruikersnaam te ken (of e-pos of telefoon word aanvaar) en toegang daartoe te hê, aangesien 'n kode daarheen gestuur sal word:
Die antwoord van die bediener gaan altyd positief wees, soos as die gebruikersnaam bestaan. Jy kan nie hierdie metode gebruik om gebruikers te enumereer nie.
Met die kode kan jy die wagwoord verander met:
Om die wagwoord te verander, moet jy die vorige wagwoord weet:
'n gebruiker poel ondersteun verskillende maniere om te autentiseer. As jy 'n gebruikersnaam en wagwoord het, is daar ook verskillende metodes wat ondersteun word om in te log. Boonop, wanneer 'n gebruiker in die Poel 3 tipes tokens gegee word: Die ID Token, die Toegangstoken en die Herlaa token.
ID Token: Dit bevat aansprake oor die identiteit van die geverifieerde gebruiker, soos naam
, e-pos
, en telefoonnommer
. Die ID-token kan ook gebruik word om gebruikers te autentiseer op jou hulpbronne bedieners of bediener toepassings. Jy moet die handtekening van die ID-token verifieer voordat jy enige aansprake binne die ID-token kan vertrou as jy dit in eksterne toepassings gebruik.
Die ID Token is die token wat die attribuutwaardes van die gebruiker bevat, selfs die pasgemaakte.
Toegangstoken: Dit bevat aansprake oor die geverifieerde gebruiker, 'n lys van die gebruiker se groepe, en 'n lys van skope. Die doel van die toegangstoken is om API operasies te autoriseer in die konteks van die gebruiker in die gebruiker poel. Byvoorbeeld, jy kan die toegangstoken gebruik om jou gebruiker toegang te gee om gebruiker attribuut te voeg, te verander of te verwyder.
Herlaa token: Met herlaa tokens kan jy nuwe ID Tokens en Toegangstokens kry vir die gebruiker totdat die herlaa token ongeldig is. Deur standaard, verval die herlaa token 30 dae na jou toepassingsgebruiker in jou gebruiker poel aanmeld. Wanneer jy 'n toepassing vir jou gebruiker poel skep, kan jy die toepassings herlaa token vervaldatum op enige waarde tussen 60 minute en 10 jaar stel.
Dit is die bediener kant autentisering vloei:
Die bediener-kant toepassing roep die AdminInitiateAuth
API operasie aan (in plaas van InitiateAuth
). Hierdie operasie vereis AWS akrediteer met toestemmings wat cognito-idp:AdminInitiateAuth
en cognito-idp:AdminRespondToAuthChallenge
insluit. Die operasie gee die vereiste autentisering parameters terug.
Nadat die bediener-kant toepassing die autentisering parameters het, roep dit die AdminRespondToAuthChallenge
API operasie aan. Die AdminRespondToAuthChallenge
API operasie slaag slegs wanneer jy AWS akrediteer verskaf.
Hierdie metode is NIE geaktiveer deur standaard nie.
Om te log in moet jy weet:
gebruiker poel id
kliënt id
gebruikersnaam
wagwoord
kliënt geheim (slegs as die toepassing geconfigureer is om 'n geheim te gebruik)
Om in te log met hierdie metode moet daardie toepassing toelaat om in te log met ALLOW_ADMIN_USER_PASSWORD_AUTH
.
Boonop, om hierdie aksie uit te voer, het jy akrediteer met die toestemmings cognito-idp:AdminInitiateAuth
en cognito-idp:AdminRespondToAuthChallenge