
Un problema en radareorg radare2 v.0.9.7 hasta v.5.8.6 y corregido en v.5.8.8 permite a un atacante local causar una denegación de servicio a través de la función grub_sfs_read_extent.
Sherlock Fang, Vlad Tronciu, Ayam Babu
Un problema en radareorg radare2 v.0.9.7 a v.5.8.6 y corregido en v.5.8.8 permite a un atacante local causar una denegación de servicio a través de la función grub_sfs_read_extent.
Crear un payload para que “treeblock = grub_malloc(data->blocksize);” apunte a NULL en memoria, de modo que cuando el valor de “treeblock” se asigna a “tree = (struct grub_sfs_btree *) treeblock;”, “treeblock” también apunta a NULL. El grado de explotabilidad depende de contextos específicos, pero dicha vulnerabilidad de desreferencia de puntero nulo provocaría una denegación de servicio en el programa, lo que afecta al rendimiento general del programa.
Dentro de la función grub_sfs_read_extent existe una vulnerabilidad de seguridad debido a la falta de una comprobación del estado de tree_block. El código subsiguiente utiliza tree_block sin verificar que apunte a una asignación de memoria válida. Esto llevará a la desreferencia de un puntero NULL cuando a tree se le asigna el valor de treeblock convertido a un struct grub_sfs_btree* y luego se utiliza en la llamada a grub_disk_read. Desreferenciar un puntero NULL es un comportamiento indefinido en C y normalmente resulta en un fallo de segmentación o violación de acceso, provocando el bloqueo del programa.

Corregimos la vulnerabilidad agregando una comprobación del estado de asignación de grub_malloc, como se muestra a continuación.