
Um problema no radare2 do radareorg v.0.9.7 até v.5.8.6, corrigido na v.5.8.8, permite que um invasor local cause uma negação de serviço por meio da função grub_sfs_read_extent.
Sherlock Fang, Vlad Tronciu, Ayam Babu
Um problema no radareorg radare2 v.0.9.7 até v.5.8.6 e corrigido na v.5.8.8 permite que um atacante local cause uma negação de serviço através da função grub_sfs_read_extent.
A criação de um payload para fazer com que “treeblock = grub_malloc(data->blocksize);” aponte para NULL na memória, de modo que quando o valor de “treeblock” é atribuído a “tree = (struct grub_sfs_btree *) treeblock;”, “treeblock” também aponte para NULL. A extensão da exploração depende de contextos específicos, mas tal vulnerabilidade de desreferência de ponteiro nulo causaria uma negação de serviço no programa, afetando o desempenho geral do programa.
Dentro da função grub_sfs_read_extent existe uma vulnerabilidade de segurança devido à falta de uma verificação do estado de tree_block. O código subsequente prossegue usando tree_block sem verificar se ele aponta para uma alocação de memória válida. Isso levará à desreferência de um ponteiro nulo quando tree recebe o valor de treeblock convertido para struct grub_sfs_btree* e depois usado na chamada a grub_disk_read. Desreferenciar um ponteiro nulo é um comportamento indefinido em C e tipicamente resulta em uma falha de segmentação ou violação de acesso, causando a falha do programa.
Corrigimos a vulnerabilidade adicionando uma verificação do estado de alocação de grub_malloc, conforme mostrado abaixo.
https://cwe.mitre.org/data/definitions/476.html
https://github.com/radareorg/radare2/issues/22586
https://github.com/radareorg/radare2/commit/8419d7d0cbe61c687dcb8a35de0acccb2ee4c220