GCP - Network Docker Escape
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
В обох звітах, де зазначена ця техніка, зловмисники змогли отримати доступ до root всередині Docker контейнера, керованого GCP, з доступом до хост-мережі (та можливостями CAP_NET_ADMIN
і CAP_NET_RAW
).
На екземплярі Google Compute Engine регулярна перевірка мережевого трафіку виявляє численні звичайні HTTP запити до метаданих екземпляра за адресою 169.254.169.254
. Google Guest Agent, відкритий сервіс, часто робить такі запити.
Цей агент призначений для моніторингу змін у метаданих. Зокрема, метадані включають поле для SSH публічних ключів. Коли новий публічний SSH ключ додається до метаданих, агент автоматично авторизує його у файлі .authorized_key
. Він також може створити нового користувача і додати його до sudoers, якщо це необхідно.
Агент моніторить зміни, надсилаючи запит на отримання всіх значень метаданих рекурсивно (GET /computeMetadata/v1/?recursive=true
). Цей запит призначений для того, щоб змусити сервер метаданих надіслати відповідь лише у разі, якщо відбулися зміни в метаданих з моменту останнього отримання, що визначається Etag (wait_for_change=true&last_etag=
). Крім того, включено параметр тайм-аут (timeout_sec=
). Якщо зміни не відбуваються протягом вказаного тайм-ауту, сервер відповідає незмінними значеннями.
Цей процес дозволяє IMDS (Служба метаданих екземпляра) відповідати через 60 секунд, якщо конфігураційні зміни не відбулися, створюючи потенційне вікно для ін'єкції фальшивої конфігураційної відповіді до гостьового агента.
Зловмисник може скористатися цим, здійснивши атаку "людина посередині" (MitM), підробляючи відповідь від сервера IMDS і вставляючи новий публічний ключ. Це може дозволити несанкціонований SSH доступ до хоста.
Хоча ARP підробка є неефективною в мережах Google Compute Engine, модифікована версія rshijack, розроблена Ezequiel, може бути використана для ін'єкції пакетів у спілкуванні для вставки SSH користувача.
Ця версія rshijack дозволяє вводити номери ACK і SEQ як аргументи командного рядка, що полегшує підробку відповіді перед реальною відповіддю сервера метаданих. Крім того, використовується невеликий Shell скрипт, щоб повернути спеціально підготовлений корисний вантаж. Цей вантаж викликає Google Guest Agent для створення користувача wouter
з вказаним публічним ключем у файлі .authorized_keys
.
Скрипт використовує той же ETag, щоб запобігти миттєвому сповіщенню сервера метаданих Google Guest Agent про різні значення метаданих, таким чином затримуючи відповідь.
Щоб виконати підробку, необхідні наступні кроки:
Моніторити запити до сервера метаданих за допомогою tcpdump:
Шукайте рядок, подібний до:
Відправте підроблені дані метаданих з правильним ETAG до rshijack:
Цей крок авторизує публічний ключ, що дозволяє SSH-з'єднання з відповідним приватним ключем.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)