CVE-2015-1328 Prova di concetto
Un exploit di prova di concetto (PoC) per CVE-2015-1328, una vulnerabilità di escalation dei privilegi che colpisce l'implementazione overlayfs del kernel Linux. Questa vulnerabilità consente a utenti locali non privilegiati di ottenere accesso root sfruttando controlli di permessi impropri nelle operazioni di mount overlayfs all'interno di namespace utente.
Panoramica
CVE-2015-1328 è una vulnerabilità di sicurezza critica che colpisce i kernel Linux con supporto overlayfs e user namespaces abilitati. La vulnerabilità consente a un utente locale non privilegiato di:
- Creare un user namespace usando
unshare(CLONE_NEWUSER)
- Montare filesystem overlayfs all'interno del namespace
- Sfruttare difetti nei controlli dei permessi per scrivere su
/etc/ld.so.preload
- Eseguire una libreria condivisa maligna per ottenere privilegi di root
Questo PoC dimostra la vulnerabilità:
- Utilizzando l'isolamento del namespace per bypassare le restrizioni di mount
- Montando overlayfs per manipolare file di sistema
- Iniettando una libreria condivisa personalizzata tramite
/etc/ld.so.preload
- Dirottando
getuid() per eseguire una shell root
Sistemi Affetti
- Ubuntu 14.04 LTS con versioni del kernel precedenti a 3.19.0-21.21
- Sistemi con:
- User namespaces abilitati (
kernel.unprivileged_userns_clone=1)
- Supporto del filesystem overlayfs
- Versioni del kernel non patchate
Requisiti
- Compilatore GCC con supporto 32-bit
- Kernel Linux con supporto per user namespaces e overlayfs
- Librerie di sistema appropriate (supporto del flag
-m32)
Compilazione
Il progetto include un Makefile per una facile compilazione:
Questo compilerà:
ofs - Il binario principale dell'exploit (statico 32-bit)
ofs-lib.so - La libreria condivisa per l'hook LD_PRELOAD (32-bit)
Compilazione Manuale
Se preferisci compilare manualmente:
# Compile main exploit
gcc -o ofs ofs.c -m32 -static
# Compile shared library
gcc -m32 -fPIC -shared -o ofs-lib.so ofs-lib.c -ldl -static-libgcc
Utilizzo
⚠️ AVVISO: Questo exploit modificherà file di sistema e tenterà di ottenere privilegi di root. Utilizzare solo in ambienti controllati con la dovuta autorizzazione.
-
Compila l'exploit:
-
Esegui l'exploit:
-
Se ha successo, l'exploit:
- Creerà le strutture necessarie del namespace
- Montera' filesystem overlayfs
- Scriverà su
/etc/ld.so.preload
- Eseguirà
/bin/su che attiva la libreria maligna
- Genererà una shell root
Come Funziona
Flusso dell'Exploit
- Creazione del namespace: L'exploit crea un nuovo user namespace usando
unshare(CLONE_NEWUSER)
- Namespace di mount: Crea un namespace di mount usando
clone() con CLONE_NEWNS
- Mount overlayfs: Monta filesystem overlayfs per manipolare directory di sistema
- Manipolazione file: Usa overlayfs per rinominare file e scrivere su
/etc/ld.so.preload
- Iniezione libreria: Scrive una libreria condivisa maligna su
/tmp/ofs-lib.so
- Escalation dei privilegi: Esegue
/bin/su, che attiva la libreria precaricata
- Shell root: La libreria dirotta
getuid() e genera una shell root
Dettagli Tecnici
- L'exploit usa
clone() con uno stack personalizzato per creare namespace di mount isolati
- I mount overlayfs consentono la manipolazione di file all'interno del namespace che influisce sull'host
- La libreria condivisa (
ofs-lib.so) aggancia getuid() tramite LD_PRELOAD
- Quando
/bin/su chiama getuid(), la funzione maligna viene eseguita al suo posto
Struttura del Codice
.
├── ofs.c # Main exploit code
├── ofs-lib.c # Shared library for privilege escalation
├── lib_so.h # Embedded binary library data
├── Makefile # Build configuration
└── README.md # This file
File Chiave
- ofs.c: Contiene la logica principale dell'exploit, la creazione del namespace e le operazioni di mount
- ofs-lib.c: Implementa l'hook
getuid() che genera una shell root
- lib_so.h: Contiene la libreria condivisa compilata come array binario (per l'incorporamento)
Mitigazione
Per proteggersi da questa vulnerabilità:
- Aggiornare il kernel a una versione patchata (3.19.0-21.21 o successiva per Ubuntu 14.04)
- Disabilitare gli user namespaces se non necessari:
echo 0 > /proc/sys/kernel/unprivileged_userns_clone
- Usare AppArmor/SELinux per limitare le capacità di creazione di namespace
- Monitorare i log di sistema per operazioni di mount sospette
Disclaimer Legale ed Etico
Questo codice è fornito solo per scopi educativi e di ricerca sulla sicurezza.
- L'uso non autorizzato di questo exploit contro sistemi senza esplicita autorizzazione è illegale
- Questo PoC è destinato a:
- Ricercatori di sicurezza che studiano vulnerabilità del kernel
- Amministratori di sistema che testano la resilienza dei propri sistemi
- Scopi educativi in ambienti controllati
- Gli autori non sono responsabili per qualsiasi uso improprio di questo codice
- Assicurati sempre di avere la dovuta autorizzazione prima di testare su qualsiasi sistema
Riferimenti
Licenza
Questo progetto è fornito così com'è per scopi educativi. Utilizzare in modo responsabile e in conformità con tutte le leggi e i regolamenti applicabili.