AWS - Elastic Beanstalk Enum

Reading time: 7 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie 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, 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 Überwachung der Anwendungsleistung, sodass Sie sich auf das Schreiben und Bereitstellen Ihres Codes konzentrieren können.

Die Infrastruktur, die von Elastic Beanstalk erstellt wird, 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:

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 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, Lastenausgleicher, 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 dafür ausgelegt, Webanwendungen und APIs zu hosten und bereitzustellen. Diese Anwendungen bearbeiten typischerweise eingehende HTTP/HTTPS-Anfragen. Die Webserver-Umgebung stellt Ressourcen wie EC2-Instanzen, Lastenausgleicher 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 dafür ausgelegt, Hintergrundaufgaben zu verarbeiten, die oft zeitaufwendig oder ressourcenintensiv sind und keine sofortigen Antworten an die Clients erfordern. Die Worker-Umgebung stellt Ressourcen wie EC2-Instanzen und Auto-Scaling-Gruppen bereit, hat jedoch keinen Lastenausgleicher, 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, 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 auf diese Rolle nicht 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 finden Sie den hochgeladenen Quellcode der Anwendung.

Die URL der erstellten Webseite ist http://<webapp-name>-env.<random>.<region>.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=<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

Unauthentifizierter Zugriff

AWS - Elastic Beanstalk Unauthenticated Enum

Persistenz

AWS - Elastic Beanstalk Persistence

Privilegieneskalation

AWS - Elastic Beanstalk Privesc

Nach der Ausnutzung

AWS - Elastic Beanstalk Post Exploitation

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks