GCP - Network Docker Escape

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Початковий стан

У обох описах, де ця техніка вказана, зловмисники змогли отримати доступ 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 секунд, якщо не відбулася жодна зміна конфігурації, створюючи потенційне вікно для впровадження фальшивої відповіді конфігурації для гостьового агента.

Зловмисник може використати це, виконавши атаку Man-in-the-Middle (MitM), підробивши відповідь від сервера IMDS та додавши новий публічний ключ. Це може дозволити несанкціонований доступ SSH до хоста.

Техніка втечі

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

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

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

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

  1. Моніторинг запитів до сервера метаданих за допомогою tcpdump:

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:

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 з відповідним приватним ключем.

References

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated