AWS - Elastic Beanstalk Enum

Support HackTricks

Elastic Beanstalk

Amazon Elastic Beanstalk zapewnia uproszczoną platformę do wdrażania, zarządzania i skalowania aplikacji internetowych i usług. Obsługuje różnorodne języki programowania i frameworki, takie jak Java, .NET, PHP, Node.js, Python, Ruby i Go, a także kontenery Docker. Usługa jest zgodna z powszechnie używanymi serwerami, w tym Apache, Nginx, Passenger i IIS.

Elastic Beanstalk zapewnia prosty i elastyczny sposób na wdrażanie aplikacji w chmurze AWS, bez potrzeby martwienia się o infrastrukturę. Automatycznie zajmuje się szczegółami dotyczącymi prowizjonowania pojemności, równoważenia obciążenia, skalowania i monitorowania stanu aplikacji, co pozwala skupić się na pisaniu i wdrażaniu kodu.

Infrastruktura tworzona przez Elastic Beanstalk jest zarządzana przez Autoscaling Groups w EC2 (z równoważnikiem obciążenia). Oznacza to, że na koniec dnia, jeśli skomprymujesz hosta, powinieneś wiedzieć o EC2:

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

Ponadto, jeśli używany jest Docker, możliwe jest korzystanie z ECS.

AWS - EKS Enum

Aplikacja i Środowiska

W AWS Elastic Beanstalk pojęcia "aplikacja" i "środowisko" pełnią różne funkcje i mają odrębne role w procesie wdrażania.

Aplikacja

  • Aplikacja w Elastic Beanstalk to logiczny kontener dla kodu źródłowego aplikacji, środowisk i konfiguracji. Grupuje różne wersje kodu aplikacji i pozwala zarządzać nimi jako jedną jednostką.

  • Kiedy tworzysz aplikację, podajesz nazwę i opis, ale na tym etapie żadne zasoby nie są przydzielane. To po prostu sposób na zorganizowanie i zarządzanie swoim kodem i powiązanymi zasobami.

  • Możesz mieć wiele wersji aplikacji w ramach jednej aplikacji. Każda wersja odpowiada konkretnej wersji twojego kodu, która może być wdrożona w jednym lub więcej środowiskach.

Środowisko

  • Środowisko to przydzielona instancja twojej aplikacji działająca na infrastrukturze AWS. To gdzie kod twojej aplikacji jest wdrażany i wykonywany. Elastic Beanstalk przydziela niezbędne zasoby (np. instancje EC2, równoważniki obciążenia, grupy auto-skalowania, bazy danych) na podstawie konfiguracji środowiska.

  • Każde środowisko uruchamia jedną wersję twojej aplikacji, a ty możesz mieć wiele środowisk do różnych celów, takich jak rozwój, testowanie, staging i produkcja.

  • Kiedy tworzysz środowisko, wybierasz platformę (np. Java, .NET, Node.js itp.) oraz typ środowiska (np. serwer WWW lub pracownik). Możesz również dostosować konfigurację środowiska, aby kontrolować różne aspekty infrastruktury i ustawień aplikacji.

2 typy Środowisk

  1. Środowisko serwera WWW: Jest zaprojektowane do hostowania i obsługi aplikacji internetowych i API. Te aplikacje zazwyczaj obsługują przychodzące żądania HTTP/HTTPS. Środowisko serwera WWW przydziela zasoby takie jak instancje EC2, równoważniki obciążenia i grupy auto-skalowania, aby obsługiwać przychodzący ruch, zarządzać pojemnością i zapewnić wysoką dostępność aplikacji.

  2. Środowisko pracownika: Jest zaprojektowane do przetwarzania zadań w tle, które często są czasochłonne lub zasobożerne i nie wymagają natychmiastowych odpowiedzi dla klientów. Środowisko pracownika przydziela zasoby takie jak instancje EC2 i grupy auto-skalowania, ale nie ma równoważnika obciążenia, ponieważ nie obsługuje bezpośrednio żądań HTTP/HTTPS. Zamiast tego, konsumuje zadania z Amazon Simple Queue Service (SQS), które działa jako bufor między środowiskiem pracownika a zadaniami, które przetwarza.

Bezpieczeństwo

Podczas tworzenia aplikacji w Beanstalk istnieją 3 bardzo ważne opcje bezpieczeństwa do wyboru:

  • Para kluczy EC2: To będzie klucz SSH, który będzie mógł uzyskać dostęp do instancji EC2 uruchamiających aplikację.

  • Profil instancji IAM: To jest profil instancji, który będą miały instancje (uprawnienia IAM).

  • Autogenerowana rola nazywa się aws-elasticbeanstalk-ec2-role i ma interesujący dostęp do wszystkich ECS, wszystkich SQS, DynamoDB elasticbeanstalk i elasticbeanstalk S3, korzystając z zarządzanych polityk AWS: AWSElasticBeanstalkWebTier, AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWorkerTier.

  • Rola usługi: To jest rola, którą usługa AWS będzie używać do wykonywania wszystkich potrzebnych działań. O ile mi wiadomo, zwykły użytkownik AWS nie może uzyskać dostępu do tej roli.

  • Ta rola generowana przez AWS nazywa się aws-elasticbeanstalk-service-role i korzysta z zarządzanych polityk AWS AWSElasticBeanstalkEnhancedHealth i AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy

Domyślnie wersja metadanych 1 jest wyłączona:

Ekspozycja

Dane Beanstalk są przechowywane w wiadrze S3 o następującej nazwie: elasticbeanstalk-<region>-<acc-id> (jeśli zostało utworzone w konsoli AWS). Wewnątrz tego wiadra znajdziesz przesłany kod źródłowy aplikacji.

URL utworzonej strony internetowej to http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/

Jeśli uzyskasz dostęp do odczytu do wiadra, możesz odczytać kod źródłowy i nawet znaleźć wrażliwe dane uwierzytelniające w nim

jeśli uzyskasz dostęp do zapisu do wiadra, możesz zmodyfikować kod źródłowy, aby skomprymować rolę IAM, której aplikacja używa przy następnym jej wykonaniu.

Enumeracja

# 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

Nieautoryzowany dostęp

AWS - Elastic Beanstalk Unauthenticated Enum

Utrzymywanie

AWS - Elastic Beanstalk Persistence

Podwyższenie uprawnień

AWS - Elastic Beanstalk Privesc

Po eksploatacji

AWS - Elastic Beanstalk Post Exploitation
Wsparcie dla HackTricks

Last updated