GCP - Network Docker Escape

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

État initial

Dans les deux rapports oĂč cette technique est dĂ©crite, les attaquants ont rĂ©ussi Ă  obtenir un accĂšs root Ă  l’intĂ©rieur d’un conteneur Docker gĂ©rĂ© par GCP avec accĂšs au rĂ©seau de l’hĂŽte (et les capacitĂ©s CAP_NET_ADMIN et CAP_NET_RAW).

Explication de l’attaque

Sur une instance Google Compute Engine, une inspection rĂ©guliĂšre du trafic rĂ©seau rĂ©vĂšle de nombreuses requĂȘtes HTTP en clair vers l’instance de metadata Ă  169.254.169.254. Le Google Guest Agent, un service open-source, effectue frĂ©quemment ce type de requĂȘtes.

Cet agent est conçu pour surveiller les changements dans la metadata. Notamment, la metadata inclut un champ pour les clĂ©s publiques SSH. Lorsqu’une nouvelle clĂ© publique SSH est ajoutĂ©e Ă  la metadata, l’agent l’autorise automatiquement dans le fichier .authorized_key. Il peut aussi crĂ©er un nouvel utilisateur et l’ajouter aux sudoers si nĂ©cessaire.

L’agent surveille les changements en envoyant une requĂȘte pour rĂ©cupĂ©rer toutes les valeurs de metadata de façon rĂ©cursive (GET /computeMetadata/v1/?recursive=true). Cette requĂȘte est conçue pour inciter le serveur de metadata Ă  renvoyer une rĂ©ponse uniquement s’il y a eu un changement dans la metadata depuis la derniĂšre rĂ©cupĂ©ration, identifiĂ© par un Etag (wait_for_change=true&last_etag=). De plus, un paramĂštre de timeout (timeout_sec=) est inclus. Si aucun changement ne survient pendant le dĂ©lai spĂ©cifiĂ©, le serveur rĂ©pond avec les valeurs inchangĂ©es.

Ce processus permet Ă  l’IMDS (Instance Metadata Service) de rĂ©pondre aprĂšs 60 secondes si aucune modification de configuration n’a eu lieu, crĂ©ant une fenĂȘtre potentielle pour injecter une fausse rĂ©ponse de configuration vers le guest agent.

Un attaquant pourrait exploiter cela en rĂ©alisant une attaque Man-in-the-Middle (MitM), en spoofant la rĂ©ponse du serveur IMDS et en insĂ©rant une nouvelle clĂ© publique. Cela pourrait permettre un accĂšs SSH non autorisĂ© Ă  l’hĂŽte.

Technique d’évasion

Alors que l’ARP spoofing est inefficace sur les rĂ©seaux Google Compute Engine, une version modifiĂ©e de rshijack dĂ©veloppĂ©e par Ezequiel peut ĂȘtre utilisĂ©e pour l’injection de paquets dans la communication afin d’injecter l’utilisateur SSH.

Cette version de rshijack permet de fournir les numĂ©ros ACK et SEQ en tant qu’arguments en ligne de commande, facilitant le spoofing d’une rĂ©ponse avant la rĂ©ponse rĂ©elle du serveur Metadata. De plus, un petit Shell script est utilisĂ© pour renvoyer une charge utile spĂ©cialement conçue. Cette charge dĂ©clenche le Google Guest Agent pour crĂ©er un utilisateur wouter avec une clĂ© publique spĂ©cifiĂ©e dans le fichier .authorized_keys.

Le script utilise le mĂȘme ETag pour empĂȘcher le serveur Metadata d’avertir immĂ©diatement le Google Guest Agent de valeurs de metadata diffĂ©rentes, retardant ainsi la notification.

Pour exécuter le spoofing, les étapes suivantes sont nécessaires :

  1. Surveiller les requĂȘtes vers le serveur de metadata en utilisant tcpdump :
Surveiller les requĂȘtes vers le serveur de metadata avec tcpdump ```bash tcpdump -S -i eth0 'host 169.254.169.254 and port 80' & ```

Recherchez une ligne similaire Ă  :

Exemple de ligne de sortie tcpdump ```