
Un problema in radareorg radare2 v.0.9.7 fino a v.5.8.6 e corretto nella v.5.8.8 consente a un attaccante locale di causare un denial of service tramite la funzione grub_sfs_read_extent.
Sherlock Fang, Vlad Tronciu, Ayam Babu
Un problema in radareorg radare2 v.0.9.7 fino alla v.5.8.6, risolto nella v.5.8.8, consente a un attaccante locale di causare un denial of service tramite la funzione grub_sfs_read_extent.
Creare un payload per far sì che “treeblock = grub_malloc(data->blocksize);” punti a NULL in memoria, così che quando il valore di “treeblock” viene assegnato a “tree = (struct grub_sfs_btree *) treeblock;”, anche “treeblock” punti a NULL. L'estensione dello sfruttamento dipende dal contesto specifico, ma una tale vulnerabilità di dereferenziazione di un puntatore nullo causerebbe al programma un denial of service, che incide sulle prestazioni complessive del programma.
All'interno della funzione grub_sfs_read_extent esiste una vulnerabilità di sicurezza dovuta alla mancanza di un controllo sullo stato di tree_block. Il codice successivo procede a utilizzare tree_block senza verificare che punti a un'allocazione di memoria valida. Questo porta alla dereferenziazione di un puntatore NULL quando a tree viene assegnato il valore di treeblock convertito in struct grub_sfs_btree* e poi utilizzato nella chiamata a grub_disk_read. Dereferenziare un puntatore NULL è un comportamento indefinito in C e tipicamente provoca un segmentation fault o una violazione di accesso, causando il crash del programma.

Abbiamo corretto la vulnerabilità aggiungendo un controllo sullo stato di allocazione di grub_malloc, come mostrato di seguito.