# AWS - Elastic Beanstalk Enum {{#include ../../../banners/hacktricks-training.md}} ## Elastic Beanstalk Amazon Elastic Beanstalk bietet eine vereinfachte Plattform für **die Bereitstellung, Verwaltung und Skalierung von Webanwendungen und -diensten**. Es unterstützt eine Vielzahl von Programmiersprachen und Frameworks, wie Java, .NET, PHP, Node.js, Python, Ruby und Go sowie Docker-Container. Der Dienst ist mit weit verbreiteten Servern wie Apache, Nginx, Passenger und IIS kompatibel. Elastic Beanstalk bietet eine einfache und flexible Möglichkeit, **Ihre Anwendungen in die AWS-Cloud bereitzustellen**, ohne sich um die zugrunde liegende Infrastruktur kümmern zu müssen. Es **verwaltet automatisch** die Details der Kapazitäts-**bereitstellung**, Lasten-**verteilung**, **Skalierung** und Anwendungsstatus-**überwachung**, sodass Sie sich auf das Schreiben und Bereitstellen Ihres Codes konzentrieren können. Die von Elastic Beanstalk erstellte Infrastruktur wird von **Autoscaling**-Gruppen in **EC2** (mit einem Lastenausgleich) verwaltet. Das bedeutet, dass Sie am Ende des Tages, wenn Sie **den Host kompromittieren**, über EC2 Bescheid wissen sollten: {{#ref}} aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ {{#endref}} Darüber hinaus, wenn Docker verwendet wird, ist es möglich, **ECS** zu verwenden. {{#ref}} aws-eks-enum.md {{#endref}} ### Anwendung & Umgebungen In AWS Elastic Beanstalk dienen die Konzepte einer "Anwendung" und einer "Umgebung" unterschiedlichen Zwecken und haben unterschiedliche Rollen im Bereitstellungsprozess. #### Anwendung - Eine Anwendung in Elastic Beanstalk ist ein **logischer Container für den Quellcode, die Umgebungen und die Konfigurationen Ihrer Anwendung**. Sie fasst verschiedene Versionen Ihres Anwendungscodes zusammen und ermöglicht es Ihnen, diese als eine einzige Einheit zu verwalten. - Wenn Sie eine Anwendung erstellen, geben Sie einen Namen und eine **Beschreibung an, aber es werden zu diesem Zeitpunkt keine Ressourcen bereitgestellt**. Es ist einfach eine Möglichkeit, Ihren Code und die zugehörigen Ressourcen zu organisieren und zu verwalten. - Sie können **mehrere Anwendungsversionen** innerhalb einer Anwendung haben. Jede Version entspricht einer bestimmten Veröffentlichung Ihres Codes, die in einer oder mehreren Umgebungen bereitgestellt werden kann. #### Umgebung - Eine Umgebung ist eine **bereitgestellte Instanz Ihrer Anwendung**, die auf der AWS-Infrastruktur läuft. Es ist **der Ort, an dem Ihr Anwendungscode bereitgestellt und ausgeführt wird**. Elastic Beanstalk stellt die erforderlichen Ressourcen (z. B. EC2-Instanzen, Lastenausgleich, Auto-Scaling-Gruppen, Datenbanken) basierend auf der Umgebungs-Konfiguration bereit. - **Jede Umgebung führt eine einzelne Version Ihrer Anwendung aus**, und Sie können mehrere Umgebungen für verschiedene Zwecke haben, wie Entwicklung, Test, Staging und Produktion. - Wenn Sie eine Umgebung erstellen, wählen Sie eine Plattform (z. B. Java, .NET, Node.js usw.) und einen Umgebungs-Typ (z. B. Webserver oder Worker). Sie können auch die Umgebungs-Konfiguration anpassen, um verschiedene Aspekte der Infrastruktur und der Anwendungseinstellungen zu steuern. ### 2 Arten von Umgebungen 1. **Webserver-Umgebung**: Sie ist darauf ausgelegt, **Webanwendungen und APIs zu hosten und bereitzustellen**. Diese Anwendungen bearbeiten typischerweise eingehende HTTP/HTTPS-Anfragen. Die Webserver-Umgebung stellt Ressourcen wie **EC2-Instanzen, Lastenausgleich und Auto-Scaling**-Gruppen bereit, um eingehenden Datenverkehr zu bewältigen, die Kapazität zu verwalten und die hohe Verfügbarkeit der Anwendung sicherzustellen. 2. **Worker-Umgebung**: Sie ist darauf ausgelegt, **Hintergrundaufgaben** zu verarbeiten, die oft zeitaufwändige oder ressourcenintensive Operationen sind, die keine sofortigen Antworten an die Clients erfordern. Die Worker-Umgebung stellt Ressourcen wie **EC2-Instanzen und Auto-Scaling-Gruppen** bereit, hat jedoch **keinen Lastenausgleich**, da sie keine HTTP/HTTPS-Anfragen direkt bearbeitet. Stattdessen konsumiert sie Aufgaben aus einer **Amazon Simple Queue Service (SQS)-Warteschlange**, die als Puffer zwischen der Worker-Umgebung und den Aufgaben fungiert, die sie verarbeitet. ### Sicherheit Beim Erstellen einer App in Beanstalk gibt es 3 sehr wichtige Sicherheitsoptionen zu wählen: - **EC2-Schlüsselpaar**: Dies wird der **SSH-Schlüssel** sein, der auf die EC2-Instanzen zugreifen kann, die die App ausführen. - **IAM-Instanzprofil**: Dies ist das **Instanzprofil**, das die Instanzen haben werden (**IAM-Berechtigungen**). - Die automatisch generierte Rolle heißt **`aws-elasticbeanstalk-ec2-role`** und hat einige interessante Zugriffsrechte über alle ECS, alle SQS, DynamoDB Elastic Beanstalk und Elastic Beanstalk S3 unter Verwendung der von AWS verwalteten Richtlinien: [AWSElasticBeanstalkWebTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier), [AWSElasticBeanstalkMulticontainerDocker](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker), [AWSElasticBeanstalkWorkerTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier). - **Service-Rolle**: Dies ist die **Rolle, die der AWS-Dienst** verwenden wird, um alle erforderlichen Aktionen auszuführen. Soweit ich weiß, kann ein regulärer AWS-Benutzer nicht auf diese Rolle zugreifen. - Diese von AWS generierte Rolle heißt **`aws-elasticbeanstalk-service-role`** und verwendet die von AWS verwalteten Richtlinien [AWSElasticBeanstalkEnhancedHealth](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth) und [AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://us-east-1.console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/aws-elasticbeanstalk-service-role?section=permissions) Standardmäßig ist **Metadatenversion 1 deaktiviert**:
### Exposition Beanstalk-Daten werden in einem **S3-Bucket** mit dem folgenden Namen gespeichert: **`elasticbeanstalk--`** (wenn es in der AWS-Konsole erstellt wurde). In diesem Bucket finden Sie den hochgeladenen **Quellcode der Anwendung**. Die **URL** der erstellten Webseite ist **`http://-env...elasticbeanstalk.com/`** > [!WARNING] > Wenn Sie **Lesezugriff** auf den Bucket erhalten, können Sie **den Quellcode lesen** und sogar **sensible Anmeldeinformationen** darin finden. > > Wenn Sie **Schreibzugriff** auf den Bucket erhalten, könnten Sie **den Quellcode ändern**, um die **IAM-Rolle** zu **kompromittieren**, die die Anwendung beim nächsten Ausführen verwendet. ### Enumeration ```bash # Find S3 bucket 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 --environment-name aws elasticbeanstalk describe-environment-resources --environment-name # Get env info such as SQS used queues aws elasticbeanstalk describe-instances-health --environment-name # Get the instances of an environment # Get events aws elasticbeanstalk describe-events ``` ### Unauthentifizierter Zugriff {{#ref}} ../aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md {{#endref}} ### Persistenz {{#ref}} ../aws-persistence/aws-elastic-beanstalk-persistence.md {{#endref}} ### Privilegieneskalation {{#ref}} ../aws-privilege-escalation/aws-elastic-beanstalk-privesc.md {{#endref}} ### Nach der Ausnutzung {{#ref}} ../aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md {{#endref}} {{#include ../../../banners/hacktricks-training.md}}