AWS - Lambda Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Maelezo zaidi kuhusu lambda katika:
AWS - Lambda Enumiam:PassRole
, lambda:CreateFunction
, (lambda:InvokeFunction
| lambda:InvokeFunctionUrl
)Watumiaji wenye ruhusa iam:PassRole
, lambda:CreateFunction
, na lambda:InvokeFunction
wanaweza kuongeza mamlaka yao.
Wanaweza kuunda kazi mpya ya Lambda na kuipatia jukumu la IAM lililopo, wakitoa kazi hiyo ruhusa zinazohusiana na jukumu hilo. Mtumiaji anaweza kisha kuandika na kupakia msimbo kwenye kazi hii ya Lambda (kwa mfano, na rev shell).
Mara kazi hiyo inapowekwa, mtumiaji anaweza kuanzisha utekelezaji wake na vitendo vilivyokusudiwa kwa kuitisha kazi ya Lambda kupitia API ya AWS. Njia hii inaruhusu mtumiaji kufanya kazi kwa njia isiyo ya moja kwa moja kupitia kazi ya Lambda, ikifanya kazi kwa kiwango cha ufikiaji kilichotolewa kwa jukumu la IAM lililohusishwa nacho.\
Mshambuliaji anaweza kutumia hii kupata rev shell na kuiba token:
You could also abuse the lambda role permissions from the lambda function itself. If the lambda role had enough permissions you could use it to grant admin rights to you:
Ni pia inawezekana kuvuja akreditivu za jukumu la lambda bila kuhitaji muunganisho wa nje. Hii itakuwa na manufaa kwa Network isolated Lambdas zinazotumika kwenye kazi za ndani. Ikiwa kuna vikundi vya usalama visivyojulikana vinavyosafisha shell zako za kurudi, kipande hiki cha msimbo kitakuruhusu kuvuja moja kwa moja akreditivu kama matokeo ya lambda.
Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa jukumu la huduma ya lambda lililobainishwa.
Kumbuka kwamba hata kama inaweza kuonekana kuvutia lambda:InvokeAsync
haikubali peke yake kufanya aws lambda invoke-async
, unahitaji pia lambda:InvokeFunction
iam:PassRole
, lambda:CreateFunction
, lambda:AddPermission
Kama katika hali ya awali, unaweza kujipe ruhusa ya lambda:InvokeFunction
ikiwa una ruhusa lambda:AddPermission
Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa jukumu la huduma ya lambda lililobainishwa.
iam:PassRole
, lambda:CreateFunction
, lambda:CreateEventSourceMapping
Watumiaji wenye ruhusa iam:PassRole
, lambda:CreateFunction
, na lambda:CreateEventSourceMapping
(na labda dynamodb:PutItem
na dynamodb:CreateTable
) wanaweza kwa njia isiyo ya moja kwa moja kuinua mamlaka hata bila lambda:InvokeFunction
.
Wanaweza kuunda kazi ya Lambda yenye msimbo mbaya na kuipatia jukumu la IAM lililopo.
Badala ya kuitisha moja kwa moja Lambda, mtumiaji anajiandaa au anatumia meza ya DynamoDB iliyopo, akiunganisha nayo Lambda kupitia ramani ya chanzo cha tukio. Mpangilio huu unahakikisha kazi ya Lambda inachochewa kiotomatiki wakati kipengele kipya kinapoingia kwenye meza, ama kwa kitendo cha mtumiaji au mchakato mwingine, hivyo basi kuitisha kazi ya Lambda kwa njia isiyo ya moja kwa moja na kutekeleza msimbo kwa ruhusa za jukumu la IAM lililopitishwa.
Ikiwa DynamoDB tayari iko hai katika mazingira ya AWS, mtumiaji tu anahitaji kuanzisha ramani ya chanzo cha tukio kwa kazi ya Lambda. Hata hivyo, ikiwa DynamoDB haitumiki, mtumiaji lazima aweze kuunda meza mpya yenye utiririshaji ulioanzishwa:
Sasa inawezekana kuunganisha kazi ya Lambda na jedwali la DynamoDB kwa kuunda ramani ya chanzo cha tukio:
Na kazi ya Lambda iliyounganishwa na mtiririko wa DynamoDB, mshambuliaji anaweza kuchochea Lambda kwa njia isiyo ya moja kwa moja kwa kuamsha mtiririko wa DynamoDB. Hii inaweza kufanywa kwa kuingiza kipengee kwenye jedwali la DynamoDB:
Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa jukumu la huduma ya lambda lililotajwa.
lambda:AddPermission
Mshambuliaji mwenye ruhusa hii anaweza kujipe (au wengine) ruhusa zozote (hii inazalisha sera za msingi wa rasilimali kutoa ufikiaji wa rasilimali):
Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa jukumu la huduma ya lambda inayotumika kwa kutoa ruhusa ya kubadilisha msimbo na kuutekeleza.
lambda:AddLayerVersionPermission
Mshambuliaji mwenye ruhusa hii anaweza kujipe mwenyewe (au wengine) ruhusa lambda:GetLayerVersion
. Anaweza kufikia safu na kutafuta udhaifu au taarifa nyeti.
Madhara Yanayoweza Kutokea: Upatikanaji wa taarifa nyeti.
lambda:UpdateFunctionCode
Watumiaji wanaoshikilia ruhusa ya lambda:UpdateFunctionCode
wana uwezo wa kubadilisha msimbo wa kazi ya Lambda iliyopo ambayo imeunganishwa na jukumu la IAM.
Mshambuliaji anaweza kubadilisha msimbo wa lambda ili kuhamasisha akreditivu za IAM.
Ingawa mshambuliaji huenda hana uwezo wa moja kwa moja wa kuitisha kazi hiyo, ikiwa kazi ya Lambda tayari ipo na inafanya kazi, kuna uwezekano itasababisha kupitia mifumo au matukio yaliyopo, hivyo kusaidia kwa njia isiyo ya moja kwa moja utekelezaji wa msimbo uliobadilishwa.
Madhara Yanayoweza Kutokea: Privesc moja kwa moja kwa jukumu la huduma ya lambda inayotumika.
lambda:UpdateFunctionConfiguration
Kwa ruhusa hizi inawezekana kuongeza mabadiliko ya mazingira ambayo yatapelekea Lambda kutekeleza msimbo usio na mipaka. Kwa mfano, katika python inawezekana kutumia mabadiliko ya mazingira PYTHONWARNING
na BROWSER
kufanya mchakato wa python kutekeleza amri zisizo na mipaka:
Kwa lugha nyingine za skripti kuna mazingira mengine ya mabadiliko unaweza kutumia. Kwa maelezo zaidi angalia sehemu ndogo za lugha za skripti katika:
Lambda Layers inaruhusu kujumuisha code katika kazi yako ya lamdba lakini kuhifadhi kwa tofauti, hivyo msimbo wa kazi unaweza kubaki mdogo na kazi kadhaa zinaweza kushiriki msimbo.
Ndani ya lambda unaweza kuangalia njia ambazo msimbo wa python unaloadiwa kwa kutumia kazi kama ifuatayo:
Hizi ndizo 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 boto3 inapakuliwa kutoka /var/runtime/boto3
(nafasi ya 4).
Inawezekana kutumia ruhusa lambda:UpdateFunctionConfiguration
ili kuongeza safu mpya kwa kazi ya lambda. Ili kutekeleza msimbo wowote, safu hii inahitaji kuwa na maktaba ambayo lambda itakuwa inaiagiza. Ikiwa unaweza kusoma msimbo wa lambda, unaweza kuipata hii kwa urahisi, pia kumbuka kwamba inaweza kuwa inawezekana kwamba lambda tayari inatumia safu na unaweza kupakua safu hiyo na kuongeza msimbo wako humo.
Kwa mfano, hebu tuwe na dhana kwamba lambda inatumia maktaba boto3, hii itaunda safu ya ndani na toleo la mwisho la maktaba:
You can open ./lambda_layer/boto3/__init__.py
and ongeza backdoor katika msimbo wa kimataifa (kazi ya kutoa taarifa za kuingia au kupata shell ya kurudi kwa mfano).
Then, zip that ./lambda_layer
directory and pakia tabaka jipya la lambda katika akaunti yako (au katika ya waathirika, lakini huenda usiwe na ruhusa kwa hili).
Note that you need to create a python folder and put the libraries in there to override /opt/python/boto3. Also, the layer needs to be sawa na toleo la python linalotumika na lambda na ikiwa unalipakia kwenye akaunti yako, inahitaji kuwa katika eneo sawa:
Sasa, fanya tabaka la lambda lililopakiwa lipatikane na akaunti yoyote:
Na uambatishe safu ya lambda kwenye kazi ya lambda ya mwathiriwa:
The next step would be to either invoke the function ourselves if we can or to wait until it gets invoked by normal means–which is the safer method.
A more stealth way to exploit this vulnerability can be found in:
AWS - Lambda Layers PersistencePotential Impact: Direct privesc to the lambda service role used.
iam:PassRole
, lambda:CreateFunction
, lambda:CreateFunctionUrlConfig
, lambda:InvokeFunctionUrl
Labda na ruhusa hizo unaweza kuunda kazi na kuitekeleza kwa kuita URL... lakini sikuweza kupata njia ya kuijaribu, hivyo nijulishe ukifanya hivyo!
Baadhi ya lambdas zitakuwa zinapokea taarifa nyeti kutoka kwa watumiaji katika vigezo. Ikiwa unapata RCE katika moja yao, unaweza kuhamasisha taarifa nyingine watumiaji wanazotuma, angalia katika:
AWS - Steal Lambda RequestsLearn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)