AWS - Abusing Lambda Extensions

Support HackTricks

Lambda Extensions

Le estensioni Lambda migliorano le funzioni integrandosi con vari strumenti di monitoraggio, osservabilità, sicurezza e governance. Queste estensioni, aggiunte tramite .zip archivi utilizzando i layer Lambda o incluse nelle distribuzioni di immagini container, operano in due modalità: interno ed esterno.

  • Le estensioni interne si fondono con il processo di runtime, manipolando il suo avvio utilizzando variabili ambientali specifiche del 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.

Estensione Esterna per Persistenza, Furto di Richieste e Modifica delle Richieste

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 ambientale 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 ambientale 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, verranno anch'esse instradate 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.

References

Support HackTricks

Last updated