# 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}}