AWS - Elastic Beanstalk Enum

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

Autres façons de soutenir HackTricks:

Elastic Beanstalk

Amazon Elastic Beanstalk fournit une plateforme simplifiée pour déployer, gérer et mettre à l'échelle des applications et des services web. Il prend en charge une variété de langages de programmation et de frameworks, tels que Java, .NET, PHP, Node.js, Python, Ruby et Go, ainsi que des conteneurs Docker. Le service est compatible avec des serveurs largement utilisés, notamment Apache, Nginx, Passenger et IIS.

Elastic Beanstalk offre un moyen simple et flexible de déployer vos applications dans le cloud AWS, sans avoir à vous soucier de l'infrastructure sous-jacente. Il gère automatiquement les détails de la provision de capacité, de l'équilibrage de charge, de la mise à l'échelle et de la surveillance de la santé de l'application, vous permettant de vous concentrer sur l'écriture et le déploiement de votre code.

L'infrastructure créée par Elastic Beanstalk est gérée par des groupes Autoscaling dans EC2 (avec un équilibreur de charge). Cela signifie qu'en fin de compte, si vous compromettez l'hôte, vous devriez en savoir plus sur EC2:

pageAWS - EC2, EBS, ELB, SSM, VPC & VPN Enum

De plus, si Docker est utilisé, il est possible d'utiliser ECS.

pageAWS - EKS Enum

Application & Environnements

Dans AWS Elastic Beanstalk, les concepts d'une "application" et d'un "environnement" servent à des fins différentes et ont des rôles distincts dans le processus de déploiement.

Application

  • Une application dans Elastic Beanstalk est un conteneur logique pour le code source de votre application, les environnements et les configurations. Elle regroupe différentes versions du code de votre application et vous permet de les gérer comme une seule entité.

  • Lorsque vous créez une application, vous fournissez un nom et une description, mais aucune ressource n'est provisionnée à cette étape. C'est simplement un moyen d'organiser et de gérer votre code et les ressources associées.

  • Vous pouvez avoir plusieurs versions d'application au sein d'une application. Chaque version correspond à une version spécifique de votre code, qui peut être déployée dans un ou plusieurs environnements.

Environnement

  • Un environnement est une instance provisionnée de votre application s'exécutant sur l'infrastructure AWS. C'est là où votre code d'application est déployé et exécuté. Elastic Beanstalk provisionne les ressources nécessaires (par exemple, instances EC2, équilibreurs de charge, groupes de mise à l'échelle automatique, bases de données) en fonction de la configuration de l'environnement.

  • Chaque environnement exécute une seule version de votre application, et vous pouvez avoir plusieurs environnements à des fins différentes, telles que le développement, les tests, la mise en production, etc.

  • Lorsque vous créez un environnement, vous choisissez une plateforme (par exemple, Java, .NET, Node.js, etc.) et un type d'environnement (par exemple, serveur web ou travailleur). Vous pouvez également personnaliser la configuration de l'environnement pour contrôler divers aspects de l'infrastructure et des paramètres d'application.

2 types d'Environnements

  1. Environnement de serveur web: Il est conçu pour héberger et servir des applications web et des API. Ces applications gèrent généralement les requêtes HTTP/HTTPS entrantes. L'environnement de serveur web provisionne des ressources telles que des instances EC2, des équilibreurs de charge et des groupes de mise à l'échelle pour gérer le trafic entrant, gérer la capacité et assurer la haute disponibilité de l'application.

  2. Environnement de travailleur: Il est conçu pour traiter des tâches en arrière-plan, qui sont souvent des opérations longues ou gourmandes en ressources ne nécessitant pas de réponses immédiates aux clients. L'environnement de travailleur provisionne des ressources telles que des instances EC2 et des groupes de mise à l'échelle, mais il n'a pas d'équilibreur de charge car il ne gère pas directement les requêtes HTTP/HTTPS. À la place, il consomme des tâches à partir d'une file d'attente Amazon Simple Queue Service (SQS), qui sert de tampon entre l'environnement de travailleur et les tâches qu'il traite.

Sécurité

Lors de la création d'une application dans Beanstalk, il y a 3 options de sécurité très importantes à choisir :

  • Paire de clés EC2: Il s'agit de la clé SSH qui pourra accéder aux instances EC2 exécutant l'application.

  • Profil d'instance IAM: Il s'agit du profil d'instance que les instances auront (privilèges IAM).

  • Le rôle généré automatiquement s'appelle aws-elasticbeanstalk-ec2-role et a un certain accès intéressant sur tous les ECS, tous les SQS, DynamoDB elasticbeanstalk et elasticbeanstalk S3 en utilisant les politiques gérées par AWS : AWSElasticBeanstalkWebTier, AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWorkerTier.

  • Rôle de service: Il s'agit du rôle que le service AWS utilisera pour effectuer toutes les actions nécessaires. À ma connaissance, un utilisateur AWS régulier ne peut pas accéder à ce rôle.

  • Ce rôle généré par AWS s'appelle aws-elasticbeanstalk-service-role et utilise les politiques gérées par AWS AWSElasticBeanstalkEnhancedHealth et AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy

Par défaut, la version de métadonnées 1 est désactivée:

### Exposition

Les données de Beanstalk sont stockées dans un bucket S3 avec le nom suivant : elasticbeanstalk-<region>-<acc-id> (si elles ont été créées dans la console AWS). À l'intérieur de ce bucket, vous trouverez le code source de l'application téléchargé.

L'URL de la page web créée est http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/

Si vous obtenez un accès en lecture sur le bucket, vous pouvez lire le code source et même trouver des informations d'identification sensibles dessus.

Si vous obtenez un accès en écriture sur le bucket, vous pourriez modifier le code source pour compromettre le rôle IAM que l'application utilise la prochaine fois qu'elle est exécutée.

Énumération

# Find S3 bucket
ACCOUNT_NUMBER=<account_number>
for r in us-east-1 us-east-2 us-west-1 us-west-2 ap-south-1 ap-south-2 ap-northeast-1 ap-northeast-2 ap-northeast-3 ap-southeast-1 ap-southeast-2 ap-southeast-3 ca-central-1 eu-central-1 eu-central-2 eu-west-1 eu-west-2 eu-west-3 eu-north-1 sa-east-1 af-south-1 ap-east-1 eu-south-1 eu-south-2 me-south-1 me-central-1; do aws s3 ls elasticbeanstalk-$r-$ACCOUNT_NUMBER 2>/dev/null && echo "Found in: elasticbeanstalk-$r-$ACCOUNT_NUMBER"; done

# Get apps and URLs
aws elasticbeanstalk describe-applications # List apps
aws elasticbeanstalk describe-application-versions # Get apps & bucket name with source code
aws elasticbeanstalk describe-environments # List envs
aws elasticbeanstalk describe-environments | grep -E "EndpointURL|CNAME"
aws elasticbeanstalk describe-configuration-settings --application-name <app_name> --environment-name <env_name>
aws elasticbeanstalk describe-environment-resources --environment-name <env_name> # Get env info such as SQS used queues
aws elasticbeanstalk describe-instances-health --environment-name <env_name> # Get the instances of an environment

# Get events
aws elasticbeanstalk describe-events

Accès non authentifié

pageAWS - Elastic Beanstalk Unauthenticated Enum

Persistance

pageAWS - Elastic Beanstalk Persistence

Élévation de privilèges

pageAWS - Elastic Beanstalk Privesc

Post-exploitation

pageAWS - Elastic Beanstalk Post Exploitation
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