GCP - Network Docker Escape

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Ausgangszustand

In beiden Beschreibungen, in denen diese Technik spezifiziert ist, gelang es den Angreifern, Root-Zugriff innerhalb eines von GCP verwalteten Docker-Containers zu erhalten, der Zugriff auf das Host-Netzwerk (und die Fähigkeiten CAP_NET_ADMIN und CAP_NET_RAW) hat.

Angriffserklärung

Auf einer Google Compute Engine-Instanz zeigt die regelmäßige Überprüfung des Netzwerkverkehrs zahlreiche einfache HTTP-Anfragen an die Metadateninstanz unter 169.254.169.254. Der Google Guest Agent, ein Open-Source-Dienst, stellt häufig solche Anfragen.

Dieser Agent ist darauf ausgelegt, Änderungen in den Metadaten zu überwachen. Insbesondere umfassen die Metadaten ein Feld für SSH-Public Keys. Wenn ein neuer öffentlicher SSH-Schlüssel zu den Metadaten hinzugefügt wird, autorisiert der Agent ihn automatisch in der Datei .authorized_key. Er kann auch einen neuen Benutzer erstellen und ihn bei Bedarf den sudoers hinzufügen.

Der Agent überwacht Änderungen, indem er eine Anfrage sendet, um alle Metadatenwerte rekursiv abzurufen (GET /computeMetadata/v1/?recursive=true). Diese Anfrage ist so konzipiert, dass der Metadatenserver nur dann eine Antwort sendet, wenn seit dem letzten Abruf eine Änderung in den Metadaten vorliegt, die durch ein Etag identifiziert wird (wait_for_change=true&last_etag=). Darüber hinaus wird ein Timeout-Parameter (timeout_sec=) hinzugefügt. Wenn innerhalb des angegebenen Timeouts keine Änderung erfolgt, antwortet der Server mit den unveränderten Werten.

Dieser Prozess ermöglicht es dem IMDS (Instance Metadata Service), nach 60 Sekunden zu antworten, wenn keine Konfigurationsänderung aufgetreten ist, was ein potenzielles Fenster für das Einschleusen einer gefälschten Konfigurationsantwort an den Gast-Agenten schafft.

Ein Angreifer könnte dies ausnutzen, indem er einen Man-in-the-Middle (MitM)-Angriff durchführt, die Antwort vom IMDS-Server fälscht und einen neuen öffentlichen Schlüssel einfügt. Dies könnte unbefugten SSH-Zugriff auf den Host ermöglichen.

Fluchttechnik

Während ARP-Spoofing in Google Compute Engine-Netzwerken unwirksam ist, kann eine modifizierte Version von rshijack entwickelt von Ezequiel für die Paketeinspritzung in der Kommunikation verwendet werden, um den SSH-Benutzer einzufügen.

Diese Version von rshijack ermöglicht die Eingabe der ACK- und SEQ-Nummern als Befehlszeilenargumente, was das Fälschen einer Antwort vor der tatsächlichen Antwort des Metadatenservers erleichtert. Darüber hinaus wird ein kleines Shell-Skript verwendet, um eine speziell gestaltete Nutzlast zurückzugeben. Diese Nutzlast löst aus, dass der Google Guest Agent einen Benutzer wouter mit einem spezifizierten öffentlichen Schlüssel in der Datei .authorized_keys erstellt.

Das Skript verwendet dasselbe ETag, um zu verhindern, dass der Metadatenserver den Google Guest Agent sofort über unterschiedliche Metadatenwerte informiert, wodurch die Antwort verzögert wird.

Um das Fälschen auszuführen, sind die folgenden Schritte erforderlich:

  1. Überwachen Sie Anfragen an den Metadatenserver mit tcpdump:

tcpdump -S -i eth0 'host 169.254.169.254 and port 80' &

Schauen Sie nach einer ähnlichen Zeile wie:

<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. Senden Sie die gefälschten Metadaten mit dem korrekten ETAG an 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

Dieser Schritt autorisiert den öffentlichen Schlüssel und ermöglicht eine SSH-Verbindung mit dem entsprechenden privaten Schlüssel.

Referenzen

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated