AWS - ECS Privesc
ECS
Mehr Infos über ECS in:
AWS - ECS Enumiam:PassRole
, ecs:RegisterTaskDefinition
, ecs:RunTask
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:RunTask
Ein Angreifer, der die Berechtigungen iam:PassRole
, ecs:RegisterTaskDefinition
und ecs:RunTask
in ECS missbraucht, kann eine neue Task-Definition mit einem bösartigen Container erstellen, der die Metadaten-Anmeldeinformationen stiehlt und ausführt.
Potentieller Einfluss: Direkte Privesc zu einer anderen ECS-Rolle.
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
Genau wie im vorherigen Beispiel kann ein Angreifer, der die iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
Berechtigungen in ECS missbraucht, eine neue Task-Definition mit einem bösartigen Container erstellen, der die Metadaten-Anmeldeinformationen stiehlt und ausführt.
In diesem Fall muss jedoch eine Container-Instanz vorhanden sein, um die bösartige Task-Definition auszuführen.
Potentieller Einfluss: Direkte Privesc zu jeder ECS-Rolle.
iam:PassRole
, ecs:RegisterTaskDefinition
, (ecs:UpdateService|ecs:CreateService)
iam:PassRole
, ecs:RegisterTaskDefinition
, (ecs:UpdateService|ecs:CreateService)
Genau wie im vorherigen Beispiel kann ein Angreifer, der die iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:UpdateService
oder ecs:CreateService
Berechtigungen in ECS missbraucht, eine neue Task-Definition mit einem bösartigen Container erstellen, der die Metadaten-Anmeldeinformationen stiehlt und sie durch Erstellen eines neuen Dienstes mit mindestens einer laufenden Aufgabe ausführen.
Potentieller Einfluss: Direkte Privesc zu jeder ECS-Rolle.
iam:PassRole
, (ecs:UpdateService|ecs:CreateService)
iam:PassRole
, (ecs:UpdateService|ecs:CreateService)
Tatsächlich ist es mit diesen Berechtigungen möglich, Overrides zu verwenden, um beliebige Befehle in einem Container mit einer beliebigen Rolle auszuführen, mit etwas wie:
Potentieller Einfluss: Direkte Privesc zu jeder ECS-Rolle.
ecs:RegisterTaskDefinition
, (ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
ecs:RegisterTaskDefinition
, (ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
Dieses Szenario ist wie die vorherigen, aber ohne die iam:PassRole
Berechtigung.
Dies ist immer noch interessant, weil, wenn du einen beliebigen Container ausführen kannst, selbst wenn es ohne Rolle ist, könntest du einen privilegierten Container ausführen, um auf den Knoten zu entkommen und die EC2 IAM-Rolle und die anderen ECS-Container-Rollen zu stehlen, die im Knoten laufen.
Du könntest sogar andere Aufgaben zwingen, innerhalb der kompromittierten EC2-Instanz zu laufen, um deren Anmeldeinformationen zu stehlen (wie im Privesc to node Abschnitt besprochen).
Dieser Angriff ist nur möglich, wenn der ECS-Cluster EC2 Instanzen und nicht Fargate verwendet.
ecs:ExecuteCommand
, ecs:DescribeTasks,
(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
ecs:ExecuteCommand
, ecs:DescribeTasks,
(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
Ein Angreifer mit den Berechtigungen ecs:ExecuteCommand
, ecs:DescribeTasks
kann Befehle ausführen in einem laufenden Container und die IAM-Rolle, die daran angehängt ist, exfiltrieren (die Describe-Berechtigungen sind notwendig, weil aws ecs execute-command
ausgeführt werden muss).
Allerdings muss die Container-Instanz den ExecuteCommand-Agenten ausführen (was standardmäßig nicht der Fall ist).
Daher könnte der Angreifer versuchen:
Versuchen, einen Befehl in jedem laufenden Container auszuführen
Wenn er
ecs:RunTask
hat, führe eine Aufgabe mitaws ecs run-task --enable-execute-command [...]
aus.Wenn er
ecs:StartTask
hat, führe eine Aufgabe mitaws ecs start-task --enable-execute-command [...]
aus.Wenn er
ecs:CreateService
hat, erstelle einen Dienst mitaws ecs create-service --enable-execute-command [...]
.Wenn er
ecs:UpdateService
hat, aktualisiere einen Dienst mitaws ecs update-service --enable-execute-command [...]
.
Du findest Beispiele für diese Optionen in vorherigen ECS privesc Abschnitten.
Potenzielle Auswirkung: Privesc zu einer anderen Rolle, die Containern zugewiesen ist.
ssm:StartSession
ssm:StartSession
Überprüfe auf der ssm privesc Seite, wie du diese Berechtigung missbrauchen kannst, um privesc zu ECS:
AWS - SSM Privesciam:PassRole
, ec2:RunInstances
iam:PassRole
, ec2:RunInstances
Überprüfe auf der ec2 privesc Seite, wie du diese Berechtigungen missbrauchen kannst, um privesc zu ECS:
AWS - EC2 Privesc?ecs:RegisterContainerInstance
?ecs:RegisterContainerInstance
TODO: Ist es möglich, eine Instanz von einem anderen AWS-Konto zu registrieren, sodass Aufgaben unter Maschinen ausgeführt werden, die vom Angreifer kontrolliert werden??
ecs:CreateTaskSet
, ecs:UpdateServicePrimaryTaskSet
, ecs:DescribeTaskSets
ecs:CreateTaskSet
, ecs:UpdateServicePrimaryTaskSet
, ecs:DescribeTaskSets
TODO: Teste dies
Ein Angreifer mit den Berechtigungen ecs:CreateTaskSet
, ecs:UpdateServicePrimaryTaskSet
und ecs:DescribeTaskSets
kann ein bösartiges Task-Set für einen bestehenden ECS-Dienst erstellen und das primäre Task-Set aktualisieren. Dies ermöglicht dem Angreifer, beliebigen Code innerhalb des Dienstes auszuführen.
Potentieller Einfluss: Ausführung von beliebigem Code im betroffenen Dienst, was möglicherweise seine Funktionalität beeinträchtigt oder sensible Daten exfiltriert.
Referenzen
Last updated