AWS - Elastic Beanstalk Enum

Reading time: 7 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

Elastic Beanstalk

Amazon Elastic Beanstalk надає спрощену платформу для розгортання, управління та масштабування веб-додатків і сервісів. Він підтримує різноманітні мови програмування та фреймворки, такі як Java, .NET, PHP, Node.js, Python, Ruby та Go, а також контейнери Docker. Сервіс сумісний з широко використовуваними серверами, включаючи Apache, Nginx, Passenger та IIS.

Elastic Beanstalk надає простий і гнучкий спосіб розгортання ваших додатків у хмарі AWS, без необхідності турбуватися про підлягаючу інфраструктуру. Він автоматично обробляє деталі забезпечення потужності provisioning, балансування навантаження, scaling та моніторингу здоров'я додатків, дозволяючи вам зосередитися на написанні та розгортанні вашого коду.

Інфраструктура, створена Elastic Beanstalk, управляється Autoscaling Groups в EC2 (з балансувальником навантаження). Це означає, що в кінці дня, якщо ви компрометуєте хост, вам слід знати про EC2:

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

Більше того, якщо використовується Docker, можливо використовувати ECS.

AWS - EKS Enum

Додаток та середовища

У AWS Elastic Beanstalk концепції "додатка" та "середовища" виконують різні функції та мають різні ролі в процесі розгортання.

Додаток

  • Додаток в Elastic Beanstalk є логічним контейнером для вихідного коду вашого додатка, середовищ та конфігурацій. Він об'єднує різні версії коду вашого додатка та дозволяє вам керувати ними як єдиним цілим.
  • Коли ви створюєте додаток, ви надаєте ім'я та опис, але на цьому етапі ресурси не забезпечуються. Це просто спосіб організувати та керувати вашим кодом та супутніми ресурсами.
  • Ви можете мати кілька версій додатка в межах одного додатка. Кожна версія відповідає конкретному випуску вашого коду, який може бути розгорнутий в одному або кількох середовищах.

Середовище

  • Середовище є забезпеченою інстанцією вашого додатка, що працює на інфраструктурі AWS. Це місце, де ваш код додатка розгортається та виконується. Elastic Beanstalk забезпечує необхідні ресурси (наприклад, EC2 інстанції, балансувальники навантаження, групи автоматичного масштабування, бази даних) на основі конфігурації середовища.
  • Кожне середовище виконує одну версію вашого додатка, і ви можете мати кілька середовищ для різних цілей, таких як розробка, тестування, стадіювання та виробництво.
  • Коли ви створюєте середовище, ви вибираєте платформу (наприклад, Java, .NET, Node.js тощо) та тип середовища (наприклад, веб-сервер або робітник). Ви також можете налаштувати конфігурацію середовища, щоб контролювати різні аспекти інфраструктури та налаштувань додатка.

2 типи середовищ

  1. Середовище веб-сервера: Воно призначене для хостингу та обслуговування веб-додатків і API. Ці додатки зазвичай обробляють вхідні HTTP/HTTPS запити. Середовище веб-сервера забезпечує ресурси, такі як EC2 інстанції, балансувальники навантаження та групи автоматичного масштабування, щоб обробляти вхідний трафік, управляти потужністю та забезпечувати високу доступність додатка.
  2. Середовище робітника: Воно призначене для обробки фонових завдань, які часто є трудомісткими або ресурсомісткими операціями, що не вимагають негайних відповідей клієнтам. Середовище робітника забезпечує ресурси, такі як EC2 інстанції та групи автоматичного масштабування, але не має балансувальника навантаження, оскільки не обробляє HTTP/HTTPS запити безпосередньо. Натомість воно споживає завдання з Amazon Simple Queue Service (SQS) черги, яка діє як буфер між середовищем робітника та завданнями, які воно обробляє.

Безпека

При створенні додатка в Beanstalk є 3 дуже важливі параметри безпеки для вибору:

  • EC2 ключова пара: Це буде SSH ключ, який зможе отримати доступ до EC2 інстанцій, що виконують додаток.
  • IAM профіль інстанції: Це профіль інстанції, який матимуть інстанції (IAM привілеї).
  • Автоматично згенерована роль називається aws-elasticbeanstalk-ec2-role і має деякі цікаві доступи до всіх ECS, всіх SQS, DynamoDB elasticbeanstalk та elasticbeanstalk S3, використовуючи керовані політики AWS: AWSElasticBeanstalkWebTier, AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWorkerTier.
  • Роль служби: Це роль, яку використовуватиме служба AWS для виконання всіх необхідних дій. Наскільки мені відомо, звичайний користувач AWS не може отримати доступ до цієї ролі.
  • Ця роль, згенерована AWS, називається aws-elasticbeanstalk-service-role і використовує керовані політики AWS AWSElasticBeanstalkEnhancedHealth та AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy

За замовчуванням версія метаданих 1 вимкнена:

Вразливість

Дані Beanstalk зберігаються в S3 бакеті з наступною назвою: elasticbeanstalk-<region>-<acc-id> (якщо він був створений у консолі AWS). Всередині цього бакету ви знайдете завантажений вихідний код додатка.

URL створеної веб-сторінки є http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/

warning

Якщо ви отримаєте доступ на читання до бакету, ви зможете читати вихідний код і навіть знайти чутливі облікові дані в ньому.

Якщо ви отримаєте доступ на запис до бакету, ви зможете змінити вихідний код, щоб компрометувати IAM роль, яку використовує додаток наступного разу, коли він буде виконаний.

Перерахування

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

Неавтентифікований доступ

AWS - Elastic Beanstalk Unauthenticated Enum

Персистентність

AWS - Elastic Beanstalk Persistence

Підвищення привілеїв

AWS - Elastic Beanstalk Privesc

Після експлуатації

AWS - Elastic Beanstalk Post Exploitation

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks