AWS - Elastic Beanstalk Enum

Soutenir HackTricks

Elastic Beanstalk

Amazon Elastic Beanstalk fournit une plateforme simplifiée pour déployer, gérer et mettre à l'échelle des applications et 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, y compris Apache, Nginx, Passenger et IIS.

Elastic Beanstalk offre un moyen simple et flexible de déployer vos applications dans le cloud AWS, sans avoir à se soucier de l'infrastructure sous-jacente. Il gère automatiquement les détails de la provisionnement de capacité, de l'équilibrage de charge, de la mise à l'échelle et de la surveillance de la santé des applications, 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 d'Autoscaling dans EC2 (avec un équilibreur de charge). Ce qui signifie qu'à la fin de la journée, si vous compromettez l'hôte, vous devez connaître EC2 :

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

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

AWS - EKS Enum

Application & Environnements

Dans AWS Elastic Beanstalk, les concepts d'une "application" et d'un "environnement" servent des objectifs différents 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, les environnements et les configurations de votre application. Elle regroupe différentes versions de votre code d'application et vous permet de les gérer en tant qu'entité unique.

  • Lorsque vous créez une application, vous fournissez un nom et une description, mais aucune ressource n'est provisionnée à ce stade. 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 fonctionnant sur l'infrastructure AWS. C'est là où le code de votre application est déployé et exécuté. Elastic Beanstalk provisionne les ressources nécessaires (par exemple, instances EC2, équilibreurs de charge, groupes d'auto-scaling, 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 pour différents objectifs, tels que le développement, les tests, la mise en scène et la production.

  • 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 de l'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 d'auto-scaling pour gérer le trafic entrant, gérer la capacité et garantir 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 qui ne nécessitent pas de réponses immédiates aux clients. L'environnement de travailleur provisionne des ressources comme des instances EC2 et des groupes d'auto-scaling, mais il n'a pas d'équilibreur de charge car il ne gère pas directement les requêtes HTTP/HTTPS. Au lieu de cela, il consomme des tâches à partir d'une file d'attente Amazon Simple Queue Service (SQS), qui agit comme un 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 : Ce sera la clé SSH qui pourra accéder aux instances EC2 exécutant l'application.

  • Profil d'instance IAM : C'est le 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 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 : C'est le rôle que le service AWS utilisera pour effectuer toutes les actions nécessaires. À ma connaissance, un utilisateur AWS ordinaire 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 des métadonnées 1 est désactivée :

Exposition

Les données 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 identifiants 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é

AWS - Elastic Beanstalk Unauthenticated Enum

Persistance

AWS - Elastic Beanstalk Persistence

Élévation de privilèges

AWS - Elastic Beanstalk Privesc

Post-exploitation

AWS - Elastic Beanstalk Post Exploitation
Soutenir HackTricks

Last updated