AWS - ECS Post Exploitation

Support HackTricks

ECS

Для отримання додаткової інформації перегляньте:

AWS - ECS Enum

Host IAM Roles

В ECS IAM роль може бути призначена завданню, що виконується всередині контейнера. Якщо завдання виконується всередині EC2 екземпляра, EC2 екземпляр матиме іншу IAM роль, прикріплену до нього. Це означає, що якщо вам вдасться зламати екземпляр ECS, ви потенційно можете отримати IAM роль, пов'язану з ECR та EC2 екземпляром. Для отримання додаткової інформації про те, як отримати ці облікові дані, перегляньте:

Зверніть увагу, що якщо EC2 екземпляр застосовує IMDSv2, згідно з документацією, відповідь на PUT запит матиме обмеження на кількість переходів 1, що ускладнює доступ до метаданих EC2 з контейнера всередині EC2 екземпляра.

Privesc to node to steal other containers creds & secrets

Але більше того, EC2 використовує Docker для виконання завдань ECs, тому якщо ви зможете втекти до вузла або отримати доступ до сокета Docker, ви зможете перевірити, які інші контейнери запущені, і навіть потрапити всередину них та вкрасти їх IAM ролі.

Making containers run in current host

Крім того, роль EC2 екземпляра зазвичай матиме достатньо дозволів, щоб оновити стан контейнерного екземпляра EC2 екземплярів, що використовуються як вузли в кластері. Зловмисник може змінити стан екземпляра на DRAINING, тоді ECS видалить всі завдання з нього, а ті, що виконуються як REPLICA, будуть виконуватися в іншому екземплярі, потенційно всередині екземпляра зловмисника, щоб він міг вкрасти їх IAM ролі та потенційно чутливу інформацію зсередини контейнера.

aws ecs update-container-instances-state \
--cluster <cluster> --status DRAINING --container-instances <container-instance-id>

Ту ж техніку можна виконати, виключивши EC2 екземпляр з кластера. Це потенційно менш приховано, але це змусить завдання виконуватись на інших екземплярах:

aws ecs deregister-container-instance \
--cluster <cluster> --container-instance <container-instance-id> --force

Остання техніка для примусового повторного виконання завдань полягає в тому, щоб вказати ECS, що завдання або контейнер були зупинені. Існує 3 потенційні API для цього:

# Needs: ecs:SubmitTaskStateChange
aws ecs submit-task-state-change --cluster <value> \
--status STOPPED --reason "anything" --containers [...]

# Needs: ecs:SubmitContainerStateChange
aws ecs submit-container-state-change ...

# Needs: ecs:SubmitAttachmentStateChanges
aws ecs submit-attachment-state-changes ...

Вкрасти чутливу інформацію з контейнерів ECR

EC2 екземпляр, ймовірно, також матиме дозвіл ecr:GetAuthorizationToken, що дозволяє йому завантажувати зображення (ви можете шукати чутливу інформацію в них).

Підтримати HackTricks

Last updated