AWS - Abusing Lambda Extensions

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

Altri modi per supportare HackTricks:

Lambda Extensions

Le Lambda extensions migliorano le funzioni integrandosi con vari strumenti di monitoraggio, osservabilità, sicurezza e governance. Queste estensioni, aggiunte tramite .zip archives usando Lambda layers o incluse in deployments di immagini container, operano in due modalità: interna ed esterna.

  • Le estensioni interne si fondono con il processo di runtime, manipolando il suo avvio utilizzando variabili d'ambiente specifiche del linguaggio e script wrapper. Questa personalizzazione si applica a una serie di runtimes, tra cui 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 runtimes 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 lambda extensions consulta la documentazione.

Estensione Esterna per Persistenza, Furto di Richieste e Modifica di 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. Ciò significa che un'estensione esterna ha pieno accesso in lettura e scrittura alla memoria heap di Rapid, per design.

Inoltre, mentre le Lambda extensions hanno la capacità di sottoscriversi agli eventi di invocazione, AWS non rivela i dati grezzi a queste estensioni. Ciò 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 Lambda extensions vengono inizializzate ed eseguite prima dell'esecuzione di qualsiasi codice di runtime, ma dopo Rapid.

La variabile AWS_LAMBDA_RUNTIME_API indica l'indirizzo IP e il numero di porta dell'API Rapid ai processi runtime figlio e alle estensioni aggiuntive.

Cambiando la variabile d'ambiente AWS_LAMBDA_RUNTIME_API in una porta 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, consentendo 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 esempio, Python, Java, Node, Ruby) durante l'avvio. Inoltre, le estensioni caricate dopo la nostra, che dipendono da questa variabile, verranno reindirizzate attraverso la nostra estensione. Questa configurazione potrebbe consentire al malware di bypassare completamente le misure di sicurezza o le estensioni di logging 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, dalle altre richieste delle estensioni e persino modificarle.

Riferimenti

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

Altri modi per supportare HackTricks:

Last updated