AWS - Elastic Beanstalk Enum

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Elastic Beanstalk

Amazon Elastic Beanstalk zapewnia uproszczoną platformę do wdrażania, zarządzania i skalowania aplikacji internetowych i usług. Obsługuje różne języki programowania i platformy, takie jak Java, .NET, PHP, Node.js, Python, Ruby oraz kontenery Docker. Usługa jest kompatybilna z szeroko stosowanymi serwerami, w tym Apache, Nginx, Passenger i IIS.

Elastic Beanstalk zapewnia prosty i elastyczny sposób wdrażania aplikacji w chmurze AWS, bez konieczności martwienia się o infrastrukturę podstawową. Automatycznie zarządza szczegółami dotyczącymi dostarczania zasobów, rozdziału obciążenia, skalowania oraz monitorowania zdrowia aplikacji, pozwalając skupić się na pisaniu i wdrażaniu kodu.

Infrastrukturą tworzoną przez Elastic Beanstalk zarządzają grupy Autoscaling w EC2 (z balanserem obciążenia). Oznacza to, że w ostatecznym rozrachunku, jeśli skompromitujesz hosta, powinieneś wiedzieć o EC2:

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

Ponadto, jeśli używany jest Docker, można korzystać z ECS.

pageAWS - 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 pojedynczą jednostkę.

  • Tworząc aplikację, podajesz nazwę i opis, ale nie są w tym momencie przydzielane żadne zasoby. Jest to po prostu sposób organizowania i zarządzania kodem oraz powiązanymi zasobami.

  • Możesz mieć wiele wersji aplikacji w ramach jednej aplikacji. Każda wersja odpowiada określonej wersji kodu, która może być wdrażana w jednym lub wielu środowiskach.

Środowisko

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

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

  • Tworząc środowisko, wybierasz platformę (np. Java, .NET, Node.js itp.) i typ środowiska (np. serwer internetowy lub pracownik). Możesz również dostosować konfigurację środowiska, aby kontrolować różne aspekty infrastruktury i ustawienia aplikacji.

2 rodzaje Środowisk

  1. Środowisko Serwera Internetowego: Jest przeznaczone do hostowania i obsługi aplikacji internetowych i interfejsów API. Te aplikacje zazwyczaj obsługują przychodzące żądania HTTP/HTTPS. Środowisko serwera internetowego przydziela zasoby takie jak instancje EC2, balansery obciążenia i grupy auto-scaling do obsługi ruchu przychodzącego, zarządzania pojemnością i zapewnienia wysokiej dostępności aplikacji.

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

Bezpieczeństwo

Tworząc aplikację w Beanstalk, istnieją 3 bardzo ważne opcje związane z bezpieczeństwem do wyboru:

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

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

  • Wygenerowana rola nosi nazwę aws-elasticbeanstalk-ec2-role i ma pewne interesujące uprawnienia do wszystkich ECS, wszystkich SQS, DynamoDB, elasticbeanstalk i elasticbeanstalk S3, korzystając z zarządzanych przez AWS polityk: AWSElasticBeanstalkWebTier, AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWorkerTier.

  • Rola usługi: Jest to rola, którą usługa AWS będzie używać do wykonywania wszystkich niezbędnych 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 nosi nazwę aws-elasticbeanstalk-service-role i korzysta z zarządzanych przez AWS polityk AWSElasticBeanstalkEnhancedHealth oraz AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy

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

### Narażenie

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 załadowany 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źć na nim wrażliwe dane uwierzytelniające.

Jeśli uzyskasz dostęp do zapisu do wiadra, możesz zmodyfikować kod źródłowy, aby zagrozić roli IAM, którą aplikacja będzie używać przy następnym uruchomieniu.

Wyliczanie

# 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

Nieuwierzytelniony dostęp

pageAWS - Elastic Beanstalk Unauthenticated Enum

Trwałość

pageAWS - Elastic Beanstalk Persistence

Przywileje

pageAWS - Elastic Beanstalk Privesc

Po wykorzystaniu

pageAWS - Elastic Beanstalk Post Exploitation
Zdobądź wiedzę na temat hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated