# AWS - Elastic Beanstalk Enum
{{#include ../../../banners/hacktricks-training.md}}
## 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:
{{#ref}}
aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
{{#endref}}
Більше того, якщо використовується Docker, можливо використовувати **ECS**.
{{#ref}}
aws-eks-enum.md
{{#endref}}
### Додаток та середовища
У 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](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier), [AWSElasticBeanstalkMulticontainerDocker](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker), [AWSElasticBeanstalkWorkerTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier).
- **Роль служби**: Це **роль, яку використовуватиме служба AWS** для виконання всіх необхідних дій. Наскільки мені відомо, звичайний користувач AWS не може отримати доступ до цієї ролі.
- Ця роль, згенерована AWS, називається **`aws-elasticbeanstalk-service-role`** і використовує керовані політики AWS [AWSElasticBeanstalkEnhancedHealth](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth) та [AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://us-east-1.console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/aws-elasticbeanstalk-service-role?section=permissions)
За замовчуванням **версія метаданих 1 вимкнена**:
### Вразливість
Дані Beanstalk зберігаються в **S3 бакеті** з наступною назвою: **`elasticbeanstalk--`** (якщо він був створений у консолі AWS). Всередині цього бакету ви знайдете завантажений **вихідний код додатка**.
**URL** створеної веб-сторінки є **`http://-env...elasticbeanstalk.com/`**
> [!WARNING]
> Якщо ви отримаєте **доступ на читання** до бакету, ви зможете **читати вихідний код** і навіть знайти **чутливі облікові дані** в ньому.
>
> Якщо ви отримаєте **доступ на запис** до бакету, ви зможете **змінити вихідний код**, щоб **компрометувати** **IAM роль**, яку використовує додаток наступного разу, коли він буде виконаний.
### Перерахування
```bash
# Find S3 bucket
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 --environment-name
aws elasticbeanstalk describe-environment-resources --environment-name # Get env info such as SQS used queues
aws elasticbeanstalk describe-instances-health --environment-name # Get the instances of an environment
# Get events
aws elasticbeanstalk describe-events
```
### Неавтентифікований доступ
{{#ref}}
../aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum/README.md
{{#endref}}
### Персистентність
{{#ref}}
../aws-persistence/aws-elastic-beanstalk-persistence/README.md
{{#endref}}
### Підвищення привілеїв
{{#ref}}
../aws-privilege-escalation/aws-elastic-beanstalk-privesc/README.md
{{#endref}}
### Після експлуатації
{{#ref}}
../aws-post-exploitation/aws-elastic-beanstalk-post-exploitation/README.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}