AWS - Elastic Beanstalk Enum

Support HackTricks

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, deine Anwendungen in der 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 du dich auf das Schreiben und Bereitstellen deines Codes konzentrieren kannst.

Die von Elastic Beanstalk erstellte Infrastruktur wird von Autoscaling-Gruppen in EC2 (mit einem Lastenausgleich) verwaltet. Das bedeutet, dass du am Ende des Tages, wenn du den Host kompromittierst, über EC2 Bescheid wissen solltest:

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

Darüber hinaus, wenn Docker verwendet wird, ist es möglich, ECS zu verwenden.

AWS - EKS Enum

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 deiner Anwendung. Sie gruppiert verschiedene Versionen deines Anwendungscodes und ermöglicht es dir, sie als eine einzige Einheit zu verwalten.

  • Wenn du eine Anwendung erstellst, gibst du einen Namen und eine Beschreibung an, aber es werden zu diesem Zeitpunkt keine Ressourcen bereitgestellt. Es ist einfach eine Möglichkeit, deinen Code und die zugehörigen Ressourcen zu organisieren und zu verwalten.

  • Du kannst mehrere Anwendungsversionen innerhalb einer Anwendung haben. Jede Version entspricht einer bestimmten Veröffentlichung deines Codes, die in einer oder mehreren Umgebungen bereitgestellt werden kann.

Umgebung

  • Eine Umgebung ist eine bereitgestellte Instanz deiner Anwendung, die auf der AWS-Infrastruktur läuft. Es ist der Ort, an dem dein 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 deiner Anwendung aus, und du kannst mehrere Umgebungen für verschiedene Zwecke haben, wie Entwicklung, Test, Staging und Produktion.

  • Wenn du eine Umgebung erstellst, wählst du eine Plattform (z. B. Java, .NET, Node.js usw.) und einen Umgebungs-Typ (z. B. Webserver oder Worker). Du kannst 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 verarbeiten typischerweise eingehende HTTP/HTTPS-Anfragen. Die Webserver-Umgebung stellt Ressourcen wie EC2-Instanzen, Lastenausgleich und Auto-Scaling-Gruppen bereit, um den 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 sofortige Antwort 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 verarbeitet. Stattdessen konsumiert sie Aufgaben aus einer Amazon Simple Queue Service (SQS)-Warteschlange, die als Puffer zwischen der Worker-Umgebung und den Aufgaben dient, 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, AWSElasticBeanstalkMulticontainerDocker, 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 und AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy

Standardmäßig ist Metadatenversion 1 deaktiviert:

Exposition

Beanstalk-Daten werden in einem S3-Bucket mit dem folgenden Namen gespeichert: elasticbeanstalk-<region>-<acc-id> (wenn es in der AWS-Konsole erstellt wurde). In diesem Bucket findest du den hochgeladenen Quellcode der Anwendung.

Die URL der erstellten Webseite ist http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/

Wenn du Lesezugriff auf den Bucket erhältst, kannst du den Quellcode lesen und sogar sensible Anmeldeinformationen darin finden.

Wenn du Schreibzugriff auf den Bucket erhältst, könntest du den Quellcode ändern, um die IAM-Rolle zu kompromittieren, die die Anwendung beim nächsten Ausführen verwendet.

Enumeration

# 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

Unauthenticated Access

AWS - Elastic Beanstalk Unauthenticated Enum

Persistence

AWS - Elastic Beanstalk Persistence

Privesc

AWS - Elastic Beanstalk Privesc

Post Exploitation

AWS - Elastic Beanstalk Post Exploitation
Support HackTricks

Last updated