AWS - Steal Lambda Requests
Przepływ Lambda
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
– pobiera następne zdarzenie wywołania/2018-06-01/runtime/invocation/{invoke-id}/response
– zwraca odpowiedź handlera dla wywołania/2018-06-01/runtime/invocation/{invoke-id}/error
– zwraca błąd wykonania
bootstrap.py ma pętlę pobierającą 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ź
Należy zauważyć, że bootstrap ładuje kod użytkownika jako moduł, więc każde wykonanie kodu przez kod użytkownika faktycznie odbywa się w tym procesie.
Kradzież Żądań Lambda
Celem tego ataku jest zmuszenie kodu użytkownika do wykonania złośliwego procesu 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 legalny bootstrap będzie 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 legalny proces bootstrap.py
. 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
Identyfikator wywołania można uzyskać ze stosu legalnego procesu
bootstrap.py
za pomocą modułu python inspect (jak proponowano tutaj) lub po prostu ponownie żądając go do/2018-06-01/runtime/invocation/next
(jak proponowano tutaj).Wykonaj złośliwy
boostrap.py
, który będzie obsługiwał kolejne wywołaniaDla 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.
Dla tego ataku wystarczy uzyskać oryginalny kod
bootstrap.py
z systemu lub github, dodać złośliwy kod i uruchomić go z bieżącego wywołania lambda.
Kroki Ataku
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:
Aby uzyskać więcej informacji, sprawdź https://github.com/carlospolop/lambda_bootstrap_switcher
Referencje
Last updated