AWS - Steal Lambda Requests
Flux Lambda
Slicer est un processus en dehors du conteneur qui envoie des invocations au processus init.
Le processus init écoute sur le port 9001 en exposant certains points de terminaison intéressants :
/2018-06-01/runtime/invocation/next
– obtenir le prochain événement d'invocation/2018-06-01/runtime/invocation/{invoke-id}/response
– retourner la réponse du gestionnaire pour l'invocation/2018-06-01/runtime/invocation/{invoke-id}/error
– retourner une erreur d'exécution
bootstrap.py a une boucle qui obtient des invocations du processus init et appelle le code des utilisateurs pour les traiter (
/next
).Enfin, bootstrap.py envoie la réponse à init
Notez que bootstrap charge le code utilisateur en tant que module, donc toute exécution de code effectuée par le code des utilisateurs se produit en fait dans ce processus.
Voler les Requêtes Lambda
Le but de cette attaque est de faire exécuter au code des utilisateurs un processus bootstrap.py
malveillant à l'intérieur du processus bootstrap.py
qui gère la requête vulnérable. De cette façon, le processus bootstrap malveillant commencera à communiquer avec le processus init pour gérer les requêtes tandis que le bootstrap légitime est piégé en exécutant le malveillant, donc il ne demandera pas de requêtes au processus init.
C'est une tâche simple à réaliser car le code de l'utilisateur est exécuté par le processus bootstrap.py
légitime. Ainsi, l'attaquant pourrait :
Envoyer un faux résultat de l'invocation actuelle au processus init, afin qu'init pense que le processus bootstrap attend plus d'invocations.
Une requête doit être envoyée à
/${invoke-id}/response
L'invoke-id peut être obtenu à partir de la pile du processus
bootstrap.py
légitime en utilisant le module python inspect (comme proposé ici) ou simplement en le demandant à nouveau à/2018-06-01/runtime/invocation/next
(comme proposé ici).Exécuter un
bootstrap.py
malveillant qui gérera les prochaines invocationsPour des raisons de furtivité, il est possible d'envoyer les paramètres des invocations lambda à un C2 contrôlé par les attaquants puis de gérer les requêtes comme d'habitude.
Pour cette attaque, il suffit d'obtenir le code original de
bootstrap.py
du système ou de github, d'ajouter le code malveillant et de l'exécuter à partir de l'invocation lambda actuelle.
Étapes de l'Attaque
Trouver une vulnérabilité RCE.
Générer un bootstrap malveillant (par exemple https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)
Exécuter le bootstrap malveillant.
Vous pouvez facilement effectuer ces actions en exécutant :
Pour plus d'informations, consultez https://github.com/carlospolop/lambda_bootstrap_switcher
Références
Last updated