AWS - Cognito Privesc
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)
Vir meer inligting oor Cognito kyk:
Aangesien Cognito IAM rol geloofsbriewe aan beide geverifieerde en ongeverifieerde gebruikers kan toeken, as jy die Identiteitspoel ID van 'n toepassing vind (dit behoort hardgecodeer te wees), kan jy nuwe geloofsbriewe verkry en dus privesc (binne 'n AWS-rekening waar jy waarskynlik glad nie enige geloofsbriewe gehad het nie).
Vir meer inligting kyk hierdie bladsy.
Potensiële Impak: Direkte privesc na die dienste rol wat aan ongeverifieerde gebruikers geheg is (en waarskynlik na die een wat aan geverifieerde gebruikers geheg is).
cognito-identity:SetIdentityPoolRoles
, iam:PassRole
Met hierdie toestemming kan jy enige cognito rol aan die geverifieerde/ongeverifieerde gebruikers van die cognito toepassing toeken.
As die cognito-app nie nie-geverifieerde gebruikers geaktiveer het nie, mag jy ook die toestemming cognito-identity:UpdateIdentityPool
nodig hê om dit te aktiveer.
Potensiële Impak: Direkte privesc na enige cognito-rol.
cognito-identity:update-identity-pool
'n Aanvaller met hierdie toestemming kan byvoorbeeld 'n Cognito User Pool onder sy beheer stel of enige ander identiteitsverskaffer waar hy kan aanmeld as 'n manier om toegang te verkry tot hierdie Cognito Identity Pool. Dan, net aanmeld op daardie gebruikersverskaffer sal hom toelaat om toegang te verkry tot die geconfigureerde geverifieerde rol in die Identity Pool.
Dit is ook moontlik om hierdie toestemming te misbruik om basiese outentisering toe te laat:
Potensiële Impak: Kompromitteer die geconfigureerde geverifieerde IAM-rol binne die identiteitspoel.
cognito-idp:AdminAddUserToGroup
Hierdie toestemming laat toe om 'n Cognito-gebruiker aan 'n Cognito-groep toe te voeg, daarom kan 'n aanvaller hierdie toestemming misbruik om 'n gebruiker onder sy beheer aan ander groepe met beter bevoegdhede of verskillende IAM-rolle toe te voeg:
Potensiële Impak: Privesc na ander Cognito groepe en IAM rolle wat aan Gebruiker Pool Groepe gekoppel is.
cognito-idp:CreateGroup
| cognito-idp:UpdateGroup
), iam:PassRole
'n Aanvaller met hierdie toestemmings kan groepe skep/opdateer met elke IAM rol wat deur 'n gecompromitteerde Cognito Identiteitsverskaffer gebruik kan word en 'n gecompromitteerde gebruiker deel van die groep maak, wat toegang tot al daardie rolle verkry:
Potensiële Impak: Privesc na ander Cognito IAM rolle.
cognito-idp:AdminConfirmSignUp
Hierdie toestemming laat toe om 'n aanmelding te verifieer. Standaard kan enigiemand in Cognito toepassings aanmeld, as dit gelaat word, kan 'n gebruiker 'n rekening met enige data skep en dit met hierdie toestemming verifieer.
Potensiële Impak: Indirekte privesc na die identiteitspoel IAM rol vir geverifieerde gebruikers as jy 'n nuwe gebruiker kan registreer. Indirekte privesc na ander app funksies deur enige rekening te kan bevestig.
cognito-idp:AdminCreateUser
Hierdie toestemming sal 'n aanvaller toelaat om 'n nuwe gebruiker binne die gebruikerspoel te skep. Die nuwe gebruiker word as geaktiveerd geskep, maar sal sy wagwoord moet verander.
Potensiële Impak: Direkte privesc na die identiteitspoel IAM rol vir geverifieerde gebruikers. Indirekte privesc na ander app funksies wat in staat is om enige gebruiker te skep.
cognito-idp:AdminEnableUser
Hierdie toestemmings kan help in 'n baie randgeval waar 'n aanvaller die akrediteer van 'n gedeaktiveerde gebruiker gevind het en hy dit moet weer aktiveer.
Potensiële Impak: Indirekte privesc na die identiteitspoel IAM-rol vir geverifieerde gebruikers en toestemmings van die gebruiker as die aanvaller kredensiale vir 'n gedeaktiveerde gebruiker gehad het.
cognito-idp:AdminInitiateAuth
, cognito-idp:AdminRespondToAuthChallenge
Hierdie toestemming laat toe om aan te meld met die metode ADMIN_USER_PASSWORD_AUTH. Vir meer inligting volg die skakel.
cognito-idp:AdminSetUserPassword
Hierdie toestemming sou 'n aanvaller in staat stel om die wagwoord van enige gebruiker te verander, wat hom in staat stel om as enige gebruiker op te tree (wat nie MFA geaktiveer het nie).
Potensiële Impak: Direkte privesc na potensieel enige gebruiker, sodat toegang tot al die groepe waartoe elke gebruiker behoort en toegang tot die Identiteitspoel geverifieerde IAM-rol.
cognito-idp:AdminSetUserSettings
| cognito-idp:SetUserMFAPreference
| cognito-idp:SetUserPoolMfaConfig
| cognito-idp:UpdateUserPool
AdminSetUserSettings: 'n Aanvaller kan moontlik hierdie toestemming misbruik om 'n mobiele telefoon onder sy beheer as SMS MFA van 'n gebruiker in te stel.
SetUserMFAPreference: Soortgelyk aan die vorige een, kan hierdie toestemming gebruik word om MFA voorkeure van 'n gebruiker in te stel om die MFA-beskerming te omseil.
SetUserPoolMfaConfig: Soortgelyk aan die vorige een kan hierdie toestemming gebruik word om MFA-voorkeure van 'n gebruikerspoel in te stel om die MFA-beskerming te omseil.
UpdateUserPool: Dit is ook moontlik om die gebruikerspoel op te dateer om die MFA-beleid te verander. Kontroleer cli hier.
Potential Impact: Indirekte privesc na potensieel enige gebruiker waarvan die aanvaller die geloofsbriewe ken, dit kan toelaat om die MFA-beskerming te omseil.
cognito-idp:AdminUpdateUserAttributes
'n Aanvaller met hierdie toestemming kan die e-pos of telefoonnommer of enige ander attribuut van 'n gebruiker onder sy beheer verander om te probeer om meer voorregte in 'n onderliggende toepassing te verkry. Dit maak dit moontlik om 'n e-pos of telefoonnommer te verander en dit as geverifieer in te stel.
Potensiële Impak: Potensiële indirekte privesc in die onderliggende toepassing wat Cognito User Pool gebruik wat voorregte gee gebaseer op gebruikersattributen.
cognito-idp:CreateUserPoolClient
| cognito-idp:UpdateUserPoolClient
'n Aanvaller met hierdie toestemming kan 'n nuwe User Pool Client minder beperk as reeds bestaande pool kliënte skep. Byvoorbeeld, die nuwe kliënt kan enige soort metode toelaat om te autentiseer, geen geheim hê nie, token intrekking gedeaktiveer hê, tokens toelaat om vir 'n langer tydperk geldig te wees...
Diezelfde kan gedoen word as daar in plaas van om 'n nuwe kliënt te skep, 'n bestaande een gewysig word.
In die opdraglyn (of die opdateer een) kan jy al die opsies sien, kyk daarna!
Potensiële Impak: Potensiële indirekte privesc na die Identiteitspoel gemagtigde gebruiker wat deur die Gebruikerspoel gebruik word deur 'n nuwe kliënt te skep wat die sekuriteitsmaatreëls verslap en dit moontlik maak vir 'n aanvaller om in te log met 'n gebruiker wat hy kon skep.
cognito-idp:CreateUserImportJob
| cognito-idp:StartUserImportJob
'n Aanvaller kan hierdie toestemming misbruik om gebruikers te skep deur 'n csv met nuwe gebruikers op te laai.
(In die geval waar jy 'n nuwe invoer werk skep, mag jy ook die iam passrole toestemming nodig hê, ek het dit nog nie getoets nie).
Potensiële Impak: Direkte privesc na die identiteit poel IAM rol vir geverifieerde gebruikers. Indirekte privesc na ander app funksies wat in staat is om enige gebruiker te skep.
cognito-idp:CreateIdentityProvider
| cognito-idp:UpdateIdentityProvider
'n Aanvaller kan 'n nuwe identiteitsverskaffer skep om dan in staat te wees om deur hierdie verskaffer aan te meld.
Potensiële Impak: Direkte privesc na die identiteitspoel IAM-rol vir geverifieerde gebruikers. Indirekte privesc na ander app-funksies wat in staat is om enige gebruiker te skep.
Dit is 'n baie algemene toestemming per standaard in rolle van Cognito Identiteitspoele. Alhoewel 'n wildcard in 'n toestemmings altyd sleg lyk (veral afkomstig van AWS), is die gegewe toestemmings nie baie nuttig vanuit 'n aanvaller se perspektief nie.
Hierdie toestemming laat toe om gebruikersinligting van Identiteitspoele en Identiteits-ID's binne Identiteitspoele te lees (wat nie sensitiewe inligting is nie). Identiteits-ID's kan Datasette toegeken word, wat inligting van die sessies is (AWS definieer dit as 'n gespeelde speletjie). Dit mag moontlik wees dat dit 'n soort sensitiewe inligting bevat (maar die waarskynlikheid is redelik laag). Jy kan in die enumerasiepunt vind hoe om toegang tot hierdie inligting te verkry.
'n Aanvaller kan ook hierdie toestemmings gebruik om homself in te skryf op 'n Cognito-stroom wat veranderinge publiseer op hierdie datastelle of 'n lambda wat geaktiveer word op cognito-gebeurtenisse. Ek het nie gesien dat dit gebruik word nie, en ek sou nie sensitiewe inligting hier verwag nie, maar dit is nie onmoontlik nie.
Pacu, die AWS-uitbuitingsraamwerk, sluit nou die "cognito__enum" en "cognito__attack" modules in wat die enumerasie van alle Cognito-bates in 'n rekening outomatiseer en swak konfigurasies, gebruikersattributen wat vir toegangbeheer gebruik word, ens., merk, en ook die skepping van gebruikers outomatiseer (insluitend MFA-ondersteuning) en privilige-eskalasie gebaseer op aanpasbare aangepaste attributen, bruikbare identiteitspoel akkrediteer, 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.
Voorbeeld van cognito__attack gebruik om te probeer om 'n gebruiker te skep en alle privesc vektore teen 'n gegewe identiteitspoel en gebruikerspoel kliënt:
Voorbeeld cognito__enum gebruik om al die gebruikerspoele, gebruikerspoel kliënte, identiteitspoele, gebruikers, ens. wat sigbaar is in die huidige AWS-rekening, te versamel:
Cognito Scanner is 'n CLI-gereedskap in python wat verskillende aanvalle op Cognito implementeer, insluitend 'n privesc-escalasie.
Vir meer inligting, kyk na https://github.com/padok-team/cognito-scanner
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)