AWS Data Pipeline provisionne du calcul (une ressource EC2) pour exécuter les activités du pipeline sous un rôle de ressource. Avec iam:PassRole et datapipeline:CreatePipeline plus PutPipelineDefinition, vous définissez une ShellCommandActivity qui exécute vos commandes sur cette ressource, laquelle porte les identifiants du rôle passé via son profil d'instance.
Définir une activité shell#
aws datapipeline create-pipeline --name x --unique-id x
aws datapipeline put-pipeline-definition --pipeline-id <id> \
--pipeline-objects file://objects.json \
--parameter-values myRole=<privileged-resource-role>
aws datapipeline activate-pipeline --pipeline-id <id>
La ShellCommandActivity dans objects.json s'exécute sur la ressource EC2 provisionnée, de sorte qu'elle peut interroger IMDS pour les identifiants du rôle de ressource et les exfiltrer.
Notes d'exploitation#
- Data Pipeline est un service hérité mais reste une escalade connue lorsque le rôle de ressource est privilégié.
- L'activité s'exécute sur une véritable instance, de sorte que la récupération via EC2 IMDS s'applique une fois la commande arrivée.
Outils#
- AWS CLI (
datapipeline create-pipeline/put-pipeline-definition). - Pacu : module privesc Data Pipeline.