AWS - Steal Lambda Requests
Last updated
Last updated
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Slicer to proces poza kontenerem, który wysyła wywołania do procesu init.
Proces init nasłuchuje na porcie 9001, udostępniając kilka interesujących punktów końcowych:
/2018-06-01/runtime/invocation/next
– pobierz następne zdarzenie wywołania
/2018-06-01/runtime/invocation/{invoke-id}/response
– zwróć odpowiedź handlera dla wywołania
/2018-06-01/runtime/invocation/{invoke-id}/error
– zwróć błąd wykonania
bootstrap.py ma pętlę, która pobiera wywołania z procesu init i wywołuje kod użytkownika, aby je obsłużyć (/next
).
Na koniec bootstrap.py wysyła do init odpowiedź
Zauważ, że bootstrap ładuje kod użytkownika jako moduł, więc wszelkie wykonania kodu przez kod użytkownika odbywają się w tym procesie.
Celem tego ataku jest sprawienie, aby kod użytkownika wykonał złośliwy proces bootstrap.py
wewnątrz procesu bootstrap.py
, który obsługuje podatne żądanie. W ten sposób złośliwy proces bootstrap zacznie rozmawiać z procesem init, aby obsługiwać żądania, podczas gdy legit bootstrap jest uwięziony, uruchamiając złośliwy, więc nie będzie prosił o żądania do procesu init.
To proste zadanie do osiągnięcia, ponieważ kod użytkownika jest wykonywany przez legitny proces bootstrap.py
. Tak więc atakujący mógłby:
Wysłać fałszywy wynik bieżącego wywołania do procesu init, aby init myślał, że proces bootstrap czeka na więcej wywołań.
Żądanie musi być wysłane do /${invoke-id}/response
invoke-id można uzyskać ze stosu legitnego procesu bootstrap.py
za pomocą modułu inspect w Pythonie (jak proponowano tutaj) lub po prostu ponownie żądając go do /2018-06-01/runtime/invocation/next
(jak proponowano tutaj).
Wykonać złośliwy boostrap.py
, który obsłuży następne wywołania
Dla celów ukrycia można wysłać parametry wywołań lambda do kontrolowanego przez atakującego C2, a następnie obsługiwać żądania jak zwykle.
Do tego ataku wystarczy pobrać oryginalny kod bootstrap.py
z systemu lub github, dodać złośliwy kod i uruchomić go z bieżącego wywołania lambda.
Znajdź podatność RCE.
Wygeneruj złośliwy bootstrap (np. https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)
Wykonaj złośliwy bootstrap.
Możesz łatwo wykonać te działania, uruchamiając:
For more info check https://github.com/carlospolop/lambda_bootstrap_switcher
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)