AWS - Elastic Beanstalk Enum

Підтримайте HackTricks

Elastic Beanstalk

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

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

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

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

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

AWS - EKS Enum

Application & Environments

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

Application

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

  • Коли ви створюєте додаток, ви надаєте ім'я та опис, але ресурси на цьому етапі не виділяються. Це просто спосіб організувати та керувати вашим кодом та пов'язаними ресурсами.

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

Environment

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

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

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

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

  1. Web Server Environment: Призначене для хостингу та обслуговування веб-додатків та API. Ці додатки зазвичай обробляють вхідні HTTP/HTTPS запити. Середовище веб-сервера виділяє ресурси, такі як EC2 інстанси, балансувальники навантаження та авто-масштабуючі групи для обробки вхідного трафіку, управління потужностями та забезпечення високої доступності додатка.

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

Security

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

  • EC2 key pair: Це буде SSH ключ, який зможе отримати доступ до EC2 інстансів, що виконують додаток

  • IAM instance profile: Це профіль інстансу, який матимуть інстанси (IAM привілеї)

  • Автоматично створена роль називається aws-elasticbeanstalk-ec2-role і має деякі цікаві доступи до всіх ECS, всіх SQS, DynamoDB elasticbeanstalk та elasticbeanstalk S3, використовуючи керовані політики AWS: AWSElasticBeanstalkWebTier, AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWorkerTier.

  • Service role: Це роль, яку використовуватиме сервіс AWS для виконання всіх необхідних дій. Наскільки мені відомо, звичайний користувач AWS не може отримати доступ до цієї ролі.

  • Ця роль, створена AWS, називається aws-elasticbeanstalk-service-role і використовує керовані політики AWS AWSElasticBeanstalkEnhancedHealth та AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy

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

Exposure

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

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

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

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

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

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

AWS - Elastic Beanstalk Unauthenticated Enum

Збереження доступу

AWS - Elastic Beanstalk Persistence

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

AWS - Elastic Beanstalk Privesc

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

AWS - Elastic Beanstalk Post Exploitation
Підтримайте HackTricks

Last updated