AWS - Lambda Enum
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Lambda
Amazon Web Services (AWS) Lambda est dĂ©crit comme un service de calcul qui permet lâexĂ©cution de code sans la nĂ©cessitĂ© de provisionner ou de gĂ©rer des serveurs. Il se caractĂ©rise par sa capacitĂ© Ă gĂ©rer automatiquement lâallocation des ressources nĂ©cessaires Ă lâexĂ©cution du code, garantissant des fonctionnalitĂ©s telles que haute disponibilitĂ©, Ă©volutivitĂ© et sĂ©curitĂ©. Un aspect significatif de Lambda est son modĂšle de tarification, oĂč les frais sont basĂ©s uniquement sur le temps de calcul utilisĂ©, Ă©liminant ainsi le besoin dâinvestissements initiaux ou dâobligations Ă long terme.
Pour appeler une lambda, il est possible de lâappeler aussi souvent que vous le souhaitez (avec Cloudwatch), dâexposer un point de terminaison URL et de lâappeler, de lâappeler via API Gateway ou mĂȘme en fonction des Ă©vĂ©nements tels que les changements de donnĂ©es dans un bucket S3 ou les mises Ă jour dâune table DynamoDB.
Le code dâune lambda est stockĂ© dans /var/task.
Poids des alias Lambda
Une Lambda peut avoir plusieurs versions.
Et elle peut avoir plus dâune version exposĂ©e via des alias. Les poids de chacune des versions exposĂ©es dans un alias dĂ©cideront quel alias reçoit lâinvocation (cela peut ĂȘtre 90%-10% par exemple).
Si le code de lâun des alias est vulnĂ©rable, vous pouvez envoyer des requĂȘtes jusquâĂ ce que la version vulnĂ©rable reçoive lâexploit.
.png)
Politiques de ressources
Les politiques de ressources Lambda permettent de donner accĂšs Ă dâautres services/comptes pour invoquer la lambda par exemple.
Par exemple, voici la politique pour permettre Ă quiconque dâaccĂ©der Ă une lambda exposĂ©e via URL :
Ou celle-ci pour permettre Ă un API Gateway de lâinvoquer :
Proxies de base de données Lambda
Lorsquâil y a des centaines de requĂȘtes lambda simultanĂ©es, si chacune dâelles doit se connecter et fermer une connexion Ă une base de donnĂ©es, cela ne va tout simplement pas fonctionner (les lambdas sont sans Ă©tat, ne peuvent pas maintenir des connexions ouvertes).
Alors, si vos fonctions Lambda interagissent avec RDS Proxy au lieu de votre instance de base de données. Cela gÚre le pool de connexions nécessaire pour faire évoluer de nombreuses connexions simultanées créées par des fonctions Lambda concurrentes. Cela permet à vos applications Lambda de réutiliser les connexions existantes, plutÎt que de créer de nouvelles connexions pour chaque invocation de fonction.
SystĂšmes de fichiers EFS Lambda
Pour prĂ©server et mĂȘme partager des donnĂ©es, les Lambdas peuvent accĂ©der Ă EFS et les monter, afin que Lambda puisse lire et Ă©crire Ă partir de celui-ci.
Couches Lambda
Une couche Lambda est une archive .zip qui peut contenir du code supplĂ©mentaire ou dâautres contenus. Une couche peut contenir des bibliothĂšques, un runtime personnalisĂ©, des donnĂ©es ou des fichiers de configuration.
Il est possible dâinclure jusquâĂ cinq couches par fonction. Lorsque vous incluez une couche dans une fonction, les contenus sont extraits dans le rĂ©pertoire /opt dans lâenvironnement dâexĂ©cution.
Par dĂ©faut, les couches que vous crĂ©ez sont privĂ©es Ă votre compte AWS. Vous pouvez choisir de partager une couche avec dâautres comptes ou de rendre la couche publique. Si vos fonctions consomment une couche quâun autre compte a publiĂ©e, vos fonctions peuvent continuer Ă utiliser la version de la couche aprĂšs quâelle a Ă©tĂ© supprimĂ©e, ou aprĂšs que votre permission dâaccĂ©der Ă la couche a Ă©tĂ© rĂ©voquĂ©e. Cependant, vous ne pouvez pas crĂ©er une nouvelle fonction ou mettre Ă jour des fonctions en utilisant une version de couche supprimĂ©e.
Les fonctions dĂ©ployĂ©es en tant quâimage de conteneur nâutilisent pas de couches. Au lieu de cela, vous regroupez votre runtime prĂ©fĂ©rĂ©, vos bibliothĂšques et dâautres dĂ©pendances dans lâimage de conteneur lorsque vous construisez lâimage.
Extensions Lambda
Les extensions Lambda amĂ©liorent les fonctions en sâintĂ©grant Ă divers outils de surveillance, dâobservabilitĂ©, de sĂ©curitĂ© et de gouvernance. Ces extensions, ajoutĂ©es via des .zip archives utilisant des couches Lambda ou incluses dans les dĂ©ploiements dâimages de conteneur, fonctionnent en deux modes : interne et externe.
- Les extensions internes fusionnent avec le processus dâexĂ©cution, manipulant son dĂ©marrage Ă lâaide de variables dâenvironnement spĂ©cifiques au langage et de scripts dâenveloppe. Cette personnalisation sâapplique Ă une gamme de runtimes, y compris Java Correto 8 et 11, Node.js 10 et 12, et .NET Core 3.1.
- Les extensions externes sâexĂ©cutent en tant que processus sĂ©parĂ©s, maintenant lâalignement opĂ©rationnel avec le cycle de vie de la fonction Lambda. Elles sont compatibles avec divers runtimes comme Node.js 10 et 12, Python 3.7 et 3.8, Ruby 2.5 et 2.7, Java Corretto 8 et 11, .NET Core 3.1, et runtimes personnalisĂ©s.
ĂnumĂ©ration
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>
Invoker une lambda
Manuel
# 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
Via URL exposée
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
Appeler la fonction Lambda via URL
Maintenant, il est temps de découvrir les fonctions lambda possibles à exécuter :
aws --region us-west-2 --profile level6 lambda list-functions
.png)
Une fonction lambda appelĂ©e âLevel6â est disponible. Voyons comment lâappeler :
aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6
.png)
Maintenant que vous connaissez le nom et lâID, vous pouvez obtenir le Nom :
aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33ppypa75"
.png)
Et enfin, appelez la fonction en accĂ©dant (notez que lâID, le nom et le nom de la fonction apparaissent dans lâURL) : https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
Autres Déclencheurs
Il existe de nombreuses autres sources qui peuvent déclencher une lambda
.png)
Privesc
Sur la page suivante, vous pouvez vérifier comment abuser des permissions Lambda pour escalader les privilÚges :
AccÚs Non Authentifié
AWS - Lambda Unauthenticated Access
Post Exploitation
AWS - Lambda Post Exploitation
Persistance
Références
- 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
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

