AWS - Lambda Enum
Reading time: 8 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
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
Lambda
Amazon Web Services (AWS) Lambda è descritta come un servizio di calcolo che consente l'esecuzione di codice senza la necessità di provisioning o gestione del server. È caratterizzata dalla sua capacità di gestire automaticamente l'allocazione delle risorse necessarie per l'esecuzione del codice, garantendo funzionalità come alta disponibilità, scalabilità e sicurezza. Un aspetto significativo di Lambda è il suo modello di pricing, dove i costi sono basati esclusivamente sul tempo di calcolo utilizzato, eliminando la necessità di investimenti iniziali o obblighi a lungo termine.
Per chiamare una lambda è possibile farlo tanto frequentemente quanto si desidera (con Cloudwatch), esporre un endpoint URL e chiamarlo, chiamarlo tramite API Gateway o anche in base a eventi come cambiamenti nei dati in un S3 bucket o aggiornamenti a una tabella DynamoDB.
Il codice di una lambda è memorizzato in /var/task
.
Lambda Aliases Weights
Una Lambda può avere diverse versioni.
E può avere più di 1 versione esposta tramite alias. I pesi di ciascuna delle versioni esposte all'interno di un alias decideranno quale alias riceve l'invocazione (può essere 90%-10% ad esempio).
Se il codice di uno degli alias è vulnerabile, puoi inviare richieste fino a quando la versione vulnerabile riceve l'exploit.
Resource Policies
Le politiche delle risorse Lambda consentono di dare accesso ad altri servizi/account per invocare la lambda, ad esempio.
Ad esempio, questa è la politica per consentire a chiunque di accedere a una lambda esposta tramite URL:
O questa per consentire a un API Gateway di invocarla:
Lambda Database Proxies
Quando ci sono centinaia di richieste lambda concorrenti, se ognuna di esse deve connettersi e chiudere una connessione a un database, semplicemente non funzionerà (le lambdas sono senza stato, non possono mantenere le connessioni aperte).
Quindi, se le tue funzioni Lambda interagiscono con RDS Proxy invece della tua istanza di database. Gestisce il pooling delle connessioni necessario per scalare molte connessioni simultanee create da funzioni Lambda concorrenti. Questo consente alle tue applicazioni Lambda di riutilizzare le connessioni esistenti, piuttosto che creare nuove connessioni per ogni invocazione della funzione.
Lambda EFS Filesystems
Per preservare e persino condividere i dati, le Lambdas possono accedere a EFS e montarle, in modo che Lambda possa leggere e scrivere da esse.
Lambda Layers
Un layer Lambda è un archivio .zip che può contenere codice aggiuntivo o altro contenuto. Un layer può contenere librerie, un runtime personalizzato, dati o file di configurazione.
È possibile includere fino a cinque layer per funzione. Quando includi un layer in una funzione, i contenuti vengono estratti nella directory /opt
nell'ambiente di esecuzione.
Per definizione, i layer che crei sono privati al tuo account AWS. Puoi scegliere di condividere un layer con altri account o di rendere il layer pubblico. Se le tue funzioni consumano un layer pubblicato da un altro account, le tue funzioni possono continuare a utilizzare la versione del layer dopo che è stata eliminata, o dopo che il tuo permesso di accesso al layer è stato revocato. Tuttavia, non puoi creare una nuova funzione o aggiornare funzioni utilizzando una versione di layer eliminata.
Le funzioni distribuite come immagine del contenitore non utilizzano layer. Invece, impacchetti il tuo runtime preferito, librerie e altre dipendenze nell'immagine del contenitore quando costruisci l'immagine.
Lambda Extensions
Le estensioni Lambda migliorano le funzioni integrandosi con vari strumenti di monitoraggio, osservabilità, sicurezza e governance. Queste estensioni, aggiunte tramite .zip archive utilizzando i layer Lambda o incluse nelle distribuzioni di immagini del contenitore, operano in due modalità: interna ed esterna.
- 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.
Enumeration
aws lambda get-account-settings
# List functions and get extra config info
aws lambda list-functions
aws lambda get-function --function-name <function_name>
aws lambda get-function-configuration --function-name <function_name>
aws lambda list-function-event-invoke-configs --function-name <function_name>
## Check for creds in env vars
aws lambda list-functions | jq '.Functions[].Environment'
## Download & check the source code
aws lambda get-function --function-name "<func_name>" --query 'Code.Location'
wget -O lambda-function.zip <url-from-previous-query>
# Get Lambda URL (if any)
aws lambda list-function-url-configs --function-name <function_name>
aws lambda get-function-url-config --function-name <function_name>
# Get who has permissions to invoke the Lambda
aws lambda get-policy --function-name <function_name>
# Versions and Aliases
aws lambda list-versions-by-function --function-name <func_name>
aws lambda list-aliases --function-name <func_name>
# List layers
aws lambda list-layers
aws lambda list-layer-versions --layer-name <name>
aws lambda get-layer-version --layer-name <name> --version-number <ver>
aws lambda get-layer-version-by-arn --arn <name> #Get external ARNs
# List other metadata
aws lambda list-event-source-mappings
aws lambda list-code-signing-configs
aws lambda list-functions-by-code-signing-config --code-signing-config-arn <arn>
Invochare una lambda
Manuale
# Invoke function
aws lambda invoke --function-name FUNCTION_NAME /tmp/out
## Some functions will expect parameters, they will access them with something like:
## target_policys = event['policy_names']
## user_name = event['user_name']
aws lambda invoke --function-name <name> --cli-binary-format raw-in-base64-out --payload '{"policy_names": ["AdministratorAccess], "user_name": "sdf"}' out.txt
Tramite URL esposta
aws lambda list-function-url-configs --function-name <function_name> #Get lambda URL
aws lambda get-function-url-config --function-name <function_name> #Get lambda URL
Chiama la funzione Lambda tramite URL
Ora è il momento di scoprire le possibili funzioni lambda da eseguire:
aws --region us-west-2 --profile level6 lambda list-functions
Una funzione lambda chiamata "Level6" è disponibile. Scopriamo come chiamarla:
aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6
Ora che conosci il nome e l'ID, puoi ottenere il Nome:
aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33ppypa75"
E infine chiama la funzione accedendo (nota che l'ID, il Nome e il nome della funzione appaiono nell'URL): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:
https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
Altri Trigger
Ci sono molte altre fonti che possono attivare un lambda
.png)
Privesc
Nella pagina seguente puoi controllare come abusare dei permessi di Lambda per escalare i privilegi:
Accesso Non Autenticato
AWS - Lambda Unauthenticated Access
Post Exploitation
AWS - Lambda Post Exploitation
Persistenza
Riferimenti
- https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer
- https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/
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
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.