Parce qu'AHV utilise KVM avec une émulation de périphériques dérivée de QEMU, s'évader d'un invité AHV revient au problème QEMU : corrompre le processus QEMU par VM sur le nœud AHV via un modèle de périphérique. La surface accessible et les mécanismes sont ceux de QEMU, virtqueues virtio, cartes réseau émulées, contrôleurs de stockage, USB, donc le détail par périphérique figure sur les pages QEMU. Ce qui diffère, c'est l'environnement d'atterrissage et le pivot ultérieur : l'exécution de code atterrit sur un nœud AHV dont le stockage et la gestion transitent par une Controller VM, de sorte que l'évasion est une étape vers le nœud, la CVM et le cluster.
# from the guest: the QEMU-emulated device inventory (escape surface)
lspci -nn; lsusb; dmesg | grep -i virtio
Les mécanismes des modèles de périphériques sont partagés avec QEMU :
- gestion des virtqueues virtio et des descripteurs indirects, voir périphériques virtio.
- gestion des descripteurs et de l'offload des cartes réseau émulées, voir Cartes réseau.
- gestion des commandes et des PRD des contrôleurs de stockage, voir Block et SCSI.
- gestion des rings des contrôleurs USB, voir Contrôleurs USB.
Ce qui diffère sur AHV#
# after landing in the QEMU process on the AHV node:
# - the node's storage I/O is served by the local Controller VM; reaching the CVM
# (over its internal network, typically 192.168.5.0/24) is the pivot to the fabric
# - node and CVM credentials/keys enable moving to Prism and other nodes
ip route; ip -4 addr # the internal CVM network is reachable from the host
Notes d'exploitation#
- La primitive d'évasion et la mécanique par périphérique sont celles de QEMU ; identifiez la version d'AHV (et donc de QEMU) et faites correspondre à l'avis du périphérique, exactement comme pour les exploits d'évasion connus QEMU.
- La valeur spécifique à AHV est le chemin ultérieur : depuis le nœud, la Controller VM locale médie tout le stockage et exécute les services de gestion, donc un point d'appui sur le nœud est une étape vers tout le cluster via le réseau interne de la CVM.
- Nutanix ajoute son propre confinement et ses propres services autour de QEMU ; évaluez le sandboxing du nœud comme pour n'importe quel hôte KVM, voir Accès à l'hôte et shell.