# 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}}