GCP - Network Docker Escape

Reading time: 4 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

Initial State

У обох звітах, де зазначена ця техніка, зловмисники змогли отримати доступ до root всередині Docker контейнера, керованого GCP, з доступом до хост-мережі (та можливостями CAP_NET_ADMIN та CAP_NET_RAW).

Attack Explanation

На екземплярі Google Compute Engine регулярна перевірка мережевого трафіку виявляє численні plain 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 до хоста.

Escape Technique

Хоча ARP підробка є неефективною в мережах Google Compute Engine, модифікована версія rshijack, розроблена Ezequiel, може бути використана для ін'єкції пакетів у комунікації для вставки SSH користувача.

Ця версія rshijack дозволяє вводити номери ACK та SEQ як аргументи командного рядка, що полегшує підробку відповіді перед реальною відповіддю сервера метаданих. Крім того, використовується невеликий Shell скрипт, щоб повернути спеціально підготовлений корисний вантаж. Цей вантаж спонукає Google Guest Agent створити користувача wouter з вказаним публічним ключем у файлі .authorized_keys.

Скрипт використовує той же ETag, щоб запобігти негайному сповіщенню сервера метаданих Google Guest Agent про різні значення метаданих, таким чином затримуючи відповідь.

Для виконання підробки необхідні наступні кроки:

  1. Моніторинг запитів до сервера метаданих за допомогою tcpdump:
bash
tcpdump -S -i eth0 'host 169.254.169.254 and port 80' &

Шукайте рядок, подібний до:

<TIME> IP <LOCAL_IP>.<PORT> > 169.254.169.254.80: Flags [P.], seq <NUM>:<TARGET_ACK>, ack <TARGET_SEQ>, win <NUM>, length <NUM>: HTTP: GET /computeMetadata/v1/?timeout_sec=<SECONDS>&last_etag=<ETAG>&alt=json&recursive=True&wait_for_change=True HTTP/1.1
  1. Відправте підроблені метадані з правильним ETAG до rshijack:
bash
fakeData.sh <ETAG> | rshijack -q eth0 169.254.169.254:80 <LOCAL_IP>:<PORT> <TARGET_SEQ> <TARGET_ACK>; ssh -i id_rsa -o StrictHostKeyChecking=no wouter@localhost

Цей крок авторизує публічний ключ, що дозволяє з'єднання SSH з відповідним приватним ключем.

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks