AWS - Steal Lambda Requests
Flusso Lambda
Slicer è un processo al di fuori del contenitore che invia invocazioni al processo init.
Il processo init ascolta sulla porta 9001 esponendo alcuni endpoint interessanti:
/2018-06-01/runtime/invocation/next
– ottenere l'evento di invocazione successivo/2018-06-01/runtime/invocation/{invoke-id}/response
– restituire la risposta dell'handler per l'invocazione/2018-06-01/runtime/invocation/{invoke-id}/error
– restituire un errore di esecuzione
bootstrap.py ha un loop che ottiene le invocazioni dal processo init e chiama il codice degli utenti per gestirle (
/next
).Infine, bootstrap.py invia al processo init la risposta
Si noti che bootstrap carica il codice dell'utente come modulo, quindi qualsiasi esecuzione di codice eseguita dal codice degli utenti avviene effettivamente in questo processo.
Rubare le Richieste Lambda
L'obiettivo di questo attacco è far eseguire al codice degli utenti un processo bootstrap.py
malizioso all'interno del processo bootstrap.py
che gestisce la richiesta vulnerabile. In questo modo, il processo bootstrap malizioso inizierà a comunicare con il processo init per gestire le richieste mentre il processo legittimo di bootstrap è intrappolato eseguendo quello malizioso, quindi non chiederà richieste al processo init.
Questa è una semplice attività da realizzare poiché il codice dell'utente viene eseguito dal legittimo bootstrap.py
processo. Quindi l'attaccante potrebbe:
Inviare un falso risultato dell'invocazione corrente al processo init, in modo che init pensi che il processo bootstrap stia aspettando ulteriori invocazioni.
Deve essere inviata una richiesta a
/${invoke-id}/response
L'invoke-id può essere ottenuto dalla pila del legittimo processo
bootstrap.py
utilizzando il modulo python inspect (come proposto qui) o semplicemente richiedendolo nuovamente a/2018-06-01/runtime/invocation/next
(come proposto qui).Eseguire un
bootstrap.py
malizioso che gestirà le prossime invocazioniPer scopi di stealthiness è possibile inviare i parametri delle invocazioni lambda a un C2 controllato dagli attaccanti e quindi gestire le richieste come al solito.
Per questo attacco, è sufficiente ottenere il codice originale di
bootstrap.py
dal sistema o da github, aggiungere il codice malizioso ed eseguirlo dall'invocazione lambda corrente.
Passaggi dell'Attacco
Trova una vulnerabilità RCE.
Genera un bootstrap malizioso (ad es. https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)
Esegui il bootstrap malizioso.
Puoi facilmente eseguire queste azioni eseguendo:
Per ulteriori informazioni controlla https://github.com/carlospolop/lambda_bootstrap_switcher
Riferimenti
Last updated