AWS - Lambda Privesc
lambda
Maelezo zaidi kuhusu lambda katika:
pageAWS - Lambda Enumiam:PassRole
, lambda:CreateFunction
, (lambda:InvokeFunction
| lambda:InvokeFunctionUrl
)
iam:PassRole
, lambda:CreateFunction
, (lambda:InvokeFunction
| lambda:InvokeFunctionUrl
)Watumiaji wenye ruhusa za iam:PassRole
, lambda:CreateFunction
, na lambda:InvokeFunction
wanaweza kuongeza mamlaka yao.
Wanaweza kuunda kazi mpya ya Lambda na kuipa jukumu la IAM lililopo, ikiruhusu kazi kupata ruhusa zinazohusiana na jukumu hilo. Mtumiaji kisha anaweza kuandika na kupakia nambari kwenye kazi hii ya Lambda (kwa mfano, na rev shell).
Baada ya kazi kuwekwa, mtumiaji anaweza kuchochea utekelezaji wake na hatua zilizokusudiwa kwa kuita kazi ya Lambda kupitia API ya AWS. Mbinu hii inamruhusu mtumiaji kutekeleza kazi kwa njia isiyo ya moja kwa moja kupitia kazi ya Lambda, ikifanya kazi na kiwango cha ufikiaji kilichoidhinishwa na jukumu la IAM linalohusishwa nayo.\
Mshambuliaji anaweza kutumia hii kupata rev shell na kuiba token:
Unaweza pia kutumia vibaya ruhusa za jukumu la lambda kutoka kwa kazi ya lambda yenyewe. Ikiwa jukumu la lambda lilikuwa na ruhusa za kutosha unaweza kuitumia kupeana haki za msimamizi kwako:
Pia niwezekana kuvuja kwa siri za jukumu la lambda bila kuhitaji uhusiano wa nje. Hii ingekuwa muhimu kwa Lambdas zilizotengwa kimtandao zinazotumika kwenye kazi za ndani. Ikiwa kuna vikundi vya usalama visivyojulikana vinavyofilta mabakuli yako ya kurudi, kipande hiki cha nambari kitakuruhusu kuvuja moja kwa moja siri kama matokeo ya lambda.
Athari Inayowezekana: Privesc moja kwa moja kwa jukumu la huduma ya lambda ya kiholela iliyotajwa.
Tafadhali kumbuka hata kama inaweza kuonekana kuwa ya kuvutia lambda:InvokeAsync
haidhinishi peke yake kutekeleza aws lambda invoke-async
, unahitaji pia lambda:InvokeFunction
iam:PassRole
, lambda:CreateFunction
, lambda:AddPermission
iam:PassRole
, lambda:CreateFunction
, lambda:AddPermission
Kama ilivyokuwa kwenye kisa kilichopita, unaweza kujipatia ruhusa ya lambda:InvokeFunction
ikiwa una ruhusa ya lambda:AddPermission
Athari Inayowezekana: Privesc moja kwa moja kwa jukumu la huduma ya lambda lililoelezwa.
iam:PassRole
, lambda:CreateFunction
, lambda:CreateEventSourceMapping
iam:PassRole
, lambda:CreateFunction
, lambda:CreateEventSourceMapping
Watumiaji wenye ruhusa za iam:PassRole
, lambda:CreateFunction
, na lambda:CreateEventSourceMapping
(na labda dynamodb:PutItem
na dynamodb:CreateTable
) wanaweza kuinua bila kukusudia mamlaka hata bila lambda:InvokeFunction
.
Wanaweza kuunda kazi ya Lambda na nambari yenye nia mbaya na kuipa jukumu la IAM lililopo.
Badala ya kuita moja kwa moja Lambda, mtumiaji anaweza kuweka au kutumia meza ya DynamoDB iliyopo, kuilinganisha na Lambda kupitia uwekaji wa chanzo cha tukio. Hii inahakikisha kazi ya Lambda ina kuzinduliwa moja kwa moja wakati wa kuingia kwa kipengee kipya kwenye meza, au kwa hatua ya mtumiaji au mchakato mwingine, hivyo kwa njia isiyo ya moja kwa moja kuita kazi ya Lambda na kutekeleza nambari kwa ruhusa za jukumu la IAM lililopitishwa.
Ikiwa DynamoDB tayari iko hai katika mazingira ya AWS, mtumiaji anahitaji tu kuweka ramani ya chanzo cha tukio kwa kazi ya Lambda. Walakini, ikiwa DynamoDB haipo, mtumiaji lazima aunde meza mpya na uwezeshaji wa utiririshaji:
Sasa ni wezekano wa kuunganisha kazi ya Lambda kwenye meza ya DynamoDB kwa kuunda ramani ya chanzo cha tukio:
Kwa kazi ya Lambda iliyounganishwa na mtiririko wa DynamoDB, mkaidi anaweza kuchochea Lambda kwa njia isiyo ya moja kwa moja kwa kuanzisha mtiririko wa DynamoDB. Hii inaweza kufanikishwa kwa kuingiza kipengee kwenye meza ya DynamoDB:
Athari Inayoweza Kutokea: Privesc moja kwa moja kwa jukumu la huduma ya lambda lililoelezwa.
lambda:AddPermission
lambda:AddPermission
Mshambuliaji mwenye idhini hii anaweza kujipatia yeye mwenyewe (au wengine) idhini yoyote (hii inazalisha sera za msingi wa rasilimali kutoa ufikiaji kwa rasilimali):
Athari Inayowezekana: Privesc moja kwa moja kwa jukumu la huduma ya lambda kwa kutoa ruhusa ya kurekebisha namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya namna ya
Athari Inayowezekana: Upatikanaji wa habari nyeti.
lambda:UpdateFunctionCode
lambda:UpdateFunctionCode
Watumiaji wenye ruhusa ya lambda:UpdateFunctionCode
wana uwezo wa kurekebisha nambari ya kazi ya Lambda iliyopo ambayo imeunganishwa na jukumu la IAM.
Mshambuliaji anaweza kurekebisha nambari ya lambda ili kuchukua siri za IAM.
Ingawa mshambuliaji anaweza asiwe na uwezo wa moja kwa moja kuita kazi, ikiwa kazi ya Lambda ipo na inafanya kazi, ni uwezekano kwamba itaanzishwa kupitia mchakato au matukio yaliyopo, hivyo kufanikisha utekelezaji wa nambari iliyorekebishwa.
Athari Inayowezekana: Privesc moja kwa moja kwa jukumu la huduma ya lambda lililotumiwa.
lambda:UpdateFunctionConfiguration
lambda:UpdateFunctionConfiguration
Utangulizi
Lambda Layers inaruhusu kuingiza mimbo katika kazi yako ya lamdba lakini kuuhifadhi kando, hivyo mizizi ya kazi inaweza kubaki ndogo na kazi kadhaa zinaweza kushiriki mizizi.
Ndani ya lambda unaweza kuangalia njia ambazo mizizi ya python inapakia na kazi kama ifuatavyo:
Hizi ni sehemu:
/var/task
/opt/python/lib/python3.7/site-packages
/opt/python
/var/runtime
/var/lang/lib/python37.zip
/var/lang/lib/python3.7
/var/lang/lib/python3.7/lib-dynload
/var/lang/lib/python3.7/site-packages
/opt/python/lib/python3.7/site-packages
/opt/python
Kwa mfano, maktaba ya boto3 inapakiwa kutoka /var/runtime/boto3
(nafasi ya 4).
Utekaji
Inawezekana kutumia ruhusa ya lambda:UpdateFunctionConfiguration
kuongeza tabaka jipya kwa kazi ya lambda. Ili kutekeleza nambari ya kupendelea, tabaka hili lazima liwe na maktaba ambayo lambda itaagiza. Ikiwa unaweza kusoma nambari ya lambda, unaweza kupata hii kwa urahisi, pia kumbuka kwamba inawezekana kwamba lambda tayari inatumia tabaka na unaweza kupakua tabaka na kuongeza nambari yako humo.
Kwa mfano, fikiria kwamba lambda inatumia maktaba ya boto3, hii itaunda tabaka ya ndani na toleo la mwisho la maktaba:
Unaweza kufungua ./lambda_layer/boto3/__init__.py
na kuongeza mlango wa nyuma katika msimbo wa kimataifa (kazi ya kutoa siri au kupata kabati la nyuma kwa mfano).
Kisha, zip hiyo ./lambda_layer
directory na kuiweka lambda mpya katika akaunti yako mwenyewe (au katika ya waathiriwa, lakini huenda usiwe na ruhusa kufanya hivyo).
Tambua kwamba unahitaji kuunda folda ya python na kuweka maktaba humo ili kubadilisha /opt/python/boto3. Pia, safu inahitaji kuwa na uwezo wa toleo la python linalotumiwa na lambda na ikiwa utaiweka kwenye akaunti yako, inahitaji kuwa katika eneo sawa:
Sasa, fanya safu ya lambda iliyopakiwa iwe inayopatikana na akaunti yoyote:
Na ambatisha safu ya lambda kwa kazi ya lambda ya mwathirika:
Hatua inayofuata itakuwa au kuamsha kazi wenyewe ikiwa tunaweza au kusubiri mpaka iitwe kwa njia za kawaida - ambayo ni njia salama zaidi.
Njia ya kisiri zaidi ya kutumia udhaifu huu inaweza kupatikana katika:
pageAWS - Lambda Layers PersistenceMatokeo Yanayowezekana: Privesc moja kwa moja kwa jukumu la huduma ya lambda inayotumiwa.
?iam:PassRole
, lambda:CreateFunction
, lambda:CreateFunctionUrlConfig
, lambda:InvokeFunctionUrl
?iam:PassRole
, lambda:CreateFunction
, lambda:CreateFunctionUrlConfig
, lambda:InvokeFunctionUrl
Labda na ruhusa hizo unaweza kuunda kazi na kuitekeleza ikiiita URL... lakini sikuweza kupata njia ya kuita, hivyo niambie kama utaweza!
Lambda MitM
Baadhi ya lambdas zitakuwa zinapokea habari nyeti kutoka kwa watumiaji kwa njia ya vigezo. Ikiwa unapata RCE katika moja wapo, unaweza kuchota habari ambayo watumiaji wengine wanaituma, angalia hii:
pageAWS - Steal Lambda RequestsMarejeo
Last updated