
Sfida CTF che implementa l'exploit CVE-2022-0847 (Dirty Pipe) per sovrascrivere file di sola lettura. Include script di configurazione, suggerimenti e verifica per la pratica di sfruttamento del kernel.
Per questa sfida, devi sovrascrivere il file di sola lettura "cat.txt" usando l'exploit CVE-2022-0847 Ci sono molti modi per farlo usando l'exploit
Controlla che il file cat.txt sia un file di sola lettura
I limiti sono: l'attaccante deve avere i permessi di lettura (perché deve usare splice() per inserire una pagina in una pipe) l'offset non deve trovarsi sul confine di una pagina (perché almeno un byte di quella pagina deve essere stato inserito nella pipe tramite splice) la scrittura non può attraversare un confine di pagina (perché verrebbe creato un nuovo buffer anonimo per il resto) il file non può essere ridimensionato (perché la pipe ha una propria gestione del riempimento delle pagine e non comunica alla page cache quanti dati sono stati aggiunti)
Crea una pipe.
Riempire la pipe con dati arbitrari (per impostare il flag PIPE_BUF_FLAG_CAN_MERGE in tutte le voci dell'anello).
Svuota la pipe (lasciando il flag impostato in tutte le istanze struct pipe_buffer sull'anello struct pipe_inode_info).
Usa splice per inserire dati dal file di destinazione (aperto con O_RDONLY) nella pipe subito prima dell'offset di destinazione.
Scrivi dati arbitrari nella pipe; questi dati sovrascriveranno la pagina del file in cache invece di creare un nuovo struct pipe_buffer anonimo perché PIPE_BUF_FLAG_CAN_MERGE è impostato.
Sovrascrivi cat.txt, cambia
I'm a cat
1444
in
I'm a dog
2025
Usa check_cat.sh per verificare se funziona o meno chmod +x check_cat.sh ./check_cat.sh
Usa quanto segue chmod +x cat_generate.sh ./cat_generate.sh
I suggerimenti sono in hints.txt