AWS - ECS Privesc
ECS
Plus d'info sur ECS dans :
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:RunTask
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:RunTask
Un attaquant abusant des permissions iam:PassRole
, ecs:RegisterTaskDefinition
et ecs:RunTask
dans ECS peut générer une nouvelle définition de tâche avec un conteneur malveillant qui vole les identifiants de métadonnées et l'exécuter.
Impact potentiel : Privesc direct vers un rôle ECS différent.
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
Tout comme dans l'exemple précédent, un attaquant abusant des permissions iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:StartTask
dans ECS peut générer une nouvelle définition de tâche avec un conteneur malveillant qui vole les informations d'identification des métadonnées et l'exécuter.
Cependant, dans ce cas, une instance de conteneur doit être disponible pour exécuter la définition de tâche malveillante.
Impact potentiel : Privesc direct vers n'importe quel rôle ECS.
iam:PassRole
, ecs:RegisterTaskDefinition
, (ecs:UpdateService|ecs:CreateService)
iam:PassRole
, ecs:RegisterTaskDefinition
, (ecs:UpdateService|ecs:CreateService)
Tout comme dans l'exemple précédent, un attaquant abusant des permissions iam:PassRole
, ecs:RegisterTaskDefinition
, ecs:UpdateService
ou ecs:CreateService
dans ECS peut générer une nouvelle définition de tâche avec un conteneur malveillant qui vole les informations d'identification des métadonnées et l'exécuter en créant un nouveau service avec au moins 1 tâche en cours d'exécution.
Impact potentiel : Privesc direct vers n'importe quel rôle ECS.
iam:PassRole
, (ecs:UpdateService|ecs:CreateService)
iam:PassRole
, (ecs:UpdateService|ecs:CreateService)
En fait, juste avec ces permissions, il est possible d'utiliser des remplacements pour exécuter des commandes arbitraires dans un conteneur avec un rôle arbitraire avec quelque chose comme :
Impact potentiel : Privesc direct vers n'importe quel rôle ECS.
ecs:RegisterTaskDefinition
, (ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
ecs:RegisterTaskDefinition
, (ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
Ce scénario est similaire aux précédents mais sans la permission iam:PassRole
.
C'est toujours intéressant car si vous pouvez exécuter un conteneur arbitraire, même sans rôle, vous pourriez exécuter un conteneur privilégié pour échapper au nœud et voler le rôle IAM EC2 ainsi que les autres rôles de conteneurs ECS s'exécutant dans le nœud.
Vous pourriez même forcer d'autres tâches à s'exécuter à l'intérieur de l'instance EC2 que vous compromettez pour voler leurs identifiants (comme discuté dans la section Privesc vers le nœud).
Cette attaque n'est possible que si le cluster ECS utilise des instances EC2 et non Fargate.
ecs:ExecuteCommand
, ecs:DescribeTasks,
(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
ecs:ExecuteCommand
, ecs:DescribeTasks,
(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)
Un attaquant avec les ecs:ExecuteCommand
, ecs:DescribeTasks
peut exécuter des commandes à l'intérieur d'un conteneur en cours d'exécution et exfiltrer le rôle IAM qui y est attaché (vous avez besoin des permissions de description car il est nécessaire d'exécuter aws ecs execute-command
).
Cependant, pour ce faire, l'instance de conteneur doit exécuter l'agent ExecuteCommand (qui par défaut ne l'est pas).
Par conséquent, l'attaquant pourrait essayer de :
Essayer d'exécuter une commande dans chaque conteneur en cours d'exécution
S'il a
ecs:RunTask
, exécutez une tâche avecaws ecs run-task --enable-execute-command [...]
S'il a
ecs:StartTask
, exécutez une tâche avecaws ecs start-task --enable-execute-command [...]
S'il a
ecs:CreateService
, créez un service avecaws ecs create-service --enable-execute-command [...]
S'il a
ecs:UpdateService
, mettez à jour un service avecaws ecs update-service --enable-execute-command [...]
Vous pouvez trouver des exemples de ces options dans les sections précédentes sur le privesc ECS.
Impact potentiel : Privesc vers un rôle différent attaché aux conteneurs.
ssm:StartSession
ssm:StartSession
Vérifiez dans la page de privesc ssm comment vous pouvez abuser de cette permission pour privesc vers ECS :
iam:PassRole
, ec2:RunInstances
iam:PassRole
, ec2:RunInstances
Vérifiez dans la page de privesc ec2 comment vous pouvez abuser de ces permissions pour privesc vers ECS :
?ecs:RegisterContainerInstance
?ecs:RegisterContainerInstance
TODO : Est-il possible d'enregistrer une instance d'un autre compte AWS afin que les tâches soient exécutées sur des machines contrôlées par l'attaquant ??
ecs:CreateTaskSet
, ecs:UpdateServicePrimaryTaskSet
, ecs:DescribeTaskSets
ecs:CreateTaskSet
, ecs:UpdateServicePrimaryTaskSet
, ecs:DescribeTaskSets
TODO : Tester cela
Un attaquant avec les permissions ecs:CreateTaskSet
, ecs:UpdateServicePrimaryTaskSet
, et ecs:DescribeTaskSets
peut créer un ensemble de tâches malveillant pour un service ECS existant et mettre à jour l'ensemble de tâches principal. Cela permet à l'attaquant d'exécuter du code arbitraire au sein du service.
Impact potentiel : Exécuter du code arbitraire dans le service affecté, ce qui pourrait affecter sa fonctionnalité ou exfiltrer des données sensibles.
Références
Last updated