AWS - Steal Lambda Requests
Last updated
Last updated
Slicer is 'n proses buite die houer wat aanroepings na die init proses stuur.
Die init proses luister op poort 9001 en stel 'n paar interessante eindpunte bloot:
/2018-06-01/runtime/invocation/next
– kry die volgende aanroepinggebeurtenis
/2018-06-01/runtime/invocation/{invoke-id}/response
– gee die hanteringsreaksie vir die aanroeping terug
/2018-06-01/runtime/invocation/{invoke-id}/error
– gee 'n uitvoeringsfout terug
bootstrap.py het 'n lus wat aanroepings van die init proses kry en roep die gebruikerskode aan om hulle te hanteer (/next
).
Laastens stuur bootstrap.py die reaksie na init
Let daarop dat bootstrap die gebruikerskode as 'n module laai, sodat enige kode-uitvoering wat deur die gebruikerskode uitgevoer word, eintlik in hierdie proses plaasvind.
Die doel van hierdie aanval is om die gebruikerskode 'n bose bootstrap.py
proses binne die bootstrap.py
proses te laat uitvoer wat die kwesbare versoek hanteer. Op hierdie manier sal die bose bootstrap proses begin praat met die init proses om die versoeke te hanteer terwyl die regmatige bootstrap vasgevang is terwyl die bose een loop, sodat dit nie vir versoeke aan die init proses sal vra nie.
Dit is 'n eenvoudige taak om te bereik aangesien die kode van die gebruiker deur die regmatige bootstrap.py
proses uitgevoer word. Die aanvaller kan dus:
Stuur 'n valse resultaat van die huidige aanroeping na die init proses, sodat init dink die bootstrap proses wag vir meer aanroepings.
'n versoek moet gestuur word na /${invoke-id}/response
Die aanroep-ID kan verkry word uit die stok van die regmatige bootstrap.py
proses deur die inspect python module te gebruik (soos voorgestel hier) of net weer daarna te vra by /2018-06-01/runtime/invocation/next
(soos voorgestel hier).
Voer 'n bose boostrap.py
uit wat die volgende aanroepings sal hanteer
Vir stilte doeleindes is dit moontlik om die lambda aanroepingsparameters na 'n aanvaller se beheerde C2 te stuur en dan die versoeke soos gewoonlik te hanteer.
Vir hierdie aanval is dit genoeg om die oorspronklike kode van bootstrap.py
van die stelsel of github te kry, die bose kode by te voeg en dit van die huidige lambda aanroeping uit te hardloop.
Vind 'n RCE kwesbaarheid.
Skep 'n bose bootstrap (bv. https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)
Voer die bose bootstrap uit.
Jy kan maklik hierdie aksies uitvoer deur te hardloop:
Vir meer inligting kyk na https://github.com/carlospolop/lambda_bootstrap_switcher