AWS - Abusing Lambda Extensions

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

Autres façons de soutenir HackTricks :

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 .archives zip en utilisant des couches Lambda ou incluses dans des déploiements d'images de conteneurs, 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'enrobage. 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 distincts, maintenant l'alignement des opérations avec le cycle de vie de la fonction Lambda. Elles sont compatibles avec divers runtimes tels que 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.

Pour plus d'informations sur le fonctionnement des extensions Lambda, consultez la documentation.

Extension Externe pour la Persistance, le Vol de Requêtes & la Modification de Requêtes

Il s'agit d'un résumé de la technique proposée dans ce post : https://www.clearvector.com/blog/lambda-spy/

Il a été découvert que le noyau Linux par défaut dans l'environnement d'exécution Lambda est compilé avec les appels système "process_vm_readv" et "process_vm_writev". Et tous les processus s'exécutent avec le même ID utilisateur, même le nouveau processus créé pour l'extension externe. Cela signifie qu'une extension externe a un accès complet en lecture et en écriture à la mémoire heap de Rapid, par conception.

De plus, bien que les extensions Lambda aient la capacité de s'abonner aux événements d'invocation, AWS ne révèle pas les données brutes à ces extensions. Cela garantit que les extensions ne peuvent pas accéder aux informations sensibles transmises via la requête HTTP.

Le processus Init (Rapid) surveille toutes les requêtes API à http://127.0.0.1:9001 tandis que les extensions Lambda sont initialisées et exécutées avant l'exécution de tout code d'exécution, mais après Rapid.

La variable AWS_LAMBDA_RUNTIME_API indique l'adresse IP et le numéro de port de l'API Rapid aux processus d'exécution enfants et aux extensions supplémentaires.

En modifiant la variable d'environnement AWS_LAMBDA_RUNTIME_API pour un port auquel nous avons accès, il est possible d'intercepter toutes les actions dans l'environnement d'exécution Lambda (homme du milieu). Cela est possible car l'extension s'exécute avec les mêmes privilèges que Rapid Init, et le noyau du système permet la modification de la mémoire du processus, permettant la modification du numéro de port.

Parce que les extensions s'exécutent avant tout code d'exécution, la modification de la variable d'environnement influencera le processus d'exécution (par exemple, Python, Java, Node, Ruby) au démarrage. De plus, les extensions chargées après la nôtre, qui dépendent de cette variable, passeront également par notre extension. Cette configuration pourrait permettre à un logiciel malveillant de contourner complètement les mesures de sécurité ou les extensions de journalisation directement dans l'environnement d'exécution.

L'outil lambda-spy a été créé pour effectuer cette écriture en mémoire et voler des informations sensibles des requêtes lambda, d'autres requêtes d'extensions et même les modifier.

Références

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

Autres façons de soutenir HackTricks :

Dernière mise à jour