AWS - Abusing Lambda Extensions
Last updated
Last updated
Impara e pratica Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Le estensioni Lambda migliorano le funzioni integrandosi con vari strumenti di monitoraggio, osservabilità, sicurezza e governance. Queste estensioni, aggiunte tramite .zip archivi usando i layer Lambda o incluse nelle distribuzioni di immagini container, operano in due modalità: interna ed esterna.
Le estensioni interne si fondono con il processo di runtime, manipolando il suo avvio usando variabili d'ambiente specifiche per il linguaggio e script wrapper. Questa personalizzazione si applica a una gamma di runtime, inclusi Java Correto 8 e 11, Node.js 10 e 12, e .NET Core 3.1.
Le estensioni esterne vengono eseguite come processi separati, mantenendo l'allineamento operativo con il ciclo di vita della funzione Lambda. Sono compatibili con vari runtime come Node.js 10 e 12, Python 3.7 e 3.8, Ruby 2.5 e 2.7, Java Corretto 8 e 11, .NET Core 3.1, e runtime personalizzati.
Per ulteriori informazioni su come funzionano le estensioni lambda controlla la documentazione.
Questo è un riassunto della tecnica proposta in questo post: https://www.clearvector.com/blog/lambda-spy/
È stato scoperto che il kernel Linux predefinito nell'ambiente di runtime Lambda è compilato con le chiamate di sistema “process_vm_readv” e “process_vm_writev”. E tutti i processi vengono eseguiti con lo stesso ID utente, anche il nuovo processo creato per l'estensione esterna. Questo significa che un'estensione esterna ha pieno accesso in lettura e scrittura alla memoria heap di Rapid, per design.
Inoltre, mentre le estensioni Lambda hanno la capacità di iscriversi agli eventi di invocazione, AWS non rivela i dati grezzi a queste estensioni. Questo garantisce che le estensioni non possano accedere a informazioni sensibili trasmesse tramite la richiesta HTTP.
Il processo Init (Rapid) monitora tutte le richieste API su http://127.0.0.1:9001 mentre le estensioni Lambda vengono inizializzate ed eseguite prima dell'esecuzione di qualsiasi codice di runtime, ma dopo Rapid.
La variabile AWS_LAMBDA_RUNTIME_API
indica l'IP e il numero di porta dell'API Rapid ai processi di runtime figli e alle estensioni aggiuntive.
Modificando la variabile d'ambiente AWS_LAMBDA_RUNTIME_API
in un port
a cui abbiamo accesso, è possibile intercettare tutte le azioni all'interno del runtime Lambda (man-in-the-middle). Questo è possibile perché l'estensione viene eseguita con gli stessi privilegi di Rapid Init, e il kernel del sistema consente la modifica della memoria del processo, abilitando la modifica del numero di porta.
Poiché le estensioni vengono eseguite prima di qualsiasi codice di runtime, modificare la variabile d'ambiente influenzerà il processo di runtime (ad es., Python, Java, Node, Ruby) mentre si avvia. Inoltre, le estensioni caricate dopo la nostra, che si basano su questa variabile, passeranno anche attraverso la nostra estensione. Questa configurazione potrebbe consentire a malware di bypassare completamente le misure di sicurezza o le estensioni di registrazione direttamente all'interno dell'ambiente di runtime.
Lo strumento lambda-spy è stato creato per eseguire quella scrittura in memoria e rubare informazioni sensibili dalle richieste lambda, altre richieste di estensioni e persino modificarle.
Impara e pratica Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)